首页 > 解决方案 > 如何使随机重做直到得到我想要的数字?

问题描述

下面是随机重置的基本序列类:

class random_reset;
   rand int rst_period;

   constraint  rst_range { rst_period inside {[1:100]}; }

   task random_system_reset (
                 ref reg rst,
                 ref reg clk);
      begin
     rst = 1;
     repeat (rst_period) @(posedge clk);
     rst = 0;
      end
   endtask

endclass

但是,我测试至少需要 6 个时钟。无论如何要确保当我调用这个类时,会得到大于 6 的随机值吗?

标签: system-verilog

解决方案


假设您想保持原来的约束,但在某些情况下,您需要强制将周期设置为 6 或更多,您可以使用randomize() with

random_reset rr = new();

initial rr.randomize() with { rst_period >= 6; };

对于此rr对象,rst_period将介于 6 到 100 之间。

请参阅 IEEE Std 1800-2017,第 18.7 节内嵌约束—randomize() with


推荐阅读