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 或工具。
如果我想从我的显示器上结束模拟(我知道这不是推荐的方式)我该怎么做? 假设我在我的显示器中得到了这段代码:
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 或工具。