过程赋值语句的基本形式:

寄存器变量 = 表达式

考虑赋值过程的定时控制时,根据定时控制在过程赋值语句中的不同位置,存在两类定时模式:

(一)外部定时模式

表达式:

<定时控制><寄存器变量>=<表达式>

该延时的模型:经“定时控制”所确定的延时后,计算出右端表达式的值,把结果赋值给左端的“寄存器变量”。其中的“定时控制”分为两种类型:延时控制和事件控制。

1 延时控制就是直接给出所需延时的时间,如:#delay a=b;

这条语句表面,经过delay确定的延时时间后,过程赋值语句右端表达式才被求值并被赋给左端的寄存器变量。

2 事件控制

事件控制以符号“@”开头,后面紧跟的是事件控制敏感表,有以下几种形式:

(1)@(信号名)

信号名所指定的信号通常是一位标量,也可以是多位的矢量。该形式的含义:只要被检验的信号发生变化(一般是值上升沿或下降沿)时,后面的赋值语句就被执行。如:

@(clock) reg_a = reg_b;

当clock发生跳变(上升沿或下降沿),reg_b的值就赋给reg_a。

(2)@(posedge 信号名)

信号发生上升沿跳变,如:@(posedge clock) reg_a = reg_b;

只要检测到clock信号出现上升沿,reg_b的值就赋给reg_a。

(3)@(negedge 信号名)

信号发生下降沿跳变,如:@(negedge clock) reg_a = reg_b;

只要检测到clock信号的下降沿,reg_b的值就赋给reg_a。

(4)@(事件1 or 事件2 or 事件3…)

表达式中的事件是指上面1、2、3三类事件中的任何一种事件,or表示逻辑或的意思,即只要所列举的任何一种情况出现,都将激活这里的事件控制。

注意:Verilog只提供“或”方式来处理多重触发情况,没有再定义诸如“与”等其他方式。

(二)内部定时模式

<寄存器变量> = <定时控制> <表达式>;

在内部模式中,有关“定时控制”的表现形式与上面对外部模式中的说明完全一致。两者之间的差别在于,在外部模式中,定时控制位于过程赋值语句之前,直接体现为对过程赋值语句执行事件的延期上,只有当延时事件被满足,或其他类型的激发条件被满足后,过程赋值语句才能被计算和赋值。

在内部模式中,定时控制位于赋值语句内部,与外部模式相同的是,两者都是在延时时间到期后再执行过程赋值操作,不同的是右端表达式的求值过程是在不同的事件段进行的。在外部模式中,直到延时到后,再对表达式求值,并执行赋值过程。而在内部模式中,先完成对表达式的求值,待延时到后,条件满足时,再把前面求得结果赋给左边的寄存器变量。

下表说明了两者之间的关系:**

android 延时 insmod 延时模式_android 延时 insmod