Verilog Inter 和 Intra Delay

2025年3月17日 | 阅读 3 分钟

Verilog 延迟语句可以在赋值运算符的右侧指定延迟。

Inter Assignment 延迟

Inter 赋值延迟语句在赋值运算符的左侧具有延迟值。

Inter 赋值是指整个语句或赋值执行被延迟的那些延迟语句。

Verilog 中,Inter 赋值延迟通常对应于惯性延迟或 VHDL 的常规延迟语句。

它表明语句本身是在延迟到期后执行的,并且是最常用的延迟控制形式。

示例

在这里,q 在时间单位 10 变为 1,因为该语句在 10 个时间单位时被评估,并且 RHS,即 a、b 和 c 的组合,评估为 1。 执行完成后,它给出以下输出。

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

Intra Assignment 延迟

Intra 赋值延迟表示语句本身是在延迟到期后执行的,并且是最常用的延迟控制形式。

它们可以与阻塞和非阻塞赋值一起使用。 如果在模拟期间遇到具有内部赋值时间控制的语句,则将对表达式求值,并存储其值。

然后,该语句的执行将暂停,直到延迟控制指定的时间到期。 在事件发生之前,表达式值的变化将被忽略。

Intra 赋值延迟声明在赋值运算符的右侧。 这表明该语句被求值,并且 RHS 上所有信号的值首先被捕获。

示例

以上代码给出以下输出

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
xmsim: *W,RNQUIE: Simulation is complete.

在 5 个时间单位,a 和 c 使用非阻塞语句赋值。 并且非阻塞语句的行为被评估,但仅在时间步结束时才分配给变量。

因此,当下一个非阻塞语句 q 执行时,a 和 c 的值被评估为 1,但未分配。 因此,当 q 的 RHS 被评估时,a 和 c 仍然具有旧值 0,因此 $monitor 未检测到更改以显示该语句。

为了观察变化,让我们将 a 和 c 的赋值语句从非阻塞更改为阻塞。

输出如下所示

xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

下一主题Verilog 门延迟