Random 约束条件更改时的系统verilog randc行为

Random 约束条件更改时的系统verilog randc行为,random,system-verilog,Random,System Verilog,我读到randc变量的排列顺序随着变量约束的改变而改变。但考虑到下面的示例,在该示例中,约束未重新定义,但条件(y)发生变化-是否有可能重新计算randc变量的排列序列 randc bit [5:0] x; rand bit y;

我读到randc变量的排列顺序随着变量约束的改变而改变。但考虑到下面的示例,在该示例中,约束未重新定义,但条件(y)发生变化-是否有可能重新计算randc变量的排列序列

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

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

我对它进行了测试,尽管每次randomize()调用的“y”都会改变,但x的排列顺序并没有改变。只是想了解randc的更详细信息。

不,您只有一个约束表达式,所有变量都是随机的。
randc
变量的置换序列重置为on

  • 对象的构造
  • 变量rand_mode()的更改
  • 更改约束的约束模式()
  • 更改约束表达式中使用的非兰德变量的值
  • 使用不同的
    with{}
    子句调用randomize
  • 排列中没有剩余值

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

我认为它也会重置-当randc变量的约束改变时(例如,obj.randomize()和{})。它是否包含在你的“对象构造”案例中?我希望排列顺序会在“y”改变时重新生成。但事实并非如此,所以我正试图清楚地理解这种行为。下面的答案让我明白了。