Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 随机化期间Systemverilog唯一数组值_System Verilog - Fatal编程技术网

System verilog 随机化期间Systemverilog唯一数组值

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

我有一个变量逻辑[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_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];
}