admin 管理员组

文章数量: 887021

SV

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;elsereturn this.nclock + 1;endfunctionfunction bit set_summer (bit s);this.is_summer = s;endfunction
endclassclock ck;
initial beginck = 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没有继承性。

4.其他

本文标签: SV