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;
		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没有继承性。

4.其他

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值