【问题标题】:How to implement divisible by both 4 and 10 constraint in system verilog?如何在系统 verilog 中实现被 4 和 10 约束整除?
【发布时间】:2021-08-02 06:51:01
【问题描述】:

我正在学习 SystemVerilog 约束概念。作为其中的一部分,我希望有一个约束来随机化div 变量,该变量可以被 4 和 10 整除。这是我尝试过的代码。我将显示为“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

【问题讨论】:

    标签: constraints system-verilog


    【解决方案1】:

    您将 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多