连续赋值语句用于组合逻辑的建模。等式左边是wire类型的变量。等式右边可以是常量、由运算符如逻辑运算符、算术运算符参与的表达。在initial或always外的assign赋值语句称为连续赋值语句,一般在描述纯组合电路时使用。
在initial或always外的assign赋值语句称为连续赋值语句,一般在描述纯组合电路时使用。
数据流的描述是采用连续赋值语句(assign )语句来实现的。语法如下:
assign net_type =表达式;
连续赋值语句用于组合逻辑的建模。等式左边是wire类型的变量。等式右边可以是常量、由运算符如逻辑运算符、算术运算符参与的表达。
Verilog模型可以是实际电路不同级别的抽象,因此有多种不同的建模方法。其中最常用的建模方法有以下三种:
1)门级结构建模
2)行为描述建模
3)数据流建模
数据流的建模方式就是通过对数据流在设计中的具体行为的描述的来建模。最基本的机制就是用连续赋值语句。在连续赋值语句中,某个值被赋给某个线网变量(信号),语法如下:
assign net_name = expression;
如:assign #2 A = B;
在数据流描述方式中,还必须借助于HDL提供的一些运算符,如按位逻辑运算符:逻辑与(&),逻辑或(|)等。对数据流的建模方式主要有连续赋值语句、阻塞赋值语句、非阻塞赋值语句等。
wire Z, Preset, Clear; //线网说明
assign Z = Preset & Clear; //连续赋值语句
wire Cout, C i n ;
wire Sum, A, B;
. . .
assign {Cout, Sum} = A + B + Cin;
assign Mux = (S = = 3)? D : 'bz;
过程赋值 | 连续赋值 | |
assign | 无assign(过程性连续赋值除外) | 有assign |
符号 | 使用“=”或“《=” | 只使用“=” |
位置 | 在always语句或initial语句中均可出现 | 不可出现于always语句和initial语句 |
执行条件 | 与周围其他语句有关 | 等号右端操作数的值发生变化时 |
用途 | 驱动寄存器 | 驱动线网 |
●连续赋值用于数据流行为建模,多用于组合逻辑电路,过程赋值用于顺序行为建模,用于顺序行为建模。
●连续赋值等号右边操作数发生变化就需要执行(上电便一直执行),而过程性赋值语句只是执行一次,注意我这里的一次是指:在initial块中,过程性赋值只顺序执行一次,而在always块中,每一次满足always的条件时,都要顺序执行一次该 always块中的语句。连续赋值适用于线网,过程赋值适用于寄存器。