sv中的数组方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定宽数组:
⾮非合并数组:bit[7:0] un_packed [4];
⾼高位没⽤用。
合并数组:bit [3:0] [7:0] packed;
组成⼀一个32bits。必须是[msb:lsb]的形式。
@后⾯面跟数组的话,只能跟合并数组。
动态数组:int dyn[];
new[]分配空间。
基础类型相同时,可跟定宽数组相互赋值。
队列列: [$]。
不不需要new[]构造。
关联数组:bit[63:0] a_arry[bit[63:0]];
适⽤用于超⼤大容量量的存储,只为实际写⼊入的元素分配空间。
元素是系数分布的,for循环不不太适合,适合⽤用foreach。
可⽤用字符串串作为索引。
数组操作:
$size()返回数组的宽度。
= 数组整个赋值。
== 数组⾥里里的所有元素是否相等。
array.delete(),删除所有元素(动态)。
exits(); 检查元素是否存在(关联)。
队列列操作:
q.insert(i, j); 在q[i]之后插⼊入j。j可以是个队列列。
q.delete(i); 删除q[i]。
q.delete(); 删除整个队列列。
q = {}; 删除整个队列列。
q.push_front(), q.push_back() ;在q最前或最后插⼊入。
q.pop_front(), q.pop_back(); 在q最前或最后弹出,弹出之后元素消失了了。
(适⽤用于任何⾮非合并的数组类型,定宽,动态,队列列,关联等)
(不不带参数的话,圆括号可以省略略)
.sum, .product, .and, .or, .xor。注意返回的数据类型。
$urandom_range($size(array)-1),从数组⾥里里随机选取⼀一个元素。
.min(), .max(), .unique(),返回的是⼀一个队列列,unique⽤用于去掉重复的。find⽤用法:
array.find_idex with(item>3);
array.find_first with(item>99);
array.find_first_idex with(item==5); (寻找的是索引)
arrqy.find_last with(item>100); (last)
array.find_first(x) with (x==4);(⾃自定义参数)
array.sum with(item>7); (与sum结合起来⽤用)
array.sum with(item<8? item*3:0); (带选择语句句以及运算语句句)
.reverse();将原来的顺序倒过来。
.sort(); 由⼩小到⼤大排序。
.rsort(); 由⼤大到⼩小排序。
.shuffle(); 打乱顺序。
其他
数组赋初值⽤用 `{},队列列赋初值⽤用{}。
⾃自定义类型之数组:
typedef int farray[8]; 定义了了⼀一个⻓长度为8的数组类型farray。
farray x;等价于int x[8]
struct也可分成合并与不不合并,默认是不不合并,合并的话在struct后⾯面加上packed。
流操作符:
>> 从左向右按bit打包。
<< 从右向左按bit打包。
>> byte,<< byte 按byte打包。
枚举类型的操作:
first()。返回第⼀一个
last()。返回最后⼀一个
next(),next(n)。返回下⼀一个,下n个。prev(),prev(n)。返回前⼀一个,前n个。