📅  最后修改于: 2021-01-11 14:35:04             🧑  作者: Mango
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,阵列可以具有任一包装或未包装的尺寸,或两者。
包装尺寸
开箱尺寸
可以按照模拟器选择的任何方式将其安排在内存中。我们可以可靠地将一个阵列复制到另一个相同类型的阵列上。
对于具有不同类型的数组,我们必须使用强制类型转换,并且对于将未压缩类型强制转换为压缩类型存在一些规则。
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中,并且reg变量的宽度必须足够大以容纳字符串。
字符串的每个字符代表一个ASCII值,需要1个字节。如果变量的大小比字符串小,那么的Verilog截断字符串的最左侧位。如果变量的大小大于字符串,则Verilog在字符串左侧添加零。