我正在写一个延伸到我的记分牌的检查器。 为此,我试图用我的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
感谢您的帮助
答案 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
来电。