UVM测试结束

UVM end of test

如果我想从我的显示器上结束模拟(我知道这不是推荐的方式)我该怎么做? 假设我在我的显示器中得到了这段代码:

Virtual task monitor_run();

fork

forever begin
.....
end

forever begin
.....
end

forever begin
.....
end

join

endtask : monitor_run

每个永远的循环检查 DUT 的输出是否准时出现,以防它们不应该停止模拟。 如果不匹配(错误)并且没有记分牌,这个特殊监视器应该中断模拟。 我仍然想管理好模拟行为的结束。我尝试使用 raise 和 drop objection,但有时会收到 OBJT_ZERO 错误。在这种情况下,有谁知道结束模拟的好方法吗? 谢谢!

默认设置 UVM,以便 uvm_report_fatal 立即结束测试,uvm_report_error 让模拟继续,直到达到您可以设置的错误限制。您可以控制单个组件的每个严重性的操作。请参阅 uvm_report_object,它是 uvm_component 的基础 class。

测试结束后,UVM 调用 uvm_report_server::report_summarize() 转储所有严重性计数。如果你坚持,你可以在你的测试台模块中创建一个 final 块,它从报告服务器收集严重性计数并打印最后一条消息。例如:

module top;
  initial run_test();


  uvm_report_server rs = uvm_report_server::get_server();

  final if (rs.get_severity_count(UVM_FATAL) != 0 ||
            rs.get_severity_count(UVM_ERROR) !=0 )
            $display("Test Failed");

endmodule

但这确实是不必要的,并且可能无法捕获其他非 UVM 错误,例如断言失败或时序检查。许多工具都有一个 TESTSTATUS 退出代码,用于报告最严重的消息遭遇、UVM 或工具。