在randomizatoin期间Systemverilog唯一的数组值

时间:2016-07-13 19:42:53

标签: system-verilog

我的变量if (condition1) statement1 else if (condition2) statement2 else if (condition3) ... 未声明为logic [31:0] idrand。每次我需要不同的ID到数组randc

logic [31:0] id_array [16]

在上面的代码中,有可能在数组中获得重复的id。如何更改代码以获取阵列中的唯一ID?

3 个答案:

答案 0 :(得分: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};};

答案 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

答案 2 :(得分: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];
}
BTW,@ Tudor在SystemVerilog数组约束上写了一个非常好的blog。这绝对值得一读。