如何随机重做直到得到我想要的数字?

How to make randomize redo until get the number I want?

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

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个时钟。无论如何要确保当我调用这个 class 时,会得到大于 6 的随机值吗?

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

random_reset rr = new();

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

对于这个 rr 对象,rst_period 将介于 6 和 100 之间。

请参阅 IEEE 标准 1800-2017,第 18.7 节内联约束—randomize() with.