微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > VHDL中signal和variabl探讨之赋值时刻问题 附部分代码

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

时间:10-02 整理:3721RD 点击:
众所周知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;

令人惊异的情况

顶!

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

网站地图

Top