SystemVerilog验证 测试平台编写指南 第二章 数据类型 下

2.6 链表
SystemVerilog提供了链表数据结构,但是应该避免使用它,因为SystemVerilog提供的队列更加高效易用。
2.7 数组的方法
2.7.1 数组的缩减方法
基本的数组缩减方法就是把一个数组缩减成一个值。最常用的方法就是求和sum,除此之外还有product(乘)and(与)or(或)xor(异或)等
在进行数组压缩的时候,应该特别重要的一点需要注意,那就是位宽的问题。
例2.23 数组求和

module test_enum();
bit on[10]; //单比特数组
int total;
initial begin                 
foreach(on[i]) 
on[i]=i; //on[i]的值为0或1
$display("on.sum=%0d",on.sum);  //on.sum是单比特无符号的数 打印出单比特和 on.sum=1
$display("on.sum=%0d",on.sum+32'd0);  //on.sum是32比特数 打印出32比特和 on.sum=5
//由于total是32比特变量,所以数组的和也是32比特变量
total=on.sum;
$display ("total=%0d",total); //total=5
//将数组和一个32比特数进行比较
if (on.sum>=32'd5) //条件成立
$display ("sum has 5 or more 1's'');
//使用带32比特有符号运算的with表达式
$display("int sum=%0d",on.sum with (int'(item))); //利用with来限定on.sum的数据类型,这是一种比较好用的方式
end     
endmodule

SystemVerilog中,对定宽数组、队列、动态数组和关联数组可以使用 $urandom_range( $size(array)-1)来选取随机一个元素,而对于队列和动态数组还可以使用 $urandom_range(array.size()-1)。

2.7.2 数组定位方法
例2.25 数组定位方法min、max、unique、find

module test_enum();
int f[6]={1,6,2,6,8,6},
d[]='{2,4,6,8,10},
q[$ ]={1,3,5,7},
tq[$];
initial
begin                 
tq=q.min();     //求最小值{1}
foreach(tq[i])
$display("min:tq[%0d]=%0d",i,tq[i]);
tq=q.max();    //求最大值{7}
foreach(tq[i])
$display("max:tq[%0d]=%0d",i,tq[i]);
        
tq=f.unique(); 
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值