【IC验证】随机约束相关问题

1.rand与randc的区别

rand用于生成伪随机的、均匀分布的随机值。它会在每次调用时生成一个新的随机值,且每个值的概率相等;

randc也用于生成随机值,但不包括上一个随机值。换句话说,它生成的随机值不会与上一个生成的随机值相同。

这在某些情况下可以确保避免连续生成相同的随机序列,增加随机性。

2.子类对父类的约束是继承还是约束

当子类约束和父类约束同名时,是覆盖,以子类的约束为准。当子类约束和父类约束不同名,是继承,约束里面的相同变量要同同时满足子类和父类的约束

3.

类里所有没有被指定rand的变量也可以作为randomize()的参数而被随机化。

4.具有唯一元素的数组

即随机数组时如何让随机出来每个数组元素值都不一样

方法1:使用foreach函数

class UniqueSlow;
  rand bit [7:0] ua[64];
    constraint c{
      foreach(ua[i])
        foreach(ua[j])
          if(i != j)
            ua[i] != ua[j];
    }
endclass

但是这样仿真速度太低了

方法2:使用包含randc的辅助类

class randc8;
  randc bit [7:0] val;
endclass


class LittleUniqueArray;
  bit [7:0] ua [64];
  function void pre_randomize();
    randc8 rc8;
    rc8=new();
    foreach(ua[i])begin
      assert(rc8.randomize());
      ua[i] = rc8.val;
    end
  endfunction
endclass

5.随机化句柄数组

不仅会随机化句柄数目,还会随机化句柄指向的对象。同理,动态数组在随机化时也会随机化大小和元素值

6.多个软约束的冲突问题

随机化解决软约束冲突,遵循后置约束覆盖前置约束,子类约束覆盖父类约束,内嵌约束覆盖类内部约束

7.结构体使用rand修饰符

类中的结构体变量为非组合型时(默认为此),需要对该结构体变量及其内部成员分别添加rand,结构体变量为组合型时,仅需要对改结构体变量添加rand修饰符(并且不支持对内部变量添加rand修饰符)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值