数组&队列&关联数组的总结

定宽数组:可以直接赋值,也可以先声明再赋值 其中还有多维数组

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 []name[]的形式且,记住位个

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

 

 

  

posted @ 2023-11-10 13:41  hc_zheng  阅读(9)  评论(0编辑  收藏  举报