base_test所做的事情因公司而异,常见的使用如下:
(1) 实例化top-level env(top_tb主要的作用是实例化平台和设计,就是把他俩包起来
,若没有base_tb顶层的env就没有例化);
(2) 通过config_db设置验证平台中某些参数的值,或使用factory override机制配置环境;
(3) 通过调用UVM sequences施加激励;
(4) 在report_phase根据UVM_ERROR的数量打印不同信息;
注1:注意uvm_report_server的使用;
(5) 设置整个验证平台的超时退出时间;
通常,只有一个uvm_base_test,在其中实现env以及其他组件的例化; 其他tests均派生于base_test;
class base_test extends uvm_test;
my_env env;
function new(string name="base_test", uvm_component parent=null);
super.new(name,parent);
endfunction
extern virtual function void build_phase(uvm_phase phase);
extern virtual function void report_phase(uvm_phase phase);
endclass
function void base_test::build_phase(uvm_phase phase);
super.build_phase(phase);
env=my_env::type_id::create("env",this); //实例化env
uvm_config_db#uvm_object_wrapper)::set(this,"env.i_agt.sqr.main_phase","default_sequence",my_sequence::type_id::get()); // 启动sequence
endfunction
function void base_test::report_phase(uvm_phase phase); //report_phase根据错误打印消息
uvm_report_server server;
int err_num;
super.report_phase(phase);
server=get_report_server(); //uvm_report_server srvr; srvr=uvm_report_server::get_server();
err_num=server.get_severity_count(UVM_ERROR);
if(err_num!=0) begin //通常不这么使用,而是使用UVM_MAX_QUIT_COUNT,一旦由多少个错误,就退出仿真;
$display("TEST CASE FAILED!");
end
else begin
$display("TEST CASE PASSED!");
end
endfunction