在使用内嵌约束randomize()with {CONSTRAINT}时,约束体中的变量名的查找顺序默认是从被随机化对象开始查找,
但如果调用randomize()函数局部域中也有同名变量,那就需要使用local::来显式声明该变量来源于外部函数,而非被随机化的对象(在约束中也可用this/super来索引这些变量)
具体代码示例如下:
class chnl_generator;
rand int pkt_id = -1;
rand int ch_id = -1;
rand int data_nidles = -1;
rand int pkt_nidles = -1;
rand int data_size = -1;
rand int ntrans = 10;
constraint cstr{
soft ch_id == -1;
soft pkt_id == -1
soft data_size == -1;
soft data_nidles == -1;
soft pkt_nidles == -1;
soft ntrans == 10;
task send_trans();
chnl_trans req, rsp;
req = new();
assert(req.randomize with {local::ch_id >= 0 -> ch_id == local::ch_id; //此处local::id指来自chnl_generator的ch_id
local::pkt_id >= 0 -> pkt_id == local::pkt_id;
local::data_nidles >= 0 -> data_nidles == local::data_nidles;
local::pkt_nidles >= 0 -> pkt_nidles == local::pkt_nidles;
local::data_size >0 -> data.size() == local::data_size;
})
endtask
endclass
本文参考链接如下:
https://blog.csdn.net/lbt_dvshare/article/details/107280692