VHDL三态总线的疑问
时间:10-02
整理:3721RD
点击:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY tri2 IS
PORT(ct1:in std_logic_vector(1 downto 0);
datain1,datain2,datain3,datain4: in std_logic_vector(7 downto 0);
qout: out std_logic_vector(7 downto 0)
);
END tri2;
ARCHITECTURE body_tri OF tri2 IS
BEGIN
qout <=datain1 when ct1="00" else (others=>'Z');
qout <=datain2 when ct1="01" else (others=>'Z');
qout <=datain3 when ct1="10" else (others=>'Z');
qout <=datain4 when ct1="11" else (others=>'Z');
END body_tri;
这个是书中的程序,在结构体中,并行对qout赋值,是不允许的啊,为什么这里能用呢,大家帮忙解释一下啊,多谢!
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY tri2 IS
PORT(ct1:in std_logic_vector(1 downto 0);
datain1,datain2,datain3,datain4: in std_logic_vector(7 downto 0);
qout: out std_logic_vector(7 downto 0)
);
END tri2;
ARCHITECTURE body_tri OF tri2 IS
BEGIN
qout <=datain1 when ct1="00" else (others=>'Z');
qout <=datain2 when ct1="01" else (others=>'Z');
qout <=datain3 when ct1="10" else (others=>'Z');
qout <=datain4 when ct1="11" else (others=>'Z');
END body_tri;
这个是书中的程序,在结构体中,并行对qout赋值,是不允许的啊,为什么这里能用呢,大家帮忙解释一下啊,多谢!
bad coding style,要看综合器能不能解释。上面那个应该等效于
qout <=datain1 when ct1="00" else
datain2 when ct1="01" else
datain3 when ct1="10" else
datain4 when ct1="11";
如果赋值的条件没有重叠,应该是能综合的,但不推荐这样来写代码 1# hipie
用ISE 综合后没错,没有仿真
三态门用IO上,内部不要用
2# falloutmx
又看了看书,else 后的 这句很有用,(others=>'Z'); 换成别的再综合就提示多驱动的错误了,看来程序没问题,这里赋成高阻,不知是什么作用
赋成高阻就是表示三态
但是这个程序中应该是不可能出现三态的,赋成高阻有什么用呢,很是不解
可以把总线交出来,让别的模块控制.
扩展用的吧
不然真没用
好,谢谢!
