欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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)的异同

SV---类的成员

3.类和模块(module)的异同

1)从数据和方法定义而言,二者均可作为封闭的容器来定义和存储。

2)从例化来看,module(默认是静态)在仿真还没运行就被确定了,而class(默认是动态)是在仿真开始之后的任意时间被创建的。

3)从封装性来看:class具有封装性可以保护变量,而module没有封装性,无法保护变量。

4)从继承性来看:class具有集成性,class之间可以发生集成关系,而module没有继承性。

4.其他

SV---类的成员

相关标签: SV