在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3593|回复: 4

[求助] UVM中 的task或function 什么时候在前面添加virtual 、extern virtual 、 extern protected区别是什么?

[复制链接]
发表于 2021-6-11 18:23:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 周志鹏 于 2021-6-11 18:25 编辑

untitled1.png untitled2.png

上图红色部分 function前面添加了extern virtual ;然后在下面function void my_agent :: build (uvm_phase phase)、function void my_agent :: connect_phase (uvm_phase phase)中定义时function前面就没有添加extern virtual。

而有的时候task或function前面又会添加extern protected 如下图:
untitled3.png

task或function前面到底什么时候添加virtual 、什么时候添加extern virtual 或者 extern protected ?  请大家不吝赐教。。
 楼主| 发表于 2021-6-11 18:26:40 | 显示全部楼层
我记得在sequence中的task body经常定义为virtual类型的, 同样不知道为什么要这样做,谢谢大家看到后回复。
发表于 2021-6-11 21:44:29 | 显示全部楼层
virutal是虚方法吧,用extern是为了把方法的主体写在类外边吧,protected是表示该变量或方法只有当前类或者其子类可以访问
发表于 2021-6-12 15:52:30 | 显示全部楼层
1.你可以用virtual来定义一个虚方法,通常我们会在类的继承中使用到。我们通常希望子类也能够继承父类中的方法,用virtual在父类中定义了一个方法后,当子类调用某task/function时,会先查找在子类中是否定义了该 task/function,如果子类没有定义,则在父类中查找。如果没有定义virtual,那么久只在子类中查找,如果子类中没有定义则编译器就会直接报错而不会去父类查找。

2.你可以用extern将方法在类中声明,但把方法的实体写在类的外部,并且写在外部的方法需要用ABC::my_method来指明my_method方法是属于ABC类的。值得注意的是,如果你的方法是虚方法并且用到了extern的写法,那么只需要在extern中写上virtual,在外部的方法实体名中不能够写virtual了。

3.protect和local对是我们限制方法使用域的手段,protect关键字表示变量和方法只能在当前类或者其子类被访问到,而local就更加苛刻了,只允许在当前类的访问。
 楼主| 发表于 2021-6-15 08:15:31 | 显示全部楼层


芯际老男孩 发表于 2021-6-12 15:52
1.你可以用virtual来定义一个虚方法,通常我们会在类的继承中使用到。我们通常希望子类也能够继承父类中的 ...


谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 01:16 , Processed in 0.020451 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表