如何在系统verilog中实现被4和10约束整除?
How to implement divisible by both 4 and 10 constraint in system verilog?
我正在学习 SystemVerilog 约束概念。作为其中的一部分,我希望有一个约束来随机化可被 4 和 10 整除的 div
变量。这是我试过的代码。我正在显示为“0”。谁能帮我解决我在这里缺少的东西?
class div_4_10;
rand bit [3:0] div;
constraint constr_4_10 { div % 20 == 0; }
endclass
module div_cons;
div_4_10 divisible;
initial begin
divisible = new();
for (int i = 0; i <5; i++) begin
divisible.randomize();
$display("Divisible by 4 and 10 : %0d", divisible.div);
end
end
endmodule
您声明 div
为 4 位。这意味着它的值范围从 0 到 15。满足约束的唯一值是 0。这就是为什么每次调用 randomize
.
时代码总是设置 div=0
您需要扩大射程。例如,如果您更改:
rand bit [3:0] div;
至:
rand bit [7:0] div;
那么你应该得到div
的不同值。新范围是 8 位(0 到 255)。这是我得到的:
Divisible by 4 and 10 : 100
Divisible by 4 and 10 : 60
Divisible by 4 and 10 : 240
Divisible by 4 and 10 : 60
Divisible by 4 and 10 : 20
我正在学习 SystemVerilog 约束概念。作为其中的一部分,我希望有一个约束来随机化可被 4 和 10 整除的 div
变量。这是我试过的代码。我正在显示为“0”。谁能帮我解决我在这里缺少的东西?
class div_4_10;
rand bit [3:0] div;
constraint constr_4_10 { div % 20 == 0; }
endclass
module div_cons;
div_4_10 divisible;
initial begin
divisible = new();
for (int i = 0; i <5; i++) begin
divisible.randomize();
$display("Divisible by 4 and 10 : %0d", divisible.div);
end
end
endmodule
您声明 div
为 4 位。这意味着它的值范围从 0 到 15。满足约束的唯一值是 0。这就是为什么每次调用 randomize
.
div=0
您需要扩大射程。例如,如果您更改:
rand bit [3:0] div;
至:
rand bit [7:0] div;
那么你应该得到div
的不同值。新范围是 8 位(0 到 255)。这是我得到的:
Divisible by 4 and 10 : 100
Divisible by 4 and 10 : 60
Divisible by 4 and 10 : 240
Divisible by 4 and 10 : 60
Divisible by 4 and 10 : 20