uvm - 覆盖扩展类中的虚拟任务

时间:2017-05-22 04:51:18

标签: polymorphism virtual uvm

我正在写一个延伸到我的记分牌的检查器。 为此,我试图用我的checker类中定义的新任务覆盖parser_pkt任务。这个任务被调用到我的uvm run_phase中。但是,尽管我添加了"虚拟"对于我的每个任务,我使用了相同的任务签名,我使用super来运行run_phase,这不起作用。当我将打印添加到我的两个任务时,代码正在运行在记分板类中定义的parser_pkt任务。 为什么我做错了?

class my_scoreboard_c extends uvm_component;
`uvm_component_utils(my_scoreboard_c)

extern virtual task run_phase(uvm_phase phase);
extern virtual task parser_pkt(int a);
endclass

task my_scoreboard_c::run_phase(uvm_phase);
parser_pkt(3);
endtask

task my_scoreboard_c::parser_pkt(int a);
endtask

关注我的检查课:

class my_checker_c extends my_scoreboard_c;
`uvm_component_utils(my_checker_c)

task run_phase(uvm_phase);
super.run_phase(phase);
endtask

task parser_pkt(int a);
endtask 
endclass

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

让我们从基础开始,继续努力。

您确定要实例化my_checker_c对象吗?您可以在某处添加$display("%p", this)(例如在run_phase(...)的开头添加{。}}。

答案 1 :(得分:0)

将此代码添加到run_phase类的my_checker_c中:

task run_phase(uvm_phase);
  `uvm_info( get_name(), "YOU SHOULD SEE THIS MESSAGE", UVM_NONE )
  super.run_phase(phase);
  `uvm_info( get_name(), "YOU SHOULD NOT SEE THIS MESSAGE", UVM_NONE )
endtask

基类run_phase何时完成执行?从本质上讲,您允许基类的run_phase任务接管。在删除所有异议(或发生超时)之前,UVM' run_phase将无法完成。所以你从来没有真正允许你的扩展课程#39; run_phase在模拟中运行。因此,解决方案是从super.run_phase组件的run_phase中移除my_checker_c来电。