赋值运算
verilog:赋值运算分为连续赋值和过程赋值两种
赋值运算分为连续赋值和过程赋值两种。
(1)连续赋值
连续赋值语句和过程块一样也是一种行为描述语句,有的文献中将其称为数据流描述形式,但本书将其视为一种行为描述语句。
连续赋值语句只能用来对线网型变量进行赋值,而不能对寄存器变量进行赋值,其基本的语法格式为:
线网型变量类型 [线网型变量位宽] 线网型变量名;
assign #(延时量) 线网型变量名 = 赋值表达式;
例如:
wire a;
assign a = 1'b1;
一个线网型变量一旦...
verilog:赋值运算分为连续赋值和过程赋值两种
赋值运算分为连续赋值和过程赋值两种。
(1)连续赋值
连续赋值语句和过程块一样也是一种行为描述语句,有的文献中将其称为数据流描述形式,但本书将其视为一种行为描述语句。
连续赋值语句只能用来对线网型变量进行赋值,而不能对寄存器变量进行赋值,其基本的语法格式为:
线网型变量类型 [线网型变量位宽] 线网型变量名;
assign #(延时量) 线网型变量名 = 赋值表达式;
例如:
wire a;
assign a = 1'b1;
一个线网型变量一旦被连续赋值语句赋值之后,赋值语句右端赋值表达式的值将持续对被赋值变量产生连续驱动。只要右端表达式任一个操作数的值发生变化,就会立即触发对被赋值变量的更新操作。 在实际使用中,连续赋值语句有下列几种应用:
· 对标量线网型赋值
wire a, b;
assign a = b;
· 对矢量线网型赋值
wire [7:0] a, b;
assign a = b;
· 对矢量线网型中的某一位赋值
wire [7:0] a, b;
assign a[3] = b[1];
· 对矢量线网型中的某几位赋值
wire [7:0] a, b;
assign a[3:0] = b[3:0];
· 对任意拼接的线网型赋值
wire a, b;
wire [1:0] c;
assign c ={a ,b};
(2)过程赋值
过程赋值主要用于两种结构化模块(initial模块和always模块)中的赋值语句。在过程块中只能使用过程赋值语句(不能在过程块中出现连续赋值语句),同时过程赋值语句也只能用在过程赋值模块中。
过程赋值语句的基本格式为:
<被赋值变量><赋值操作符><赋值表达式>
其中,<赋值操作符>是“=”或“<=”,它分别代表了阻塞赋值和非阻塞赋值类型。3.5.1节对阻塞赋值和非阻塞赋值操作进行了详细解释。
过程赋值语句只能对寄存器类型的变量(reg、integer、real和time)进行操作,经过赋值后,上面这些变量的取值将保持不变,直到另一条赋值语句对变量重新赋值为止。过程赋值操作的具体目标可以是:
· reg、integer、real和time型变量(矢量和标量);
· 上述变量的一位或几位;
· 上述变量用{}操作符所组成的矢量;
· 存储器类型,只能对指定地址单元的整个字进行赋值,不能对其中某些位单独赋值。
例2-2 给出一个过程赋值的例子。
reg c;
always @(a)
begin
c = 1'b0;
end
本文档为【赋值运算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。