1.内建数据类型
相比于Verilog 将寄存器类型reg和net(线网)类型区分如此清楚,在SV中引入了logic数据类型。任何使用线网的地方均可以使用logic,但要求logic不能有多个结构性的驱动,例如在对双向总线建模时。此时,需要使用线网类型。
四值逻辑类型有:logic,reg,wire,integer;
二值逻辑类型有:bit, byte,int,shortint,longint;
按照有无符号还可以分为:
有符号类型:integer, byte, int,shortint,longint;
无符号类型:logic,reg,wire,bit;
注意:
在遇到变量类型时,应注意它们的符号类型和逻辑类型,在变量的运算中,尽可能避免两种不一致的变量进行操作。
1.对于有符号类型,例如:byte变量的最大值是127,而不是255(它的范围是-128–127)。
2.对于逻辑变量类型,四值逻辑类型默认值为X,二值逻辑类型的默认值为0。
2.定宽数组
2.1.定宽数组的声明与赋值
//一维定宽数组
int lo_hi[0:4]; //5个整数[0]...[4];
int c_style [5] ='{0,1,2,3,4}; //对5个元素初始化;
lo_hi = '{0,1,2,3,4}; //对5个元素赋值;
lo_hi[0:2] = '{0,1,2}; //对前3个元素赋值;
lo_hi[0:2] = '{3{3}}; //3个值全为3;
lo_hi = '{3,5,default:2}; //{3,5,2,2,2};
//非合并数组
int array1 [0:2][0:1]; //完整声明一个二维数组;
int array [8][4]; //紧凑的声明;
array [7][3]=2; //设置最后一个元素;
array1 = '{'{0,1},'{1,2},'{2,3}}; //数组赋值;
//合并数组
bit [3:0][7:0] bytes; //数组大小的定义格式为[msb:lsb],而不是[size];
bytes = 32'hCafe_Dada; //赋值;
//合并/非合并数组
bit [0:3][0:7]array [3]; //合并3*32比特
bit [31:0] 1w= 32'h0123_4567; //字
bit [7:0][3:0] nib; //合并数组;
array[0]=1w; //使用一个下标,可以得到一个字的数据;
array[0][3]=8'h01; //使用两个下标,可以得到一个字节的数据;
array[0][1][6]=1'b1; ////使用三个下标,可以得到一个比特的数据;
nib = array[0]; //复制合并数组的元素值
注意:当测试平台通过存储器数据的变化来唤醒时,通过@操作符实现,这个操作符只能用于标量或者合并数组。例如上边代码中的非合并数组array,只可以将array[0]或者1w作为敏感信号,但不能用整个array数组,除非把它扩展成:@(array[0] or array[1] or array[2])。
可能用到的系统函数:

最低0.47元/天 解锁文章
237

被折叠的 条评论
为什么被折叠?



