第2章 数据类型
2.1内建数据类型
2.1.1逻辑类型 logic
1. 什么是logic?
sv对reg进行了改动,使得它除了作为一个变量外,还可以被连续赋值、门单元和模块所驱动这种改动后的数据类型称为logic。任何使用线网的地方都可以使用logic,但要求logic不能有多个结构性驱动。
2.1.2 双状态数据类型
双状态数据类型:bit(无符号), byte, shortint, int, longint。
2.2 定宽数组
2.2.1定宽数组的声明和初始化
声明: int lo_hi[0:15]; //16个整数
int c_style[16]; //16个整数
多维数组声明:int array1[0:7][0:3]; //完整的声明
int array2[8][4]; //紧凑的声明
array1[7][3]=1; //设置最后一个元素
如果你的代码从一个越界的地址中读取数据,那么system verilog将返回数组元素类型的缺省值。
仿真器通常使用两个或两个以上连续的字来存放logic和integer等四状态类型。
2.2.2 常量数组
desend[0:2]='{1,2,3}; //全部设值
desend[0:2]='{3{1}}; //设置为3个1
desend[0:2]='{1,default : 2};//第一个数为1,其他为2
2.2.3基本的数组操作 - for和foreach
遍历方法:
for(int i = 0; i < $size(src); i ++)
src[i] = i;
foreach(dst[j])
dst[j] = src[j] * 2;
2.2.4 基本的数组操作-复制和比较
bit[32:0] src[5] = '{1,2, 3}, drc[5] = '{1,2, 3};
if (src = drc) // 比较
dsc = src; //复制
对数组的算数运算不能使用聚合操作,要使用循环操作。
2.2.5 合并数组
bit[0:3][0:7] barray[3];//合并:3*32比特
bit[31:0] lw = 32'h0123_4567;
barray[0] = lw;
barray[0][3]=8'h01;
barray[0][2][3]=1‘b1;
合并数组和非合并数组如何选择?
如果你需要和标量进行转换时,使用合并数组会非常方便;如果需要等待数组中的变化,必须使用合并数组。