数字验证学习笔记——SystemVerilog芯片验证17 ——数组约束

一、数组约束

1.1 数组的属性约束

在这里插入图片描述

  • 多数情况下,数组的大小应该给定范围,防止生成过大体积的数组或者空数组
  • 此外还可以在约束中结合数组的其他方法sum(),product(),and(),or()和xor()。
  • SV可以利用foreach对数组的每一个元素进行约束,和直接写出对固定大小数组的每一个元素的约束相比,foreach要更简洁。
  • 针对动态数组,foreach更适合于对非固定大小数组中每个元素的约束。
    class good_sum5;
    rand uint len[]
    constraint c_len {
    foreach (len[i]) len[i] inside {[1:255]};
    len.sum() <1024;
    len.size() inside {[1:8]};
    }
    endclass
    在这里插入图片描述

1.1.1 数据约束实例一(产生唯一元素值的数组)

在这里插入图片描述
如上图,其中i会从0增长到63,j也会从0增长到63。

也可以用randc变量辅助生成唯一元素值的数组。
在这里插入图片描述
LittleUniqueArray A;
A=new();
assert(A.randomize());

其中rc8 = new()要放在foreach外部,如果放在foreach内部是达不到上面的效果,每次循环都相当于从256张牌中抽一张。

1.1.2 数据约束实例二

在这里插入图片描述
在这里插入图片描述
答案是D,因为da.size=3时合理,此时bit [3:0] da[3] ,只有da[0],da[1] ,da[2] 三个值,但是约束 da[2]<da[3] 不合理,
没有da[3]。

1.1.3 数据约束实例三(随机化数组句柄)

在这里插入图片描述
如果句柄动态数组前是rand,在randomize()句柄之前,这些句柄必须要指向例化的对象(句柄不能悬空),同时这些句柄指向对象里的变量也会随机化(变量之前必须要被rand修饰才会随机化)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值