SV数组知识简明笔记

定宽数组、动态数组、关联数组

在这里插入图片描述

定宽数组的声明

int lo_hi [0:15];
int c_style [16];
int array2 [0:7][0:3];
int array3 [8][4];

非合并数组的声明

bit [7:0] b_unpack[3];

仿真器通常使用两个或两个以上连续的字(Word)存放logic和integer等四值逻辑类型,比存放二值逻辑变量多用一倍空间。

数组初始化

int ascend[4] = '{0, 1, 2, 3};
$display("%p", ascend); // 打印数组

合并数组的声明

合并的位和数组大小必须在变量名字的前面

bit [3:0][7:0] bytes;
bit [3:0][7:0] bytes [5];

在这里插入图片描述

动态数组

声明时使用空的下标[],程序运行时再指定,数组宽度不是编译时给。

int dyn[], d2[]; //声明动态数组
dyn = new[5]; //分配5个元素
d2 = dyn; //复制动态数组
dyn = new[20](dyn); //分配20个新元素并将dyn复制给开头的5个元素,释放dyn空间
dyn.delete(); //删除所有元素

系统函数$size()用于返回定宽和动态数组的宽度,.size()用于动态数组。
只要数据类型相同,例如都是int,定宽数组和动态数组之间就可以相互赋值。
元素数目相同时,可以把动态数组的值复制到定宽数组。

关联数组

关联数组采用在方括号中放置数据类型的形式进行声明。

byte assoc[byte];
int switch[string];
int power_of_2[int] = '{0:1, 1:2, 2:4};

一般建议使用foreach循环遍历该数组。

数组的方法

缩减方法把一个数组缩减成一个值。

int a;
a = arr.sum();
a = arr.product();
a = arr.and(); //所有元素的按位与操作

定位方法返回一个队列。

int q[] = '{1, 1, 3, 5, 7};
int tq[$];
tq = q.min();//{1}
tq = q.max();//{7}
tq = q.unique();
tq = q.find with  (item > 3);
tq = q.find_index with(item>3);

数组排序

arr.reverse();//原数组倒排
arr.sort();//从小到大排列
arr.rsort();//从大到小排列
arr.shuffle();//随机打乱排列

关联数组不能重新排序,定宽数组、动态数组、队列可以排序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值