我正在学习VHDL,我遇到了一个有趣的问题。
我已经使用架构
Sklop
创建了一个实体 Beh2
:
entity Sklop is
port (
x : in bit;
y : in bit;
z : out bit
);
end Sklop;
architecture Beh2 of Sklop is
signal a, b : bit;
begin
a <= x;
b <= not b and a;
z <= (a or b) xor y;
end Beh2;
我感兴趣的是,如果信号
b
取决于自身,它会如何变化。
假设 a
为“1”。据我了解,由于 not b
最初为“0”,因此 b
立即分配为“1”。然后b
会记录not b
的变化,并在delta之后将其值更改为1。然而,一旦分配了 b
的新值,not b
就会立即将其值更改为 0,b
将再次注册,并在 delta 之后为自己分配值 0。该过程将无限循环。这是这个过程应该如何进行还是我误解了什么?
您对过程的理解是正确的,因为信号
b
取决于信号本身。
如果你假设 a
的值为 1,b
为 0。
b <= not b and a;
b <= not 0 and 1
b <= 1 and 1
b <= 1 ; this will be used after delta.
Next cycle:
b <= not 1 and 1
b <= 0 and 1
b <= 0
b
的值将在每个增量周期后切换。
这个表达式甚至可以导致竞争条件。 信号在 VHDL 中的当前增量周期结束时更新。这意味着信号
b
将在安排其分配之前进行评估。但是,当您在表达式中使用 not b
时,您正在读取 b
的当前值(在新分配发生之前),但随后尝试在同一处理周期中向 b 分配新值。