龙空技术网

Verilog 数据类型

行走的BUG永动机 188

前言:

眼前各位老铁们对“net基本数据类型”大致比较重视,咱们都想要剖析一些“net基本数据类型”的相关知识。那么小编也在网摘上搜集了一些关于“net基本数据类型””的相关内容,希望兄弟们能喜欢,各位老铁们一起来了解一下吧!

Verilog 数据类型

Verilog中,数据类型主要分为两类:物理数据类型(主要包括连线型和寄存器型)和抽象数据类型(主要包括:整型、时间型、实型和参数型)

物理数据类型与实际硬件电路的硬件关系比较明显,抽象程度比较低

抽象数据类型是进行辅助设计和验证的数据类型

1 物理数据类型

Verilog中主要的物理数据类型是:连线型、寄存器型、存储器型

使用四种逻辑电平(0,1,x,z)和八种信号强度(strength)对实际的电路进行建模

四种逻辑电平是对信号的抽象

信号强度表示数字电路中不同强度的驱动源,用来解决不同驱动强度下的赋值冲突,八种强度如下,自上往下,强度递减

标记符号 名称 类型 supply 电源级驱动 驱动 strong 强驱动 驱动 pull 上拉级驱动 驱动 large 大容性 存储 weak 弱驱动 驱动 medium 中性驱动 存储 small 小容性 存储 highz 高容性 高祖

1.1 连线型

连线表示逻辑单元的物理连接,可以对应电路中的物理信号连线,这种变量不能保持电荷(trireg除外)

连线型变量必须要有驱动源,一种是连接到一个门或者模块的输出端,另一种是用assign对它进行赋值,若没有驱动源,将保持高阻态z

连线型有如下几种:

连线型数据类型 功能说明 wire,tri 标准连线(缺省为该类型) wor,trior 多重驱动时,具有线或特性的连线型 trireg 具有电荷保持特性的连线型数据 tri1 上拉电阻 tri0 下拉电阻 supply0 电源线,用于对“地”建模,为低电平0 supply1 电源线,用于对电源线建模,为高电平1 wand, trand 多重驱动时,具有线与特性的连线型

1.1.1 wire和tri

wire(连线)和tri(三态线)是最常见的,语法和语义是一致的。

不同之处如下:

wire型变量通常用来表示单个驱动门或assign赋值语句的连线tri型变量用来表示多驱动器驱动的连线型数据,主要用于定义三态的线网 wire/tri 0 1 x z 0 0 x x 0 1 x 1 x 1 x x x x x z 0 1 x z 上述真值表是:同时有两个驱动强度相同的驱动源来驱动wire或tri变量时的输出结果 注意:这里并非是与逻辑,可以理解为都想给线赋值,因此当出现0和1同时赋值时,由于驱动强度相同,因此最终结果是不定值x1.1.2 wor和trior

wor/trior 0 1 x z 0 0 1 x 0 1 1 1 1 1 x x 1 1 1 z 0 1 x z

1.1.3 wand和triand

wand/triand 0 1 x z 0 0 0 0 0 1 0 1 x 1 x 0 x x x z 0 1 x z

wand和triand便是与逻辑,因此当0和1同时出现时,结果是0&1的结果

1.1.4 tri0和tri1

tri的特征是,若无驱动源,其值为紧跟的数字

tri0/tri1 0 1 x z 0 0 x x 0 1 x 1 x 1 x x x x x z 0 1 x 0/1

1.1.5 supply0和supply1

supply0表示GND,supply1表示VCC

1.1.6 trireg线网

trireg线网型可以存储数值,类似于寄存器数据类型,用于电容节点的建模。

当三态寄存器(trireg)的所有驱动源都处于高阻态z时,trireg保持作用在线网的最后一个逻辑值。

trireg的缺省初始值为x

存储电荷强度有如下几个关键字控制:

small、medium、large,默认电荷强度为medium

对于trireg型数据,仿真时其电荷衰减时间应制定为延迟时间

1.2 寄存器型

reg型变量对应的硬件电路元件具有状态保持作用,能够存储数据

reg型变量常用于行为级描述,由过程赋值语句对其进行赋值

reg和wire的区别:

reg保持最后一次的赋值,wire需要持续的驱动reg默认初始值为不定值x,wire默认初始值为不定值z

reg型变量一般是无符号的,若将负数赋值给reg型变量,会自动转成其补码形式

1.3 连线型和寄存器型数据声明对比1.3.1 连线型数据声明

语法为<net_declaration><drive_strength><range><delay><list_of_variables>

drive_strength、range、delay是可选项目,list_of_variables为必选项

net_declaration:数据的类型,可以是wire、tri、tri0、tri1、wand、triand、trior、wor、trireg中的任意一个drive_strength:驱动强度range:用来指定数据位标量或矢量。默认表示数据类型为1bit的标量,超过1bit就为矢量形式delay:指定仿真延迟时间list_of_variables:变量名称1.3.2 寄存器型数据声明

语法为:reg <range><list_of_variables>

range:可选项,确定变量位宽list_of_variables:变量名称1.4 存储器型

存储器型本质上是寄存器型变量的阵列,所以用reg型变量建立寄存器组实现存储器功能。

存储器变量声明格式:reg<range1><name_of_list><range2>

其中,range1和range2是可选项,缺省是都为1

说明:

range1:表示存储器中寄存器的位宽range2:表示寄存器的个数

例如:reg [7:0] mem [255:0]表示由256个位宽为8bit的寄存器组成的存储器

2 抽象型数据类型

抽象型数据类型有:整型(integer)、时间型(time)、实型(real)和参数型(parameter)

2.1 整型

整型数据常用于对循环控制变量的说明,在算术运算中被视为二进制补码形式的有符号数

整型数据默认为32bit有符号数

2.2 时间型

时间型与整型数据类似,不过时间型是64bit无符号数

时间型数据主要用于对模拟时间的存储与计算处理,常与系统函数$time一起使用

2.3 实型

Verilog支持实型常量与变量,实型数据在机器码表示法中是浮点型数据,可用于对延迟时间的计算

2.4 参数型

参数型数据属于常量,在仿真开始之前就被赋值,并在仿真过程中保持不变

参数定义方法可以提高程序可可读性和可维护性,常用来定义延迟时间和变量的位宽

标签: #net基本数据类型