如果我有一个固定大小的数组,我该如何写一个约束,使随机化后数组的每个多位元素都是奇数

If I have a fixed size array , how do I write a constraint so that each multi-bit element of the array after randomization is an odd number

我需要在对 UVM 序列中的数组元素进行随机化后生成奇数。

假设您有以下 class 和一个数组变量:

class some_class;

  rand int array[10];

endclass

如果要约束数组的每个元素,可以使用foreach 构造。要获得数组中的所有偶数,您可以将数组的每个元素限制为奇数。如果除以 2 的余数不是 0:

,则数字为奇数
class some_class;

  // ...

  constraint all_array_elems_odd {
    foreach (array[i])
      array[i] % 2 != 0;
  }

endclass

您可以检查它是否适用于以下示例:

module test;

  initial begin
    automatic some_class obj = new();
    if (!obj.randomize())
      $fatal(0, "Randomization error");
    $display("%p", obj);
  end

endmodule

请注意,我没有将除法的余数与 1 进行比较。这是因为某些编程语言(包括 SystemVerilog)使用 % 进行余数运算而不是模数运算。余数可以为负(而模数始终为正)。负奇数将有 -1 的余数,因此强制余数为 1 将强制数字为正数。