我了解到遇到表达式时信号不会立即更改,但是当进程结束时.在这个例子中:
...
signal x,y,z : bit;
...
process (y)
begin
x<=y;
z<=not x;
end process;
Run Code Online (Sandbox Code Playgroud)
这个例子说:
如果信号y发生变化,那么将在x上安排一个事件,使其与y相同.此外,在z上安排一个事件使其与x相反.问题是,z的值是否与y相反?当然,答案是否定的,因为当执行第二个语句时,x上的事件尚未处理,并且在z上调度的事件将在进程开始之前与x的值相反.
好吧,我需要了解一些事情:
x作为第一个语句更新.这仍然不会改变值x,此更改将放入队列中,以便在进程结束后执行.因此,在此声明之后的所有内容x <= y都不会看到更改,并且会看到x其旧值.它是否正确?z.在这里,z不会改变它的值,但它取决于另一个进程的值.更改z将被放入队列中以在进程结束时执行.它是否正确?在流程结束时会发生什么?
可能性编号1)x改变了值,因此x具有新值.第二个信号z被更新,第一个信号x被更新,并且根据它的z不同x,它的值根据NEW UPDATED值改变x.这个例子应该可以正常工作.
可能性编号2)值in x改变,因此x具有其新值.第二个信号z已更新.鉴于z已分配旧值x,z即将保留的值,其旧值x已更新,但不考虑此更新.
你能告诉我哪一个是正确的方法吗?
Phi*_*ppe 11
变量在分配时会更新.信号在下一个增量周期(最早)得到更新.
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
Run Code Online (Sandbox Code Playgroud)
Jan Decaluwe在这里更详细地解释了这些内容:http://www.sigasi.com/content/vhdls-crown-jewel
它的工作方式:
Y 变化和过程开始.
X将被分配到Y's value当前的内容,但直到过程结束
Z将被分配,not X's old value但直到过程结束
该过程现在结束X,Z并将更新