定宽数组:可以直接赋值,也可以先声明再赋值 其中还有多维数组
int array2[0:7][0:3];int array3[8][4];// 先个后位
int ascend[4]='{0,1,2,3}; int descend[5]; descend='{4,3,2,1,0}; descend[0:2]='{5,6,7}; ascend='{4{8}}; descend='{9,8,default:-1};
数组的声明全在左侧时为合并数组
bit [4:0][3:0]b;//简单记住先个后位,五个b,每个b有4位
数组声明在两侧时为非组合型数组
bit [4:0]a[5];//按顺序存放从上到下,a[4:0][0]如此,一直存放到a[4:0][4],简记非合并数组反过来是位个
bit [4:0][3:0]b[3];//三个合并数组的非合并数组(两种类型的混用)
32bit是一个字
四值逻辑占2bit,一个字节占32bit
int[4:0][3:0]b[4:0][3:0];//先字母右侧再字母左侧,从左到右,高到低
数组的应用有for与foreach
数组的复制 :合并数组之间复制 会扩展右侧的操作数来对左侧的操作数赋值
非合并数组的话,需要严格对照操作数的维度
动态数组
特点:可以在仿真时灵活调节数组大小
先声明--再分配--操作
int dyn[],d2[];//声明动态数组 initial begin dyn=new[5];//分配元素 foreach(dyn[j]) dyn[j]=j;//初始化 d2=dyn;//复制动态数组 d2[0]=5;//修改复制值 $display(dyn[0],d2[0]);//显示0,5 dyn=new[20](dyn);//分配20个数值并复制 dyn=new[100];//分配100个并删除旧值 dyn.delete();//删除所有 end
队列
结合了链表与数组的优点,可以在任何地方添加或删除元素,通过索引实现对任意元素的访问。
声明[$];队列标号0-$,不需要new[]创建空间,开始时空间为0,按照队列方式增减元素。
int j=1,q2[$]={3,4},q[$]={0,2,5}; initial begin q.insert(1,j);//在1号位之前插入j的值 q,insert(3,q2); q.delete(1);//删除q第一个元素 //更快运行速度 q.push_front(6);//头部插入 j=q.pop_back();//尾部取出 end
关联数组
在使用超大容量数组时,使用空间有限,大量开辟会造成浪费。关联数组可以用来保存稀疏矩阵的元素,当需要非常大的地址空间寻址时,指为实际写入的元素分配空间,因此占用空间小得多。在其他语言中有类似的存储结构被称之为哈希(Hash)或词典(Dictionary),可灵活存储键值和数值。
bit [63:0]assoc[int],idx=1; initial begin repeat(64)begin assoc[idx]=idx; idx = idx << 1; end foreach (assoc[i]) begin $display("assoc[%h]=%h",i,assoc[i]); end assoc.first(idx); $display("%h",idx); end
标签:idx,队列,关联,int,dyn,descend,数组,d2 From: https://www.cnblogs.com/hc-zheng/p/17823880.html