1. 定宽数组:compile时确定
int arry[5:0] equivalent to int arry[6]
arry[5:0] = `{1,2,3,4,5,6}; arry[5:0] = `{6{6}}; arry[5:0] = `{1,2,3, default: 4}=`{1,2,3,4,4,4}
//=====================================================================
2. 动态数组:simulation时确定,需要new[]分配空间、创建变量个数
int arry[];
arry = new[10]; //分配10个元素空间
foreach(arry[i]) arry[i] = 1; //赋值
arry[5] =6;//把第5个元素改成6
//=====================================================================
3. pack/unpack 合并/非合并数组
bit [7:0] pack_aryy;
bit [7:0] [15:0] pack_arry;
bit [15:0] unpack_arry[7:0];
bit unpack_arry[7:0] [15:0];
从上面的arry定义可知:
-pack/unpack的区分
数组大小(容量)的定义都放在数组名左侧为 pack arry;
放在数组名右侧或两侧的为unpack arry;
-维度的区分:
数组大小的定义放在数组名同一侧的按从左到右划分高维度->低维度
放在数组名两侧的从数组名右侧开始,按从左到右划分高维度->低纬度
举例:
bit [2:0][5:0] arry 左侧高维度,左侧低维度,两维pack数组 [2] [1 ] [0]
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
bit [5:0] arry[3] 同样右侧高维度,左侧低维度,3组6bit数据, 类似 bit [5:0] clkcfg design中的参数定义,只不过是1组6bit的数据
unpack [0] | 1 | 1 | 1 | 1 | 1 | 1 | |||||||||||||||||||||||||
unpack [1] | 0 | 0 | 0 | 0 | 0 | 0 | |||||||||||||||||||||||||
unpack [2] | 1 | 1 | 1 | 1 | 1 | 1 |
占 3word
//=====================================================================
4. 数组访问
read/write use foreach or for
foreach(arry[i]) arry[i] = i*2+i;
for(int i =0; i<$size(arry),i++) arry[i] = i*2+i;
pack 连续空间, 赋值简单,可直接copy, compare等操作
unpack 非连续空间, 赋值较复杂,copy,compare等需要相等结构形式的
标签:数据类型,数组,维度,bit,unpack,arry,pack From: https://www.cnblogs.com/gy-IcPark/p/17786025.html