Home Articles

SystemVerilog randc重新初始化

Asked
Viewed 1688 times
0

我想知道是否有办法重新初始化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

1 Answer

  • 0

    我根据验证学院论坛上的一些评论找到了解决方案,我发布了相同的question . 基本上,为了实现我想要的,我需要创建一个具有自己的随机变量的新类

    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
    

Related