我想在uvm_component中捕获$ finish。我的意思是,在调用$ finish时,我的uvm_component需要执行一些自定义代码。
我曾在uvm_component中使用pre_abort回调。但是问题是我的测试台有多个uvm_components,它们还注册了pre_abort回调。
我想确保我的自定义代码应在模拟退出之前最后执行。
在Verilog中,“捕获” $finish
的唯一方法是使用final
块。以下示例说明了可能的解决方案。
package TB;
class WorkHorse;
function void start;
$display("I am statging");
endfunction
task finish;
$display("finishing");
$finish;
endtask
function void done ;
$display("I am done");
endfunction
endclass
endpackage
program tb;
TB::WorkHorse wh = new;
initial begin
#2 wh.start;
#2 wh.finish;
end
final begin
wh.done;
end
endprogram