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

[复制链接]
 楼主| zhangwenxinzck 发表于 2014-5-29 15:26 | 显示全部楼层 |阅读模式
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理解有错误啊。
难道说并行语句不能对同一信号赋值?越想越不明白了,求解答。
tongluren 发表于 2014-5-29 16:16 | 显示全部楼层
写错了吧,难道不是
q<=datain1 when ct1="00" else
   datain2 when ct1="01" else
   datain3 when ct1="10" else
   datain4 when ct1="11" else (others=>'z');
依据ct1选择q的值。
 楼主| zhangwenxinzck 发表于 2014-5-29 16:34 | 显示全部楼层
tongluren 发表于 2014-5-29 16:16
写错了吧,难道不是
q'z');
依据ct1选择q的值。

没有啊,照着试例写的,4个独立的when-else语句并行执行。
ococ 发表于 2014-5-29 17:00 | 显示全部楼层
明显代码有错啊!
woshizhengjie89 发表于 2014-5-30 11:22 | 显示全部楼层
不用问了LZ,结果是肯定的,不管你给什么信号,q肯定等于datain1,
其实上面四条语句等价于  q<=datain1    ...
520810 发表于 2014-6-2 16:55 | 显示全部楼层
赋值的确实只有一个值啊,代码有点问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

3

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部