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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3659|回复: 8

[求助] 关于uvm中factory重载机制的问题

[复制链接]
发表于 2017-6-23 14:20:32 | 显示全部楼层 |阅读模式

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

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

x
有一个 monitor类 和 driver类我在test_case.sv中:把monitor重载成new_monitor  增加一个blocking_port  a_port;
                         把driver重载成new_driver        增加一个analysis_port  b_port;

                         在testcase class中的build_phase中通过 set_type_overwrite_by_type重载driver和monitor。
                         在env中通过created实例化为driver_h   monitor_h

此时我是实例化的driver_h和monitor_h应该是new_monitor 和new_driver类型,应该是具备a_port和b_port的
但是我在test_case的connect phase进行connect时提示找不到这俩port!!!

我通过print_topolpgy函数打印整个拓扑图时,发现driver_h和monitor_h中有这俩port!!!为什么有我在connect的时候会告诉我没有!!!!
 楼主| 发表于 2017-6-23 14:21:11 | 显示全部楼层
补充一句:错误是在编译时爆出的!
发表于 2017-6-23 14:35:31 | 显示全部楼层
没明白,你都编译错误了,居然还能打印拓扑
 楼主| 发表于 2017-6-23 15:02:25 | 显示全部楼层
回复 3# qyxu1979


   打印拓扑是把connect屏蔽掉打印的
发表于 2017-6-23 17:05:00 | 显示全部楼层
以monitor为例,在create的时候是new了一个new_monitor的对象,但是你的handle仍然是monitor的,也就是说一个父类的handle指向了子类,oop里的是根据type进行区分,因此会出现此类编译错误,这也是为什么oop大多采用access function进行重载
解决方法:
使用access function进行connect操作
 楼主| 发表于 2017-6-23 17:19:10 | 显示全部楼层
回复 5# shaoqingtju

我后来想了一下,重载是不是只能把原有的东西重写,如果新增属性是不是就属于派生了呀!
我对你说的access function 方式重载不太清楚,不知道有没有相关资料贴一下呢。
发表于 2017-6-23 18:23:35 | 显示全部楼层
举个例子,为什么你可以在print_topology里面看到新增的port,是因为最终调用的是每个对象的print() function,而当你override之后,虽然你的monitor的type是原来的type即(monitor),但是handle指向子类new_monitor的内存空间,因此你调用print就是new monitor的print,同理,要想实现你说的功能,可以在父类里面定义一个空函数:
function connect_with_driver(analysis_port  b_port);
return;
endfunction
然后在new monitor中重载这个函数:
function connect_with_driver(analysis_port  b_port);
this.a_port.connect(b_port);
endfunction

在test case的connect phase里面这样定义:
mon.connect_with_driver(driver.b_port);

这样你override时就不会有问题了
 楼主| 发表于 2017-6-26 14:22:39 | 显示全部楼层
回复 7# shaoqingtju
嗯,只要重载的类中不要出现新的变量就不会有问题。
发表于 2017-6-29 10:39:53 | 显示全部楼层
override是run time起效果的,你在compile就要用到新的port肯定会报错的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-9-22 04:03 , Processed in 0.018927 second(s), 7 queries , Gzip On, Redis On.

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