|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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; |
|