我了解到信号不是在遇到表达式时立即更改,而是在过程结束时更改。在此示例中:
...
signal x,y,z : bit;
...
process (y)
begin
x<=y;
z<=not x;
end process;
该示例说明了这一点:
如果信号 y 发生变化,那么将在 x 上安排一个事件以使其与 y 相同。此外,在 z 上安排了一个事件,使其与 x 相反。问题是,z 的值会与 y 相反吗?当然,答案是否定的,因为在执行第二条语句时,x 上的事件还没有被处理,而 z 上调度的事件将与进程开始前 x 的值相反。
好吧,我需要了解一些事情:
- 据我所知,信号值仅在流程结束时更新。它是否正确?
- 信号
x
被更新为第一条语句。这仍然没有改变 的值x
,这个改变被放入队列中,在流程结束后执行。因此,此语句之后的所有内容x <= y
都不会看到更改,并且会看到x
其旧值。它是否正确? - 第二条语句是试图改变信号的值
z
。这里也一样,z 不会改变它的值,但它取决于另一个进程的值。更改z
将被放入队列中以在流程结束时执行。它是否正确?
过程结束时会发生什么?
可能性编号 1) in 中的值x
已更改,因此 x 具有其新值。第二个信号z
被更新,第一个信号x
被更新,并且,给定z
取决于x
,它的值根据 的 NEW UPDATED 值改变x
。该示例应该可以正常工作。
可能性编号 2) in 的值x
已更改,因此 x 具有其新值。第二个信号z
被更新。鉴于它z
被分配了一个旧值x
,这就是z
将保持的值,它的旧值x
已更新,但不考虑此更新。
你能告诉我哪一个是正确的方法吗?