如果用信号本身的值来计算,信号值会如何变化?

问题描述 投票:0回答:1

我正在学习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;

我这里有信号的样本时间图: time diagram of signals

我感兴趣的是,如果信号

b
取决于自身,它会如何变化。 假设
a
为“1”。据我了解,由于
not b
最初为“0”,因此
b
立即分配为“1”。然后
b
会记录
not b
的变化,并在delta之后将其值更改为1。然而,一旦分配了
b
的新值,
not b
就会立即将其值更改为 0,
b
将再次注册,并在 delta 之后为自己分配值 0。该过程将无限循环。这是这个过程应该如何进行还是我误解了什么?

concurrency architecture signals verilog vhdl
1个回答
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 分配新值。

© www.soinside.com 2019 - 2024. All rights reserved.