版权归原作者所有,如有侵权,请联系我们

[科普中国]-连续赋值

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

连续赋值语句用于组合逻辑的建模。等式左边是wire类型的变量。等式右边可以是常量、由运算符如逻辑运算符、算术运算符参与的表达。在initial或always外的assign赋值语句称为连续赋值语句,一般在描述纯组合电路时使用。

简介在initial或always外的assign赋值语句称为连续赋值语句,一般在描述纯组合电路时使用。

数据流的描述是采用连续赋值语句(assign )语句来实现的。语法如下:

assign net_type =表达式;

连续赋值语句用于组合逻辑的建模。等式左边是wire类型的变量。等式右边可以是常量、由运算符如逻辑运算符、算术运算符参与的表达。1

数据流建模Verilog模型可以是实际电路不同级别的抽象,因此有多种不同的建模方法。其中最常用的建模方法有以下三种:

1)门级结构建模

2)行为描述建模

3)数据流建模

数据流的建模方式就是通过对数据流在设计中的具体行为的描述的来建模。最基本的机制就是用连续赋值语句。在连续赋值语句中,某个值被赋给某个线网变量(信号),语法如下:

assign [delay] net_name = expression;

如:assign #2 A = B;

在数据流描述方式中,还必须借助于HDL提供的一些运算符,如按位逻辑运算符:逻辑与(&),逻辑或(|)等。对数据流的建模方式主要有连续赋值语句、阻塞赋值语句、非阻塞赋值语句等。1

实例wire [3:0] Z, Preset, Clear; //线网说明

assign Z = Preset & Clear; //连续赋值语句

wire Cout, C i n ;

wire [3:0] Sum, A, B;

. . .

assign {Cout, Sum} = A + B + Cin;

assign Mux = (S = = 3)? D : 'bz;1

特点连续赋值语句的执行是:只要右边表达式任一个变量有变化,表达式立即被计算,计算的结果立即赋给左边信号。

连续赋值语句之间是并行语句,因此与位置顺序无关。

语法上,有关键词“assign”来标识;

左侧被赋值的数据类型必须是线网型数据(wire);

连续赋值语句不能出现在过程块中(initial/always);

连续赋值语句主要用来对组合逻辑进行建模以及线网数据间进行描述;

连续赋值语句产生作用后,赋值表达式中信号的任何变化都将立即被反映到赋值线网型数据的取值上;

与过程赋值区别

|| ||

●连续赋值用于数据流行为建模,多用于组合逻辑电路,过程赋值用于顺序行为建模,用于顺序行为建模。
●连续赋值等号右边操作数发生变化就需要执行(上电便一直执行),而过程性赋值语句只是执行一次,注意我这里的一次是指:在initial块中,过程性赋值只顺序执行一次,而在always块中,每一次满足always的条件时,都要顺序执行一次该 always块中的语句。连续赋值适用于线网,过程赋值适用于寄存器。

本词条内容贡献者为:

何星 - 副教授 - 上海交通大学