2017-06-06 7 views
1

Iは連想配列有する:文字列である(アレイがDUT内のレジスタのためのUVMレジスタフィールドのハンドルを含む文字列によって索引付けされランダム

rand uvm_reg_field array_assoc[string]; 

をフィールドの名前)。 「reg_field_1」と「reg_field_2」という名前の2つのレジスタフィールドがあるとします。

説明したように、

array_assoc["reg_field_1"]= handle of field 1; 
    array_assoc["reg_field_2"]= handle of field 2; 

私は "reg_field_1" と言う、私は選択の分野のいずれかのrand_modeをオフにし、一つだけのフィールドをランダム化する必要があり、そう:

array_assoc["reg_field_1"].rand_mode(0); 

今、私が連想配列をランダム化すると、両方のレジスタフィールドがランダム化されています。

何でももっと驚くべきことは、すなわち私は、整数インデックスは、そのようなことで通常の配列を宣言した場合:

rand uvm_reg_field array_normal[2]; 

    array_normal[0]= handle of field 1; 
    array_normal[1]= handle of field 2; 

、その後、フィールド1のためにrand_modeのターン:

array_normal[0].rand_mode(0); 

正常に動作し、フィールド1はランダム化されません。

質問です:はなぜレジスタフィールド「reg_field_1は」そのrand_modeが連想配列の場合は0に設定されている場合でも、ランダム化されつつありますか?

答えて

3

連想配列の個々の要素にrand_mode()を設定する機能は散発的にサポートされているようです。以下は、Questaと他のシミュレータの私の仕事です。私に「まだサポートされていません」と他のものと、あなたが見ている結果をもう一度見せてくれます。だからあなたのツールベンダーに連絡します。

module top; 
class B; 
    rand byte m; 
endclass 
class A; 
    rand B a1[2]; 
    rand B a2[string]; 
    function void run; 
     a2["0"] = new; 
     a2["1"] = new; 
     a1[0] = new; 
     a1[1] = new; 
     a1[0].rand_mode(0); 
     a2["0"].rand_mode(0); 
     void'(randomize()); 
     $display(a1[0].m, a1[1].m,,a2["0"].m,a2["1"].m); 

     endfunction 
endclass 
    A a = new(); 
    initial repeat(3) a.run(); 
endmodule