Random SystemVerilog randc重新初始化

Random SystemVerilog randc重新初始化,random,verilog,verification,system-verilog,Random,Verilog,Verification,System Verilog,我想知道是否有办法重新初始化randc变量。我试图设置几个寄存器,但需要确保它们可以按任意顺序设置。该对象可能会被重新随机(类中还有一些其他随机值),然后该函数可能会被再次调用。我的代码如下所示: typedef enum bit[N:0] { REG1, REG2, REG3, REG4, ... } reg_order_e; local randc reg_order_e reg_order; function void set_regs(); repeat( reg_order.

我想知道是否有办法重新初始化randc变量。我试图设置几个寄存器,但需要确保它们可以按任意顺序设置。该对象可能会被重新随机(类中还有一些其他随机值),然后该函数可能会被再次调用。我的代码如下所示:

typedef enum bit[N:0] { REG1, REG2, REG3, REG4, ... } reg_order_e;
local randc reg_order_e reg_order;

function void set_regs();
    repeat( reg_order.num() ) begin
        case( reg_order )
            REG1: set_reg1();
            REG2: set_reg2();
            REG3: set_reg3();
            REG4: set_reg4();
        endcase
        assert(randomize( reg_order ));
    end
endfunction : set_regs
或者,是否有方法对变量调用std::randomize(),使其成为randc? 谢谢
-Tim

我根据验证学院论坛上的一些评论找到了解决方案。基本上,为了实现我想要的,我需要用它自己的随机变量创建一个新类

class helper;
     randc reg_order_e reg_order;
endclass : helper

task do_some_work();
    helper helper_inst = new();
    repeat( reg_order_e.num() ) begin
        assert( helper_inst.randomize() );
        case( helper_inst.reg_order )
            REG1: ...
            REG2: ...
        endcase
    end
endtask : do_some_work

您当前的代码有什么问题?它应该以randc方式正确地迭代
reg\u order\u e
中的所有值。randsequence如何保证每个寄存器都被命中?