SystemVerilog Constraint,每第n次迭代修复一次值

时间:2017-04-17 16:28:27

标签: system-verilog

class Base
 rand bit b;
// constraint c1 { every 5th randomization should have b =0;}
endclass

我知道我可以创建一个静态计数变量并更新该计数变量然后,在约束中我可以检查计数%5是否为零,然后使b = 0,但是有更好的方法吗?感谢。

2 个答案:

答案 0 :(得分:0)

没有必要将计数设为静态,只是非随机。

class Base;
  rand bit b;
  int count;
  constraint c1 { count%5 -> b==0;}
  function post_randomize();
    count++;
  endfunction
endclass

答案 1 :(得分:-1)

如果你知道b的上限,那么你可以写一个像下面这样的约束。

constraint abc 
{
  b dist {0:=20, 1:=80}
}

这会使020的权重和180的权重。所以这样,每5次随机化就会出现0次。