当调用不带参数的 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