关于SV的一些知识3

在这里,我们首先讲一下类和对象。这就不得不提SV的重要特性:面向对象编程的三要素---封装,继承和多态。那么验证为什么会需要面向对象编程呢?这是因为验证环境下,不同组件其功能和要处理的数据内容是不相同的,但是不同环境下,同一类型的组件其具备的功能和数据内容是相似的,基于以上两点,验证世界的各个组件角色明确,功能分立,使用面向对象编程域验证世界的构建原则很符合。

这里要注意一点,verilog的例化和class的例化有一些差别:

①两者都可以使用相同的模板来创建内存实例。

②不同点在于verilog的例化是静态的,即只有在编译链接时才完成,但是SV class的例化时动态的,可以在任意时间点完成

③在verilog中没有句柄的概念,只能通过层次化的索引方式,但是在sv中可以通过句柄将对象的指针赋予给其他句柄使得操作更加灵活。

 接下来讲下句柄的传递,我们要注意,在创建完了对象之后,此对象的空间位置不会发生改变,但是指向该空间的句柄可以有多个。

接下来讲一讲类的成员,要注意,类是成员变量和成员方法的在他,他天生具备闭合的属性,即他会将其属性和方法封装到内部,不会直接暴露在外部,我们可以通过protected和local等关键词来设置外部访问权限。

①如果没有指明访问类型,成员的默认类型是public,子类和外部均可以访问成员。

②如果是protected,就只有子类和该类可以访问成员,外部不可以访问。

③如果是local,就只有高类可以访问,子类和外部都不能访问。

接下来看一下类和module的区别:

①从数据和定义方法来看,两这都可以作为封闭的容器来定义和储存。

②module必须在仿真一开始就决定是否应该被例化,而类可以在仿真的任何阶段进行例化,这是因为module是硬件世界,硬件必须在仿真一开始就确定下来,而类是软件,可以在仿真任何阶段例化并创建出新的对象。

③从封装性来看,模块的变量和方法是对外部公开的,但是类可以通过自己声明来确定外部是否能进行访问。

④从继承性来看,模块没有继承性可言,类具有继承性。

讲到继承,就不得不提什么是继承,类的继承包括了继承父类的成员变量和成员方法。要注意,子类的实例对象子啊初始化时首先会调用父类的构造函数。

还有一点非常重要,子类指定对象后,可以访问到父类,子类中的所有变量,但是优先访问子类的,但是如果将子类的句柄赋值给父类的话,父类只能访问子类继承父类的那一部分。

最后,我们总结一下类的三要素:

①封装:通过将一些数据和使用这些数据的方法封装早一个盒子里面,成为1个类。

②继承:允许通过现有类去得到一个新类,并且这个新类可以共享现有类的属性和方法,现有类时基类,新类时扩展类。

③多态:在得到扩展类之后,我们会享用基类句柄去调用扩展类的对象,这是可以对类重方法进行virtual声明,当调用基类句柄指向扩展类的时候,方法会根据对象去识别,扩展类中的方法,而不是基类中的,虽然扩展类和基类厚葬的方法同名,但是也可以准确调用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值