1.简述
入职两个月了,都是使用System Verilog做验证。之前直接用Verilog编写testbench,这段时间使用sv后发现,确实很有必要转用sv做验证。
2.正文
1)数据类型
类型 | 描述 | 符号 |
---|---|---|
logic | 四状态,相当于Verilogreg和wire功能 | |
bit | 双状态,自定义位宽 | 默认无符号 |
int | 双状态,32bit | 有符号 |
byte | 双状态,8bit | 有符号 |
shortint | 双状态,16bit | 有符号 |
longint | 双状态,64bit | 有符号 |
integer | 四状态,32bit | 有符号 |
time | 四状态,64bit | 无符号 |
real | 双状态,64bit | 双精度浮点,相当于double |
shortreal | 双状态,32bit | 相当于float |
注:
- 四状态为:0、1、x、z;双状态为:0、1。
- 在verilog中reg型数据只能在always中赋值,使用assign赋值则要使用wire类型,在sv中logic既可以在always中赋值也可以在assign中使用,但是不能在多处驱动。
2) 定宽数组
int array0[0:15]; //16个整数
int array1[16]; //16个整数
int array2[0:7][0:3]; //二维数组
int array3[8][4]; //二维数组
array3[5][2]=1; //数组赋值
bit [7:0] unpack[3]; //非合并数组,分配三个字空间,但只存放低字节
int ascend[4]=`{0,1,2,3};//常量数组前面加 “ ` ”
3)数组的操作
initial begin
bit [31:0] src[5],dst[5];
for(int i=0;i<$size(src);i++)
src[i] = i;
foreach(dst[j])
dst[j]=src[j]*2;
end