队列、定宽数组、关联数组、动态数组(systemVerilog)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在Verilog中可以声明一个数组类型,reg和线网类型还可以具有一个向量宽度。在一个对象名前面声明的尺寸表示向量的宽度,在一个对象名后面声明的尺寸表示数组的深度。在此基础上,SystemVerilog使用不同的术语表示数组:使用“压缩数组(packed array)”这一术语表示在对象名前声明尺寸的数组;使用“非压缩数组(unpacked array)”这一术语表示在对象名后面声明尺寸的数组。压缩数组可以由下面的数据类型组成:bit、logic、reg、wire以及其它的线网类型。无论是压缩数组还是非压缩数组都可以声明成多维的尺寸。


一、定宽数组

定宽数组即宽度固定的数组。如,

int ascend[4];
ascend = '{0,1,2,3};
int array[2][3];
array = '{'{0,1,2},'{3,4,5}};

1.1 Packed array(合并数组)

连续存储,元素为一位数据类型或枚举类型。如,

bit[2:0] [7:0]  array5;

在这里插入图片描述

1.2 Unpacked array(非合并数组)

有间隙存储,任意类型组成。如,

bit[7:0]  array4[2:0] 或 bit[7:0]  array4[3]

在这里插入图片描述

二、动态数组

在仿真时分配空间或调整数组宽度,使用最小的存储量。如,

int dyn[], d2[];
dyn = new[5];

基本数据类型相同,定宽数组和动态数组之间可相互赋值。
元素个数相同的情况下,可以把动态数组的值复制到定宽数组;
当把定宽数组复制给动态数组时,SystemVerilog会自动调用构造函数new[ ]来分配空间并复制数值。
使用之前分配和初始化内存。

三、队列

队列与链表相似,可以增加或删除元素

bit    queue_1[$]; 
int    queue_2[$];
byte   queue_3[$:255]; 
string queue_4[$]; 

插入元素/队列

q2.insert(1,j);
q2.insert(3,q); 
q.push_front(6);
q.push_back(8);

删除元素

q2.delete(1); 
j = q.pop_front;
j = q.pop_back; 

四、关联数组

对一个较大的地址范围的一小部分进行访问,关联数组用来保存稀疏矩阵元素,只对写入的元素分配地址空间。

data_type  array_name[index_type]int a_array1[*] ; 
bit [31:0] a_array2[string];
ev_array [myClass]; 

将内容存储在稀疏矩阵;
关联数组只有在使用时才分配存储空间;
关联数组为数组元素分配一个查找表,其中索引作为键。

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值