【发布时间】:2011-06-30 22:40:46
【问题描述】:
我了解到信号不是在遇到表达式时立即更改,而是在进程结束时更改。在此示例中:
...
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) x 中的值已更改,因此 x 具有其新值。第二个信号z 被更新,第一个信号x 被更新,并且鉴于z 依赖于x,它的值根据x 的新更新值进行更改。该示例应该可以正常工作。
可能性编号 2) x 中的值已更改,因此 x 具有其新值。第二个信号z 被更新。鉴于 z 被分配了旧值 x,这就是 z 将保留的值,旧值 x 已更新,但不考虑此更新。
你能告诉我哪个是正确的方法吗?
【问题讨论】: