system verilog验证——数据类型(1)
sv数据类型的改进
与Verilog相比,System Verilog提供了更多改进的数据结构,具有优点如下:
1、双状态数据类型:更好的性能,更低的内存消耗;
2、队列、动态和关联数组:减少内存消耗,自带搜索和分类功能
3、类和结构:支持抽象数据结构;
4、联合和合并结构:允许对同一数据有多种视图(view);
5、字符串:支持内建的字符序列;
6、枚举类型:方便代码编写,增加可读性;
逻辑(logic)类型
SV对经典的reg数据类型进行了改进,使得它除了作为一个变量以外,还可以被连续赋值、门单元和模块所驱动。为了与寄存器类型相区别,这种改进的数据类型被称为logic。同时任何使用线网的地方均可以使用logic,但logic不能有多个结构性的驱动,例如在对双向总线建模的时候;
(注:若要用byte数据类型来代替logic[7:0]的声明时,需要注意这些新的数据类型都是带符号的,即byte最大值127,而非255;虽然可以使用byte unsigned,但这比bit[7:0]更麻烦)
定宽数组
定宽数组的声明
int a[0:15]; //16个整数[0]...[15]
int b[16]; //16个整数[0]...[15]
verilog中在声明必须给出数组的上下界;但system verilog中不仅可以同verilog的声明,还可以只给出数组宽度的声明;
(注:若代码试图从月结的地址中读取数据,那么system verilog将返回数组元素类型的缺省值;如logic四状态类型返回X,bit二状态类型返回0)
定宽数组的初始化
int a[4] = '{0,1,2,3};
a = '{4{8}}; //{8,8,8,8}
int b[5];
b[0:2] = '{5,6,7};
b = '{6,5,default:1}; //{6,5,1,1,1}
基本的数组操作——for和foreach
sv中$size返回数组的宽度。
在foreach循环中,只需要指定数组名并在其后方括号中给出索引变量,sv便会自动便利数组中的元素;
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
//对比for和foreach的 用法
/
//打印一个多维数组
initial begin
byte a[4][6];
foreach(a[i,j])
a[i][j] = i * 10 + j;
foreach(a[i])begin //遍历第一个维度
$write("%2d:",i);
foreach(a[,j])
$write("%3d",a[i][j]); //遍历第二个维度
$$display;
end
end
数据类型未完待续QWQ
这篇笔记参考《system verilog验证》绿皮书整理而成,仅作学习心得交流,如果涉及侵权烦请请告知,我将第一时间处理。