首页 > 其他分享 >randomize( ) with Arguments

randomize( ) with Arguments

时间:2022-08-28 22:47:20浏览次数:45  
标签:rand begin end sf Arguments randomize display

当调用不带参数的 randomize() 方法时,它会为对象中的所有随机变量(声明为 rand 或 randc)分配新值,满足所有约束。当使用参数调用 randomize() 时,这些参数指定该对象内的随机变量。看个示例:

// Code your testbench here
// or browse Examples
class sft;
  rand bit [3:0] a,b;
  bit [3:0] c,d;
  constraint a_range1 { a <= 'h4; }
  constraint b_range1 { b > 'ha; }
endclass

module soft_constr;

initial begin
    sft sf;
    sf = new( );
    repeat (2) begin
//randomize all rand variables in 'sf' – but only a, b will be
//randomized since c, d are not 'rand'
      sf.randomize( );
      $display("randomize a, b : a=%h b=%h c=%h d=%h",sf.a, sf.b, sf.c, sf.d);
    end
    repeat (2) begin
// randomize only non-rand variables 'c' and 'd'
// a, b, will not be randomized
      sf.randomize(c, d);
      $display("randomize c, d : a=%h b=%h c=%h d=%h",sf.a, sf.b, sf.c, sf.d);
    end
    repeat (2) begin
      sf.randomize(a); //randomize only rand variable 'a' .
                       // b, c, d will not be randomized
      $display("randomize a : a=%h b=%h c=%h d=%h",sf.a,  sf.b, sf.c, sf.d);
     end
    repeat (2) begin
      sf.randomize(b); //randomize only rand variable 'b'
                                       // a, c, d will not be randomized
      $display("randomize b : a=%h b=%h c=%h d=%h",sf.a, sf.b, sf.c, sf.d);
    end
    repeat (2) begin
      sf.randomize(c); //randomize only non-rand variable 'c'
                                       /// a, b, d will not be randomized
$display("randomize c : a=%h b=%h c=%h d=%h",sf.a, sf.b, sf.c, sf.d);
    end
    repeat (2) begin
      sf.randomize(d); //randomize only non-rand variable 'd'
                                       // a , b, c will not be randomized
      $display("randomize d : a=%h b=%h c=%h d=%h",sf.a, sf.b, sf.c, sf.d);
    end
    if (sf.randomize(null) == 1);
    $display("randomize(null): a=%h b=%h c=%h d=%h",sf.a, sf.b, sf.c, sf.d);
  end
endmodule

仿真结果:

Compiler version S-2021.09; Runtime version S-2021.09;  Aug 28 10:11 2022
randomize a, b : a=1 b=f c=0 d=0
randomize a, b : a=4 b=c c=0 d=0
randomize c, d : a=4 b=c c=a d=6
randomize c, d : a=4 b=c c=7 d=2
randomize a : a=3 b=c c=7 d=2
randomize a : a=4 b=c c=7 d=2
randomize b : a=4 b=d c=7 d=2
randomize b : a=4 b=f c=7 d=2
randomize c : a=4 b=f c=0 d=2
randomize c : a=4 b=f c=9 d=2
randomize d : a=4 b=f c=9 d=5
randomize d : a=4 b=f c=9 d=0
randomize(null): a=4 b=f c=9 d=0
           V C S   S i m u l a t i o n   R e p o r t 

注意最后一个,可以调用 randomize (null)。这样的调用接受特殊参数 null 以指示类中不存在随机变量。换句话说,所有类成员都表现为非随机状态变量。这导致 randomize() 方法充当检查器而不是生成器。检查器评估所有约束,如果满足所有约束,则返回 1,否则返回 0。

 

标签:rand,begin,end,sf,Arguments,randomize,display
From: https://www.cnblogs.com/fuqiangblog/p/16634287.html

相关文章