2016-07-13 12 views
1

私は可変論理[31:0] idを持っていますが、これはrandまたはrandcとして宣言されていません。私は配列のロジック[31:0] id_array [16]に毎回異なるIDが必要です。ランダム化中のSystemVilog固有の配列値

logic [31:0] id; 
logic [31:0] id_array [16]; 
foreach(id_array[i]) begin 
    std::randomize(id); 
    id_array[i] = id; 
end 

上記のコードでは、配列にIDが重複する可能性があります。配列内の一意のIDを取得するコードを変更するにはどうすればよいですか?

答えて

2

私は

logic [31:0] id; 
logic [31:0] id_array [$]; 
repeat (16) begin 
    std::randomize(id) with {!(id inside {id_array});}; 
    id_array.push_back(id);; 
end 

か、単に

logic [31:0] id_array [15]; 

std::randomize(id_array) with {unique {id_array};}; 
+0

'unique '構造体はSystemVerilog 2012でのみ利用可能です。2005バージョンを使用している場合は動作しません。 – AndresM

1

にランダム化するためのもう1つのオプション、これを変更します:あなたは十分に持っていなかった場合は

logic [31:0] id_array [$]; 
std::randomize(id_array) with { // random numbers in ascending order 
    foreach(id_array[idx]) { 
    (idx>0) -> id_array[idx] > id_array[idx-1]; 
    } 
}; 
id_array.shuffle(); // randomize order 
0

つ以上のオプションを... 。

logic [31:0] id_array [16]; 
std::randomize(id_array) with { 
    foreach (id_array[i]) 
    foreach (id_array[j]) 
     if (i!=j) 
     id_array[i] != id_array[j]; 
} 

ところで、@ TudorはSystemVerilogの配列の制約について非常にいいblogを書きました。それは間違いなく読む価値がある。

関連する問題