34,Verilog-2005标准篇:赋值(Assignments)

想深耕嵌入式?这个专辑值得收藏

MCU、FPGA、工控、传感器一站式学习,实战项目直接抄

赋值操作将赋值操作符右侧的值放入赋值操作符左侧的网络(nets)和变量(variables)。赋值有两种基本形式:

- 连续赋值(continuous assignment):为网络赋值

- 过程赋值(procedural assignment):为变量赋值

另外,还有两种不常见的赋值形式:赋值/去赋值(assign/deassign)和强制/释放(force/release),这两种赋值形式被称为过程性连续赋值,有时间后面博客再介绍这两种不常见赋值形式,我们还是先来看看最常用的连续赋值和过程赋值吧~

赋值操作由左侧和右侧两部分组成,两部分之间用等号 ( = ) 字符隔开;如果是非阻塞过程赋值,则用小于等于号 ( <= ) 字符对隔开。右侧可以是任何求值的表达式,左侧表示要为其赋值的网络(nets)或变量(variables)。根据赋值类型是连续赋值还是过程赋值,左侧可以采用下表1所示的形式之一。

赋值形式

左侧表示

连续赋值

网络(矢量或标量)

矢量网络的位选择

矢量网络的部分位选择

矢量网络的索引部分选择

上述任何连接或嵌套连接

过程赋值

变量(矢量或标量)

矢量reg、integer或time变量的位选择

矢量reg、integer或time变量的部分位选择

矢量reg、integer或time变量的索引部分选择

内存字(Memory word)

上述任一左侧的连接或嵌套连接

表1:赋值语句中的左侧合法形式

连续赋值(Continuous assignments)

连续赋值将右侧的数值驱动到左侧的矢量net或标量net中,每当右边的数值发生变化时,就会执行这种赋值操作。连续赋值为组合逻辑建模提供了一种无需指定门互连的方法,相反该模型指定了驱动net的逻辑表达式。连续赋值的语法规则如下表2所示:

表2:连续赋值的标准语法

网络声明赋值(The net declaration assignment)

根据表1的标准语法,我们很容易理解通用的网络声明,例如:

wire (strong1, pull0) mynet;

表1的标准语法还给出了网络声明赋值,即允许在声明网络的同一语句中对网络进行连续赋值,例如:

wire (strong1, pull0) mynet = enable;

连续赋值声明(continuous assignment statement)

连续赋值声明在net数据类型上进行连续赋值,赋值操作是连续和自动的。换句话说,每当表达式右侧中的一个操作数的值发生变化时,都要对整个右侧表达式进行评估,如果新值与前值不同,则应将新值赋值给表达式左侧。

例如下面是对先前已声明的网络进行连续赋值的示例1:

示例2-下面是一个使用连续赋值来模拟带进位的 4 位加法器的示例。该赋值不能直接在网络声明中指定,因为它需要在左侧进行连接:操作

示例3-下面描述了一个具有16位输出总线的模块。它从四条输入总线中选择一条,并将所选总线连接到输出总线:

在本例的模拟过程中,发生了以下一系列事件:

a) 在赋值语句中检查总线选择器输入变量s的值。根据s的值,网络data从四条输入总线bus0~bus3之一接收数据。

b) 网络data的设置触发了busout输出网络声明中的连续赋值。如果使能enable为1,data的内容将被赋值给busout输出;如果使能为 0,Zee 的内容将被赋值给busout输出。

过程赋值(Procedural assignments)

连续赋值与过程赋值之间有很大的区别。如前所述,连续赋值驱动网络net的方式与门驱动网络net的方式类似,其右侧的表达式可以看作是连续驱动网络net的组合电路,与此相反,过程赋值将右侧值放入变量variable中。net连续赋值没有保持时间,相反变量variable会保持赋值的值,直到下一次过程赋值更新该variable变量的值,而且过程赋值只发生在过程块中,如alwaysinitialtaskfunction,可以看作是 "触发 "赋值。

变量(variable)声明赋值

变量声明赋值是过程赋值的一种特殊情况,它允许在声明变量的同一语句中为变量赋初始值,初始值是一个常量表达式,且赋值没有保持时间;相反,变量在下一次赋值之前一直保持该值。另外,verilog不允许对数组(array)进行变量声明赋值。如果同一变量在初始化模块和变量声明赋值中被赋予了不同的值,则该变量值是不确定的。下面我们举例说明变量的声明及赋值操作:

示例1-声明一个 4 位寄存器并赋值 4:

reg [3:0] a = 4'h4;

等价于

reg [3:0] a;

initial  a = 4'h4;

示例2-非法的数组变量声明赋值:

reg  [3:0] array [3:0] = 0;

示例3-声明两个integer变量,第一个integer赋值值为0:

integer  i = 0, j;

示例4-声明两个real变量,赋值分别为 2.5 和 300000:

real  r1 = 2.5, n300k = 3E6;

示例5-声明具有初始值的time变量和realtime变量:

time  t1 = 25;

realtime  rt1 = 2.5;

如下表3所示为变量(variable)声明赋值的标准语法总结:

表3:变量声明赋值标准语法

点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!

想深耕嵌入式?这个专辑值得收藏

MCU、FPGA、工控、传感器一站式学习,实战项目直接抄

## 数据指标说明工业企业数据、海关数据库匹配数据是从事经济研究最常用的数据之一,由于数据量大,处理难度也较高,费时费力,今天我们就免费分享给大家。数据格式:分年份,dta格式;工企和海关数据库匹配:gqid、年份、企业匹配唯一标识码、组织机构代码、企业名称、省自治区直辖市、地区市州盟、乡镇、街道办事处、街村门牌号、社区居委会村委会、邮政编码、固定电话、固定电话分机号、传真号码传真分机号、法定代表人、法定代表人职务、开业成立时间年、开业成立时间月营业状态、行业门类代码、行业门类名称、行业大类代码、行业大类名称、行业中类代码、行业中类名称、行业小类名称、行业小类代码、主要业务活动或主要产品1、主要业务活动或主要产品2、主要业务活动或主要产品3、省地县码、控股情况、隶属关系、企业规模、轻重工业、登记注册类型、执行会计制度类别、产业活动单位数总计个、其中农林牧渔业个、其中工业个、其中建筑业个、其中交通运输电信业个、其中批发零售业个、其中住宿餐饮业个、其中其他产业数个工业总产值 不变价千元、工业总产值 当年价格千元、其中新产品产值千元、工业销售产值 当年价格千元、其中出口交货值千元、工业增加值千元、全部从业人员年平均人数人、年末从业人员合计人、资产总计千元、固定资产合计千元固定资产原价合计千元、其中生产经营用千元、累计折旧千元、其中本年折旧千元、固定资产净值年平均余额千、无形及递延资产合计千元、无形资产千元、流动资产合计千元、其中应收账款千元、存货千元、其中产成品千元、流动资产
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值