约束条件更改时的 system verilog randc 行为

system verilog randc behavior when constraint condition changes

我读到当对变量的约束改变时,randc 变量的排列顺序改变。但是考虑到下面的例子,约束没有重新定义但是条件 (y) 改变了——是否有机会重新计算 randc 变量的排列序列?

randc bit [5:0] x;
rand bit y;                                                                                                                                                         

constraint  c_x {
    (y)  -> {x inside {[10:13]}};
    (!y) -> {x inside {[20:23]}};
}

我测试了它,即使 'y' 每次 randomize() 调用都会发生变化 - x 的排列顺序没有变化。只是想了解 randc 的更详细信息。

不,你只有一个约束表达式,所有变量都是随机的。 randc 变量的排列序列在

上重置
  • 构建对象
  • 变量的改变 rand_mode()
  • 更改约束的 constraint_mode()
  • 更改约束表达式中使用的非随机变量的值
  • 使用不同的 with {} 子句调用随机化
  • 排列中没有剩余值

要使上述任何更改生效,必须依赖于 randc 变量。