【发布时间】:2018-10-08 13:51:02
【问题描述】:
关于以无条件wait 语句结尾的 VHDL 进程,我有一些不明白的地方。为了说明我的问题,我需要比较以下 2 个片段:
片段 1:
library ieee;
use ieee.std_logic_1164.all;
entity foo is
end entity;
architecture sim of foo is
signal clk : std_logic := '0';
signal s : std_logic;
begin
clk <= not clk after 10 ns;
-- driver1
s <= '0';
-- driver2
process (clk) is
begin
s <= clk;
end process;
end architecture;
信号 s 有双重分配:Driver1 将信号 s 驱动为“0”,而 driver2 交替将其驱动为“0”和“1”。正如我们在波形图上看到的,当 clk 为“0”时,生成的 s 为“0”(绿色段),但当 clk 为“1”时,生成的 s 为“X”(红色段)。 => 我理解这种行为,那没问题。
如果我通过将 driver1 更改为以无条件 wait 指令结束的进程来稍微修改此代码:
snipet2:
library ieee;
use ieee.std_logic_1164.all;
entity foo is
end entity;
architecture sim of foo is
signal clk : std_logic := '0';
signal s : std_logic;
begin
clk <= not clk after 10 ns;
-- driver1
-- s <= '0';
process
begin
s <= '0';
wait;
end process;
-- driver2
process (clk) is
begin
s <= clk;
end process;
end architecture;
对我来说,令人惊讶的是,片段 2 产生的波形与片段 1 相同。我的理解是,带有最终“无条件”wait 语句的进程内的指令将永远停止,这意味着它们的代码将处于非活动状态第一次执行运行后。但如果情况确实如此,我希望 snipet 2 中的 driver1 在第一次运行后处于非活动状态,并且从那时起 driver2 仍然是信号 s 的唯一活动驱动程序,始终为其分配 clk 的替代 '1' 和 '0'。
为什么不是这样?
【问题讨论】:
-
您似乎将安静(不活跃)和断开连接(不驱动)混为一谈。
-
@user1155120。谢谢,所以
wait语句使流程执行在第一次迭代后停止,但保持信号(此处的信号 s)“连接”并在其余执行期间驱动到它们的当前值?
标签: vhdl