如果我有一个固定大小的数组,我该如何写一个约束,使随机化后数组的每个多位元素都是奇数
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
将强制数字为正数。
我需要在对 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
将强制数字为正数。