Verilog LRM不确定性

问题描述 投票:0回答:1

我对Verilog LRM中提到的Verilog计划语义中的不确定性存在一些疑问。以下是我无法理解的摘录:

“不确定性的另一个来源是,在行为块中没有时间控制构造的语句不必作为一个事件执行。时间控制语句是#表达式和@表达式构造(请参见9.7)。随时评估行为声明,模拟器可能会暂停执行并放置部分完成的事件作为该事件的待处理活动事件队列。这样的效果是允许过程的交错执行。请注意,交错执行的顺序为不确定的,不受用户控制。“

我唯一能做出的推断是,行为块中的语句可能会因执行其他行为块(在同一时间步中处于活动状态)而暂停执行,尽管我不确定,但它会交错执行流程。

而且,我不理解行为学中没有时间控制结构的陈述块不必一定作为一个事件执行。” LRM表示它不是作为一个事件执行,这意味着什么?如果行为块包含所有时间控制的语句,将会发生什么?

任何人都可以在一些示例的帮助下进行解释吗?预先感谢。

verilog hdl
1个回答
0
投票

模拟唯一保证的是,always块中的所有语句将顺序执行。说,如以下代码块所示:

always @(b,c,e,f) begin
   a = b | c;
   d = e & f;
   g = a ^ d ^ x;
   ...
end

但是,模拟器可以决定连续执行前2条语句,但随后在最后一条语句之前停止执行此块,并让其他块继续。然后它将返回到最后一条语句。从这个意义上讲,您具有语句执行的不确定顺序。

猜怎么着?!等待时,x的值肯定可以更改。在执行其他语句时,ad也可能会更改。因此,g的结果可能是不确定的。良好的编程将有助于消除这种不确定性:在灵敏度列表中列出所有事件,请勿倍增驱动信号,...然后模拟器将尽最大努力避免这些情况。

进行这种交错模拟的必要条件是,出于性能原因,允许模拟器进行更好的优化,并在出现非常长且循环的语句时允许其他块继续进行。

© www.soinside.com 2019 - 2024. All rights reserved.