微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > VHDL三态总线的疑问

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赋值,是不允许的啊,为什么这里能用呢,大家帮忙解释一下啊,多谢!

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'); 换成别的再综合就提示多驱动的错误了,看来程序没问题,这里赋成高阻,不知是什么作用

赋成高阻就是表示三态

但是这个程序中应该是不可能出现三态的,赋成高阻有什么用呢,很是不解

可以把总线交出来,让别的模块控制.

扩展用的吧
不然真没用

好,谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top