【问题标题】:How to generate a random value multiple of 10 within a range?如何在一个范围内生成10的随机值倍数?
【发布时间】:2022-01-22 18:32:50
【问题描述】:

我需要在一个范围内生成一个10的随机值倍数。

我使用了$urandom_range(maxVal,minVal),它会在一个范围内生成一个随机值,但我需要该值是 10 的倍数。 我该怎么做?

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    伪代码:

    $urandom_range(maxVal / 10,minVal / 10) * 10
    

    【讨论】:

      【解决方案2】:

      使用约束。例如,要生成 31 到 162 之间的数字,它们是 10 的倍数:

      module tb;
      
      int unsigned foo;
      
      initial begin
          repeat (8) begin
              std::randomize(foo) with {
                  foo inside {[31:162]}; // min:max
                  (foo % 10) == 0;       // multiples of 10
              };
              $display(foo);
          end
      end
      
      endmodule
      

      示例打印输出:

         110
          70
         160
          90
         160
          70
          60
         130
      

      请参阅 IEEE Std 1800-2017,第 18 节。约束随机值生成

      $urandom_range 非常适合简单的条件,但随着您添加更多条件,它可能会变得很麻烦。约束可以很好地扩展,因为您可以不断为每个条件添加新的约束。

      【讨论】:

        猜你喜欢
        • 2010-11-26
        • 2018-04-08
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        • 2011-08-02
        • 2019-10-30
        • 1970-01-01
        • 2014-01-29
        相关资源
        最近更新 更多