rand_mode使用注意

Case:

有一个DUT cfg , 可以在simulation过程中动态配置,并有一定的constraint;但是在某一种模式下存在limitation导致该变量必须保持不变而其它变量还是可以random,由于testplan是没有预期到这个limitaion,所以并没有做特殊处理。所以想到直接把该变量rand_mode设为0;结果发现在simulation的时候报错,指示其default值不在constraint里面。

Reason:

虽然该变量的rand_mode已经关闭,相当于该变量取的是default值,但simulator依然要去检查其是否在constraint里面,导致检查失败

Solution:

  1. 将constraint里面加入其default value作为合法值
  2. 如果该变量的合法值受限于其它变量并不一定能保证其default值即是合法值,那么可以将所有对该变量进行constraint的条件写在一个constraint里面,使用constraint_mode针对该constraint进行关闭。
  3. 最简便的方法是通过static变量,记录上一次随机的值,下一次照常随机,然后再用static值去覆盖。

Additional tracking

只要调用class的randomize(),vcs就会检查class内定义的所有constraint合法性。ex:即使你用的是inst_A.randomize(item_a)去随便某个item,看起来和其它item没有什么关系,但结果是会检查所有constraint,如果有某个item的default或assign的值没有在constraint里面,就会报错。

sv-2012提供了软约束的功能,可以很好解决base constraint与其它额外约束之间的冲突

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值