System Verilog的内嵌约束和指定参数随机
1、内嵌约束randomize() with{}
使用内嵌约束randomize() with{},用户可以在调用randomize()方法的地方添加新的约束,这样可以避免频发修改类里的约束。添加的内嵌约束和类里的约束是等效,需要避免内嵌约束和类里的约束发生冲突,导致randomize()失败。
class buspkt;
rand bit[31:0] addr,data;
rand bit[4:0] len;
constrain addr_c{
addr inside {[20:80],[100:200]}
}
endclass
buspkt bpt;
initial begin
bpt=new();
assert(bpt.randomize() with {addr > 50;addr<150;data inside {[20:50]}});
$display("addr = %0h,data = %0h",addr,data);
//addr 范围在50-80,100-150,data范围在20-50
assert(bpt.randomize() with {addr == 40;data <20});
//addr取值为40,data取值范围0-19
end
内嵌约束和类里约束不能冲突,冲突会导致randomize()失败,冲突实例如下:
class buspkt;
rand bit[31:0] addr,data;
rand bit[4:0] len;
constrain addr_c{
addr inside {[20:80],[100:200]}
}
endclass
buspkt bpt;
initial begin
bpt=new();
assert