本文将介绍SV中的常用且非常重要的数据类型 — 定宽数组。介绍内容如下:
1.定宽数组声明格式
常见的定宽数组声明格式为: type name[constant],其中type为存储数据类型
例如 int array[16],array为数组的名字,int为数组的存储类型是int型数据,16是数组的大小,共16个元素
2.一维数组
SV一维数组是常用的数组,一维代表数组的存储数据为一个维度
例如: int array[16],array是数组的名字,数组元素一共16个,索引为0…15,存储的数据类型为int型,即数组中的每个为32位的有符号数
例如: shortint array[32],数组的索引为0…31,共31个元素
0 | 16bit:array[0] |
---|---|
1 | 16bit:array[1] |
2 | 16bit:array[2] |
… | 16bit:array[…] |
31 | 16bit:array[31] |
3.二维数据
二维数组亦为SV常用数组,二维可以理解为数组存储的数据为两个维度
例如:int array[8][4], 该数组大小为8行4列共32个元素
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 32bit | 32bit | 32bit | 32bit |
1 | 32bit | 32bit | 32bit | 32bit |
2 | 32bit | 32bit | 32bit | 32bit |
3 | 32bit | 32bit | 32bit | 32bit |
4 | 32bit | 32bit | 32bit | 32bit |
5 | 32bit | 32bit | 32bit | 32bit |
6 | 32bit | 32bit | 32bit | 32bit |
7 | 32bit | 32bit | 32bit | 32bit |
4.数组的基本操作
4.1 数组初始化
为数组初始化,使用赋值赋值符号:‘{} and ’{n{}}
int ascend[5]='{0,1,2,3,4}; //对数组中的5个元素进行初始化
int descend[4];
descend[4] = '{3,2,1,0};
descend[0:2] = '{5,6,7}; //为前3个元素赋值
ascend = '{5{8}}; // 5个元素的值全部为8 {8,8,8,8}
descend = {9,8,default:-1}; //{9,8,-1,-1}
4.2数组的基本操作-for
遍历数组的常用方法之一就是for循环。如下例所示:
initail begin
bit [31:0] src[5],dst[5]; //表示数组有5个元素 ,每个元素为32位的无符号数
for(int i = 0 ; i <$size(src);i++} //在SV中,$size函数返回数组的宽度;并且i变量为for循环内部的局部变量
src[i] = i ;
end
4.3数组的基本操作 - foreach
使用foreach也可以方便快捷的遍历数组:
initial begin
bit [31:0] src[5],dst[5];
foreach(dst[j])
dst[j] = src[j]*2;
end
5.数组的注意事项
1.byte/short/int类型的数据,都是占据一个字(32位)的存储空间(这个我这么理解,虽然byte只有八位,shortint只有16位,但他们所占的存储空间都是32位的
2.longint占据俩个字的存储空间(64位)
3.如果越界读数组的话,则返回数组元素类型的缺省值
3.1如果数组元素为4值逻辑,如logic,则返回x;
3.2如果数组元素为2值逻辑,如int、bit,则返回0;
4.如果越界写数组的话,则写数据被忽略
文章转载出处:link