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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2486|回复: 7

[求助] override 求助

[复制链接]
发表于 2016-11-9 20:46:49 | 显示全部楼层 |阅读模式

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

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

x
定义了一个pkg(要发送的包);然后扩展了pkg_ex;

能不能在testcase里用override,

因为这个包在两个driver里用到,
如果我只想替换某个driver的包,该怎么替换???
 楼主| 发表于 2016-11-10 16:15:41 | 显示全部楼层
class testcase1 extends base_test;

....

virtual function vlid build_phase(uvm_phase phase);
  super.build_phase(phase);
  tx_sequ=tx_sequence::type_id::create.....;
  set_inst_override_by_type("tx_sequ.tx_pkg",pkg::get_type(),pkg_ex::get_type());
endfunction
....
endclass


class tx_sequence extends uvm_sequence #(pkg);
....
pkg tx_pkg;

virtual task body();
  `uvm_do(tx_pkg)
endtask
....
endclass

这么改没起作用
 楼主| 发表于 2016-11-10 18:03:06 | 显示全部楼层
????????
发表于 2016-11-10 20:27:31 | 显示全部楼层
只能override component吧
 楼主| 发表于 2016-11-10 21:06:58 | 显示全部楼层
class tx_case_1 extends base_test;
...

...build_phase(uvm_phase phase);  tx_sequ=tx_sequence::type_id::create.....;

  set_inst_override_by_type("tx_sequ.tx_pkg",pkg::get_type(),pkg_ex::get_type());
endfunction
  
endtask
...
endclass

class tx_sequence extends uvm_sequence #(pkg);
  pkg tx_pkg;
...
  virtual task body();
    `uvm_do(tx_pkg);
  endtask
...
endclass

这样override不起作用,应该在哪override???
发表于 2016-11-11 10:32:13 | 显示全部楼层
1. 注册到factory中(uvm_object/component_utils())
2. 使用factory机制即代理类type_id::create()方式实例化,而不是new()的方式。
3. 重载类与被重载类是派生关系,或有多重重载时,最终重载类与最初被重载类是派生关系。
4. component与object不能互相重载。

确认一下一上几条是否满足了?
 楼主| 发表于 2016-11-11 11:14:11 | 显示全部楼层
回复 6# gyuek

谢谢!
用set_type_override_by_type(pkg::get_type(),pkg_ex::get_type());
这样可以override

但是set_inst_override_by_type("tx_sequ.tx_pkg",pkg::get_type(),pkg_ex::get_type());这样不行,
是不是因为tx_sequ和override在同一个build-phase里???
发表于 2016-11-16 16:30:30 | 显示全部楼层
回复 7# dyytx

因为你使用的是uvm_do这个macro,而这个macro包含的uvm_create macro是使用的是create_by_type,因此只能使用set_type_override,如果你想用set_inst_override,则要这样,首先set_inst_override第一个参数填写sequencer的hier,同时不可以使用uvm_do,而必须把uvm_do进行分步使用,也就是第一步:tr = ...::type_id::create("name",get_sequencer());
第二步:uvm_send(tr)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-9-22 00:57 , Processed in 0.021665 second(s), 7 queries , Gzip On, Redis On.

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