过程性赋值是在 ini
tial 语句或 always 语句内的赋值,它只能对寄存器数据类型的变量赋值。过程性赋值如下两类:
• 阻塞性过程赋值:赋值在其后所有语句执行前执行,即在下一语句执行前该赋值语句完成执行;
• 非阻塞性过程赋值:对目标的赋值是非阻塞的(因为时延),但可预定在将来某个时间发生。
阻塞性过程赋值用操作符“=”完成,例如下面的实例:
- always
- @ (A or B or Cin)
- begin: CARRY_OUT
- reg T1,T2 , T3;
- T1 = A & B;
- T2 = B & Ci n;
- T3 = A & Ci n;
- Cout = T1|T2|T3;
- end
T1 赋值首先发生,计算 T1;接着执行第二条语句,T2 被赋值;然后执行第三条语句, T3被赋值,依此类推直到最后。
非阻塞性过程赋值用操作符“<=”完成,例如下面的实例:
- initial
- begin
- Clr <= #5 1;
- Clr <= #4 0;
- Clr <= #10 0;
- End
第一条语句的执行使 Clr 在第 5 个时间单位被赋于值 1;第二条语句的执行使 Clr 第 4 个时间单位被赋值为 0(从 0 时刻开始的第 4 个时间单位);最终第 3 条语句的执行使 Clr 在第10 个时间单位被赋值为 0(从 0 时刻开始的第 1 0 个时间单位)。这 3 条语句都是在 0 时刻执行的。