我了解到遇到表达式时信号不会立即更改,但是当进程结束时.在这个例子中:
...
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已更新,但不考虑此更新.
你能告诉我哪一个是正确的方法吗?