systemverilog 数据类型
文章目录
一.数据类型
1.logic
在SV中新引入了一个数据类型logic,SV对经典的reg数据类型进行了改进,使得它除了作为一个变量以外,还可以被连续赋值、门单元和模块所驱动。任何使用线网的地方均可以使用logic,但要求logic不能有多个结构性的驱动。例如在对双向总线建模的时候。此时,需要使用线网类型。
SV作为侧重于验证的语言,并不十分关切logic对应的逻辑应该被综合为寄存器还是线网,因为logic被使用的场景如果是验证环境,那么它只会作为单纯的变量进行赋值操作,而这些变量也只属于软件环境构建。
tips:由于logic类型只能有一个驱动,所以你可以使用它来查找网单中的漏洞。把你所有的信号都声明为logic而不是reg或wire,如果存在多个驱动,那么编译时就会出现错误。
与logic相对应的是bit类型,它们均可以构建矢量类型(vector),而它们的区别在于:
logic为四值逻辑,即可以表示0、1、X、Z。
bit为二值逻辑,只可以表示0和1。
2.逻辑类型
SV中的四值逻辑与二值逻辑分类
四值逻辑类型:integer(32)、logic、reg、net-type(例如wire、tri)
二值逻辑类型:byte(8)、shortint(16)、int(32)、longint(64)、bit
tips:
1.括号中的数字代表该类型声明后的数据所占位宽
2.在验证中常用bit去声明时钟信号CLK和复位信号RSTN.
3.符号类型
有符号类型:byte、shortint、int、longint、integer
无符号类型:bit、logic、reg、net-type(例如wire、tri)
4.缺省情况
如果你的代码试图从一个越界的地址中读取数据,那么system verilog将返回数组元素类型的缺省值。也就是说,对于一个元素为四状态类型的数组,例如logic,返回的是X,而对于双状态类型例如int或bit,则返回0。线网在没有驱动的时候输出是z。(线网为上述的net-type)。
5.总结
在遇到这些变量类型时,应该注意它们的逻辑类型和符号类型,因为在变量运算中,应该尽量避免两种不一致的变量进行操作,而导致意外的错误。
二.数组类型
- 关于数组维度
高纬度代表行,低纬度代表列
[]都在右侧:左边是高维度
[]都在左侧:左边是高纬度
[]一左一右:右边是高纬度
1.定宽数组
- 多维数组声明和使用
int array2 [0:7][0:3]; //完整声明
int array3 [8][4]; //紧凑声明
array2[7][3]=1; //设置最后一个元素
//紧凑型声明是新的,上面创建的数组大小都是8行4列
- 初始化和赋值
int ascend[4]='{
0,1,2,3