初学者对一段程序的疑问,请大家帮忙讲解。

2020-02-23 10:44发布

port(                        
                            ctl:in std_logic_vector(1 down to 0)
datain1,datain2,datain3,datain4:in std_logic_vector(7 downto 0)
                              q:out std_logic_vector
     );
architecture .........
begin
q<=datain1 when ct1="00" else (others=>'z');
q<=datain1 when ct1="01" else (others=>'z');
q<=datain1 when ct1="10" else (others=>'z');
q<=datain1 when ct1="11" else (others=>'z');
end;
这是一个试例的程序,最近小弟在学VHDL,看到这里有些疑问,请大家帮帮忙讲解一下。
程序的作用是4个8位的三态控制通道,我不明白的是它的赋值过程。结构体里是4个独立并行的when-else语句,也就是说档ct1信号发生变化时这4个语句会同时执行,书上说的是只有一条语句被执行。假如现在ct1=“00”,第一个when-else完成时q《=datain1,而二、三、四when-else语句赋值的结果是“zzzzzzzz”,那么q到底是赋的什么值?是我对并行语句理解有错误还是我对when-else理解有错误啊。
难道说并行语句不能对同一信号赋值?越想越不明白了,求解答。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
tongluren
1楼-- · 2020-02-23 14:29
 精彩回答 2  元偷偷看……
zhangwenxinzck
2楼-- · 2020-02-23 18:30
tongluren 发表于 2014-5-29 16:16
写错了吧,难道不是
q'z');
依据ct1选择q的值。

没有啊,照着试例写的,4个独立的when-else语句并行执行。
ococ
3楼-- · 2020-02-23 21:54
明显代码有错啊!
woshizhengjie89
4楼-- · 2020-02-24 02:39
不用问了LZ,结果是肯定的,不管你给什么信号,q肯定等于datain1,
其实上面四条语句等价于  q<=datain1    ...
520810
5楼-- · 2020-02-24 04:15
赋值的确实只有一个值啊,代码有点问题

一周热门 更多>