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