上期答案
如果由于超出最大时间的某些错误而导致测试无法进行,那么仿真超时机制有助于停止仿真。在UVM中,set_global_timeout(timeout)是一个便捷函数,用于将uvm_top.phase_timeout变量设置为超时值。如果run()阶段在该这个时间内之前没有结束,则仿真将停止并报告错误。
在顶层模块中调用此函数,该模块会按以下方式启动测试
module test;
initial begin
set_global_timeout(1000ns);
end
initial begin
run_test();
end
endmodule
与基于module的测试平台(所有module静态地存在于层次结构中)不同,基于类的测试平台需要管理不同对象的创建以及这些对象中各种task和function的执行。phase是基于类的测试平台中重要的概念,它具有一致的测试平台执行流程。从概念上讲,测试执行可以分为以下阶段-配置,创建测试平台组件,运行时激励和测试结束。UVM为每一个阶段中定义了标准phase。
UVM使用标准phase来排序仿真过程中发生的主要步骤。有三组阶段,按以下顺序执行。
在UVM中,所有组件(例如test,Env,Agent,Driver,Sequencer)都基于uvm_component类,并且组件始终具有层次结构。build_phase()方法是uvm_component类的一部分,用于从父组件构造所有子组件。因此,要构建测试平台层次结构,始终需要先拥有一个父对象,然后才能构造其子对象,并可以使用build_phase进一步构造其子对象。因此,build_phase()总是自顶向下执行。
例如:uvm_test类调用build_phase,构造该test的所有uvm_env组件,而每个uvm_env类的build_phase()应该构造属于该uvm_env的所有uvm_agent组件,然后继续。对于所有其他phase,调用顺序实际上并不重要。所有组件的run_phase()是并行运行的。
正确答案将在下一期公布,或者到下面的文章获取答案