在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2072|回复: 2

[原创] VHDL中signal和variabl探讨之赋值时刻问题 附部分代码

[复制链接]
发表于 2014-2-12 11:42:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
众所周知signal和variable的最大区别就是signal不是立即赋值而variable是立即赋值
由于这个因素,在process中signal的赋值是在process结束以后才进行赋值的,所以一般来讲,在process里面的信号不允许有两个驱动源

下面的eg1和eg2是D触发器,eg1里面qbar赋值是在process中,eg2的qbar赋值是在process外。这样导致两个不同的结果,eg1仿真结果qbar赋值时刻比q晚一个时钟周期,eg2的qbar和q是在同一个时钟周期赋值。
eg1:
...
pore(clk,d:in std_logic;
q:buffer std_logic;
qbar: out std_Logic);
...
begin
  process(clk)  
    begin
       if(clk'event and clk='1') then
          q<=d;
          qbar<=not q;
       end if;
  end process;
...

eg2:
...
pore(clk,d:in std_logic;
q:buffer std_logic;
qbar:out std_Logic);
...
begin
  process(clk)  
    begin
       if(clk'event and clk='1') then
          q<=d;
       end if;
  end process;
  qbar<=not q;
...
但是在testbench中我们定义clk信号时一般是在process中对clk进行两次赋值,如eg3。VHDL综合器在process中出现对同一信号两次赋值时,要么出现警告报错要么就取最后一次赋值。这个问题怎么来解释?难道因为是仿真,所以这样是可行的?
eg3
...
process
constant clk_period: TIME;=10 ns;
begin
  clk<=‘1’;
  wait for clk_period/2;
  clk<='0';
  wait for clk_period/2;
end process;
发表于 2014-2-24 03:13:59 | 显示全部楼层
令人惊异的情况
发表于 2014-2-24 05:39:43 | 显示全部楼层
顶!!!!!!!!!!!!!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 20:30 , Processed in 0.018857 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表