local::只表示“域”,并不指代某个句柄,所以也可以用 local::this 表示调用randomize()函数的对象句柄。
在使用内嵌约束randomize()with {CONSTRAINT}时,在约束体{CONSTRAINT}中的变量名的查找顺序默认是从被随机化对象开始查找。如果调用randomize()函数局部域中也有同名变量,那就需要使用local::来显式声明该变量来源于外部函数,而非被随机化的对象。
如下代码解释:
class mcdf
int [31:0] data = 'h0;
Transaction t,h;
//带参数传递
virtual task write_reg(bit[7:0] addr, bit[31:0] data);
t =new();
void'(t.randomize() with {data == local::data;});
//此时local::data表示任务传递进来的参数
endtask
//不带参数
virtual task send_trans();
h =new();
assert(h.randomize with {local::data >= 0 -> data == local::data;})
//此时local::data是为Mcdf::data
else $fatal("randomization failure!");
endtask
endclass
class Transaction
rand int [31:0] data;
constraint cstr {
soft data[31:6]==0;//
};
endclass
注:本文参考《内嵌约束中local::得到用法》一文