如何在系统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