下面的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;