Verilog HDL 中的数据流建模形式一般用连续赋值语句来实现。Verilog HDL 中有两种形式的赋值方式:连续赋值和过程赋值。其中过程赋值用于顺序行为建模,而组合逻辑
电路的行为最好使用连续赋值语句建模。
连续赋值语句将值赋给线网(连续赋值不能为寄存器赋值),它的格式如下:
- assign LHS_target = RHS_expression;//定义格式
- //例子
- wire [3:0] Z, Preset, Clear; //线网说明
- assign Z = Preset & Clear; //连续赋值语句
连续赋值的目标为 Z,表达式右端为“Preset & Clear”,连续赋值语句中的关键词为assign。只要在右端表达式的操作数上有事件(事件为值的变化)发生时,连续赋值语句即被计算,如果结果值有变化,新结果就赋给左边的线网。在上面的例子中,如果 Preset 或 Clear变化,就计算右边的整个表达式。如果结果变化,那么结果即赋值到线网 Z。
如图 2-8 所示的是主从触发器。
主从触发器用连续赋值语句实现的代码如下:
- module MSDFF_DF (D, C, Q, Qbar) ;
- input D, C;
- output Q, Qbar;
- wire NotC, NotD, NotY, Y, D1, D2, Ybar, Y1, Y2 ;
- assign NotD = ~ D;
- assign NotC = ~ C;
- assign NotY = ~ Y;
- assign D1 = ~ (D & C) ;
- assign D2 = ~ (C & NotD) ;
- assign Y = ~ (D1 & Ybar ) ;
- assign Ybar = ~ (Y & D2) ;
- assign Y1 = ~ (Y & NotC ) ;
- assign Y2 = ~ (NotY & NotC) ;
- assign Q = ~ (Qbar & Y1) ;
- assign Qbar = ~ (Y2 & Q) ;
- endmodule