数据类型-数组

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
 3*6=18 bit    占1word即可

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等需要相等结构形式的

posted @   Gary&  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示