SV---类的成员
程序员文章站
2022-05-07 20:12:56
...
1.类的封装
1)如果没有指明访问类型,那么成员的默认类型是public,子类和外部据可以访问成员。
2)如果指明是protected,那么只有该类或者子类可以访问成员,而外部无法访问。
3)如果指明是local,那么只有该类可以访问成,子类和外部均无法访问。
例题
代码中ck.get_clock和ck.nclock数值分别是多少?
class clock;
local bit is_summer = 0;
local int nclock = 6;
function int get_clock();
if(is_summer == 0)
return this.nclock;
else
return this.nclock + 1;
endfunction
function bit set_summer (bit s);
this.is_summer = s;
endfunction
endclass
clock ck;
initial begin
ck = new();
$display("now time is %0d",ck.get_clock());
ck.set_summer(1);
$display("now time is %0d",ck.nclock);
end
解析:
计算ck.get_clock时,is_summer的值为0,所以第一个function中执行return this.nclock,即ck.get_clock = nclock = 6.
计算ck.nclock时,is_summer被赋值为1,所以执行return this.nclock + 1,结果为7,但因为nclock定义时是local类型,子类无权访问nclock的数值,所以会报错。
结论:ck.get_clock = 6,ck.nclock无法计算。
2.类和结构体(struct)的异同
3.类和模块(module)的异同
1)从数据和方法定义而言,二者均可作为封闭的容器来定义和存储。
2)从例化来看,module(默认是静态)在仿真还没运行就被确定了,而class(默认是动态)是在仿真开始之后的任意时间被创建的。
3)从封装性来看:class具有封装性可以保护变量,而module没有封装性,无法保护变量。
4)从继承性来看:class具有集成性,class之间可以发生集成关系,而module没有继承性。