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 にする方法はありますか? ありがとう - ティム

4

1 に答える 1

1

同じ質問を投稿した検証アカデミーフォーラムのコメントに基づいて解決策を見つけました。基本的に、私が望むことを達成するには、独自の確率変数を使用して新しいクラスを作成する必要があります

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
于 2012-08-10T15:25:14.090 に答える