📜  Verilog数据类型

📅  最后修改于: 2021-01-11 14:35:04             🧑  作者: Mango

Verilog数据类型

Verilog引入了几种新的数据类型。这些数据类型使RTL描述更易于编写和理解。

使用一组Verilog硬件描述语言(HDL)数据类型表示在数字硬件中找到的数据存储和传输元素。

Verilog中,数据类型分为NETS寄存器。这些数据类型在分配和保持值的方式上有所不同,并且它们表示不同的硬件结构。

Verilog HDL值集包含四个基本值:

Value Description
0 Logic zero or false
1 Logic one or true
X Unknown logical value
Z The high impedance of the tri-state gate

整数和实数数据类型

C程序员会熟悉许多数据类型。想法是,如果两种语言具有相同的数据类型,则可以将用C建模的算法转换为Verilog。

Verilog引入了新的两种状态数据类型,其中每个位仅为0或1。在RTL模型中使用二态变量可以使模拟器更加高效。而且它们不影响合成结果。

Types Description
bit user-defined size
byte 8 bits, signed
shortint 16 bits, signed
int 32 bits, signed
longint 64 bits, signed
  • 二态整数类型

与C语言不同,Verilog为固定宽度类型指定位数。

Types Description
reg user-defined size
logic identical to reg in every way
integer 32 bits, signed
  • 四态整数类型

我们更喜欢逻辑,因为它比reg好。我们可以在使用reg或wire的地方使用逻辑。

Type Description
time 64-bit unsigned
shortreal like a float in C
shortreal like double in C
realtime identical to real

非整数数据类型

数组

在Verilog中,我们可以定义标量网络和向量网络以及变量。我们还可以定义内存数组,它们是可变类型的一维数组。

Verilog允许使用网络和变量的多维数组,并消除了对内存数组使用的一些限制。

Verilog更进一步,完善了阵列的概念并允许对阵列进行更多操作。

以Verilog,阵列可以具有任一包装或未包装的尺寸,或两者。

包装尺寸

  • 确保在内存中连续布置。
  • 可以将其复制到任何其他打包对象上。
  • 可以切片(“部分选择”)。
  • 仅限于“位”类型(位,逻辑,整数等),其中某些类型(例如int)具有固定大小。

开箱尺寸

可以按照模拟器选择的任何方式将其安排在内存中。我们可以可靠地将一个阵列复制到另一个相同类型的阵列上。

对于具有不同类型的数组,我们必须使用强制类型转换,并且对于将未压缩类型强制转换为压缩类型存在一些规则。

Verilog允许对完整的未打包数组和未打包数组切片执行若干操作。

对于这些,涉及的阵列或切片必须具有相同的类型和形状,即相同的数量和长度的未包装尺寸。

只要数组或切片元素的位数相同,打包的尺寸可能会有所不同。允许的操作是:

  • 读取和写入整个数组。
  • 读取和写入数组切片。
  • 读写数组元素。
  • 数组,切片和元素上的相等关系

Verilog还包括动态数组(元素数量在仿真过程中可能会更改)和关联数组(它们的范围不连续)。

Verilog包括几个查询函数和方法数组,以支持所有这些数组类型。

篮网

网络用于连接硬件实体(例如逻辑门)之间,因此不存储任何值。

净变量表示结构实体(例如逻辑门)之间的物理连接。这些变量不存储除trireg以外的值。这些变量具有其驱动器的值,该值由驱动电路连续变化。

一些净数据类型是wire,tri,wor,trior,wand,triand,tri0,tri1,supply0, supply1和trireg。当信号为以下情况时,必须使用网络数据类型:

  • 一些设备的输出驱动它。
  • 声明为输入或输入/输出端口。
  • 在连续作业的左侧。

1.电线
电线表示电路中的物理电线,用于连接门或模块。电线的值可以在函数或块中读取,但不能分配给该值。

导线不存储其值,但必须由连续的分配语句驱动,或将其连接至门或模块的输出来驱动。

2.魔杖(线与)
棒的值取决于与其连接的所有驱动程序的逻辑与。

3. Wor(有线或)
wor的值取决于与其连接的所有驱动程序的逻辑或。

4.三(三州)
除确定Tri值的驱动程序外,所有连接到Tri的驱动程序都必须为z。

5. Supply0和Supply1
电源0和电源1定义了连接到逻辑0(接地)和逻辑1(电源)的导线。

寄存器

寄存器是一个数据对象,它存储从一个过程分配到下一个过程分配的值。它们仅在功能和过程块中使用。

过程中的赋值语句充当更改数据存储元素的值的触发器。

Reg是Verilog变量类型,不一定表示物理寄存器。在多位寄存器中,数据存储为无符号数,并且对于用户可能认为是二进制补码的数字,不进行符号扩展。

某些寄存器数据类型为reg ,integer,time和real.reg是最常用的类型。

  • Reg用于描述逻辑。
  • 整数是通用变量。它们主要用于循环索引,参数和常量。它们将数据存储为带符号的数字,而显式声明的reg类型将其存储为无符号的。如果它们包含在编译时未定义的数字,则它们的大小将默认为32位。如果它们保持常数,则合成器会将其调整为编译时所需的最小宽度。
  • 真正的系统模块。
  • 在模拟工作台中存储模拟时间的时间实时性。时间是64位的数量,可以与$ time系统任务结合使用以保存模拟时间。

注意:reg不必总是代表触发器,因为它也可以代表组合逻辑。

  • 在模拟开始时,将reg变量初始化为x。未连接任何导线的任何导线变量均具有x值。
  • 声明期间可以指定寄存器或导线的大小。
  • 当reg或wire的大小大于一位时,则将register和wire声明为向量。

Verilog字符串

字符串存储在reg中,并且reg变量的宽度必须足够大以容纳字符串。

字符串的每个字符代表一个ASCII值,需要1个字节。如果变量的大小比字符串小,那么的Verilog截断字符串的最左侧位。如果变量的大小大于字符串,则Verilog在字符串左侧添加零。