sv中的数组方法
定宽数组:
非合并数组: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?用于去掉重复的。用法:
array.?nd_idex with(item>3);
array.?nd_?rst with(item>99);
array.?nd_?rst_idex with(item==5); (寻找的是索引)
arrqy.?nd_last with(item>100); (last)
array.?nd_?rst(x) with (x==4);(?自定义参数)
?nd?
array.sum with(item>7); (与sum结合起来?用)
array.sum with(item<8? item*3:0); (带选择语句句以及运算语句句)
.reverse();将原来的顺序倒过来。
.sort(); 由?小到?大排序。
.rsort(); 由?大到?小排序。
.shuf?e(); 打乱顺序。
其他
数组赋初值?用 `{},队列列赋初值?用{}。
自定义类型之数组:
typedef int farray[8]; 定义了了?一个?长度为8的数组类型farray。
farray x;等价于int x[8]
struct也可分成合并与不不合并,默认是不不合并,合并的话在struct后?面加上packed。
流操作符:
>> 从左向右按bit打包。
<< 从右向左按bit打包。
>> byte,<< byte 按byte打包。
枚举类型的操作:
rst()。返回第?一个
last()。返回最后?一个
next(),next(n)。返回下?一个,下n个。prev(),prev(n)。返回前?一个,前n个。