打印
[VHDL]

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

[复制链接]
1644|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
明显代码有错啊!

使用特权

评论回复
5
woshizhengjie89| | 2014-5-30 11:22 | 只看该作者
不用问了LZ,结果是肯定的,不管你给什么信号,q肯定等于datain1,
其实上面四条语句等价于  q<=datain1    ...

使用特权

评论回复
6
520810| | 2014-6-2 16:55 | 只看该作者
赋值的确实只有一个值啊,代码有点问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝