Verilog 数据类型

如题所述

第1个回答  2022-05-30

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

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

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

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

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

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

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

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

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

连线型有如下几种:

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

不同之处如下:

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

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

supply0表示GND,supply1表示VCC

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

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

trireg的缺省初始值为x

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

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

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

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

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

reg和wire的区别:

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

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

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

语法为: reg <range><list_of_variables>

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

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

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

说明:

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

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

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

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

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

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

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

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

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

相似回答