SV中遇到同名变量需要索引时,可以对变量名加上前缀来区分,如super,this和local;
如果不加前缀,SV会自动采用就近原则,索引到最近的对象变量。
基本定义
1. this和super
this和super一般对应,用来区分子类与父类的同名变量:
this.name一般指向当前类的成员变量,super.name则指向父类的成员变量。
2. local和protected
(1)local就是本地变量,local声明的变量只能在本类中使用,子类以及外部类中不可调用。
(2)protected比local限制少一些,protected声明的变量能在本类以及子类中使用,外部类中不可调用。
3. this和local
除了在声明成员变量时,在使用内嵌约束进行随机化时也会需要使用local关键字:
class chnl_generator;
rand int [31:0] data;
task send_trans(output data);
chnl_trans req, rsp; // chnl_trans中也有data变量。
req = new();
void`(req.randomize() with {data == local::data;}) // local::data索引到的是形参data, 而不带前缀的data按就近原则索引到req中的data. 若send_trans() 方法中没有参数传递,则local::data索引到的是当前类的变量——rand data
endtask
endclass