System verilog 随机化期间Systemverilog唯一数组值
我有一个变量逻辑[31:0]id,它没有声明为rand或randc。我每次都需要不同的id进入一个数组逻辑[31:0]id_数组[16] 在上面的代码中,可能会在数组中获得重复的ID。如何更改代码以获取阵列中的唯一ID?我将此更改为System verilog 随机化期间Systemverilog唯一数组值,system-verilog,System Verilog,我有一个变量逻辑[31:0]id,它没有声明为rand或randc。我每次都需要不同的id进入一个数组逻辑[31:0]id_数组[16] 在上面的代码中,可能会在数组中获得重复的ID。如何更改代码以获取阵列中的唯一ID?我将此更改为 logic [31:0] id; logic [31:0] id_array [$]; repeat (16) begin std::randomize(id) with {!(id inside {id_array});}; id_array.push_b
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};};
随机化的另一个选择:
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
如果你还不够的话,还有一个选择
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数组约束的非常好的文章。它绝对值得一读。请记住,这个独特的构造只在SystemVerilog 2012中可用。如果您使用的是2005版本,那么它将无法工作。
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];
}