Vhdl 信号分配在流程中是如何工作的?

Vhdl 信号分配在流程中是如何工作的?,vhdl,modelsim,Vhdl,Modelsim,我了解到,当遇到表达式时,信号不会立即改变,而是在过程结束时改变。在此示例中: ... signal x,y,z : bit; ... process (y) begin x<=y; z<=not x; end process; 。。。 信号x,y,z:位; ... 过程(y) 开始 x它的工作方式: Y更改,流程开始 X将被分配到Y的当前值,但直到过程结束 Z将分配给而不是X的旧值,但直到过程结束 该过程结束,因此X和Z将在分配变量时更新。信号在下一个增量周期中得到更新(

我了解到,当遇到表达式时,信号不会立即改变,而是在过程结束时改变。在此示例中:

...
signal x,y,z : bit;
...
process (y)
begin
  x<=y;
  z<=not x;
end process;
。。。
信号x,y,z:位;
...
过程(y)
开始
x它的工作方式:

Y
更改,流程开始

X
将被分配到
Y的当前值,但直到过程结束

Z
将分配给
而不是X的旧值
,但直到过程结束


该过程结束,因此
X
Z
将在分配变量时更新。信号在下一个增量周期中得到更新(最早)

a:='1';--变量
断言a=1;

我不同意阿什拉夫的观点。我自己编写了vhdl代码,其中变量是导线,信号是锁存器。示例:

信号x、y、clk; 过程(clk) 开始
但是。。。这不是在体系结构的begin子句之后的顺序语句中吗?????相反,过程只是我们用来创建顺序语句的方式。。。我说的对吗???进程本身可以是其他顺序语句列表中的一条顺序语句。过程中的事情是不正确的。进程语句本身就是一个并发语句。它包含的是顺序语句,如变量赋值和顺序信号赋值。请做出决定,因为我对这一点不是很了解。我从一开始就知道,一个过程陈述中的每一件事情都是按顺序执行的,这是我多次论证的,这就是为什么我认为这是我知识的支柱之一。请不要破坏我的这根柱子:)@Andry我建议你自己决定谁在这里有意义。选择一个好的教程或LRM。提示:“顺序”和“变量语义”之间有区别。谢谢philippe,现在好了一点,但我仍然不明白为什么这个示例不起作用。我的意思是,第一个语句试图赋予x te y的值。好的,这个赋值是在过程结束时进行的,所以当我再次使用信号x更新另一个信号时,我没有该信号的值。我假设所有信号处理表达式都保存在一个队列中,以便在进程结束时对其进行处理。在该过程结束时,考虑信号分配队列,并更新x,然后更新z。。。。我做错了什么?@Andry信号的预定值可以在以后的过程中被顺序信号赋值覆盖。@Jan我很抱歉Jan,但我一直不理解。也许我很难理解这个论点,或者。。。我不知道。我只是想理解为什么这个例子不起作用,请看我的编辑。@Andry:你没有得到什么?这就是你在上面的可能性(2)中所概述的。z基于x的旧值获取其值,因为它没有看到新值Exception:不正确。如果上升沿(clk)
在clk边缘后的下一个增量周期内及时发生变化,则
。但是,它们只能在下一个时钟周期的时钟进程中看到。
a := '1'; -- variable
assert a = 1;
b <= '1'; -- signal
computationUsing(b); --reads old value of b
-- new value will be visible after this process ends or some time passes