Verilog-assign语句


      本节讲述连续赋值语句。在连续赋值语句中,某个值被指派给线网变量。连续赋值语句的语法为:

 

 

      assign [delay]  LHS_n e t = RHS_expression;

    右边表达式使用的操作数无论何时发生变化, 右边表达式都重新计算, 并且在指定的时延后变化值被赋予左边表达式的线网变量。时延定义了右边表达式操作数变化与赋值给左边表达式之间的持续时间。如果没有定义时延值, 缺省时延为0。

图2 - 2显示了使用数据流描述方式对2 - 4器的建模的实例模型。

解码器电路

                  图2-2 2-4解码器电路

  1. ` timescale 1ns/ 1ns  
  2. module D e c o d e r 2 x 4 (A, B, EN, Z) ;  
  3. input A, B, EN;  
  4. output [ 0 :3] Z;  
  5. wire Abar, Bbar;  
  6. assign #1 Abar = ~ A; // 语句1。  
  7. assign #1 Bbar = ~ B; // 语句2。  
  8. assign #2 Z[0] = ~ (Abar & Bbar & EN ) ; // 语句3。  
  9. assign #2 Z[1] = ~ (Abar & B & EN) ; // 语句4。  
  10. assign #2 Z[2] = ~ (A & Bbar & EN) ; // 语句5。  
  11. assign #2 Z[3] = ~ ( A & B & EN) ; // 语句6。  
  12. endmodule 

 

      以反引号“ ` ”开始的第一条语句是编译器指令, 编译器指令` timescale 将模块中所有时延的单位设置为1 n s,时间精度为1 ns。例如,在连续赋值语句中时延值# 1和# 2分别对应时延1ns和2ns。

      模块Decoder2x4有3个输入端口和1个4位输出端口。线网类型说明了两个连线型变量A b a r和B b a r (连线类型是线网类型的一种)。此外,模块包含6个连续赋值语句。

      参见图2-3中的波形图。当E N在第5 ns变化时,语句3、4、5和6执行。这是因为E N是这些连续赋值语句中右边表达式的操作数。Z[ 0 ]在第7 ns时被赋予新值0。当A在第15 ns变化时, 语句1、5和6执行。执行语句5和6不影响Z[ 0 ]和Z[ 1 ]的取值。执行语句5导致Z[ 2 ]值在第17 ns变为0。执行语句1导致A b a r在第16 ns被重新赋值。由于A b a r的改变,反过来又导致Z[ 0 ]值在第18 n s变为1。

      请注意连续赋值语句是如何对电路的数据流行为建模的;这种建模方式是隐式而非显式的建模方式。此外,连续赋值语句是并发执行的,也就是说各语句的执行顺序与其在描述中出现的顺序无关。

连续赋值语句实例

                图2-3 连续赋值语句实例