UVM:2.5 建造测试用例-> 2.5.1 加入base_test

177 篇文章 139 订阅

1.前面使用过uvm_driver,uvm_env 当做树根。但在实际应用的UVM验证平台中,env 并不是树根。树根是一个基于uvm_test派生的class。base_test为例:

`ifndef BASE_TEST__SV
`define BASE_TEST__SV

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);
   `uvm_component_utils(base_test)
endclass


function void base_test::build_phase(uvm_phase phase);
   super.build_phase(phase);
   env  =  my_env::type_id::create("env", this); 
   uvm_config_db#(uvm_object_wrapper)::set(this,
                                           "env.i_agt.sqr.main_phase",
                                           "default_sequence",
                                            my_sequence::type_id::get());
endfunction

function void base_test::report_phase(uvm_phase phase);
   uvm_report_server server;
   int err_num;
   super.report_phase(phase);

   server = get_report_server();
   err_num = server.get_severity_count(UVM_ERROR);

   if (err_num != 0) begin
      $display("TEST CASE FAILED");
   end
   else begin
      $display("TEST CASE PASSED");
   end
endfunction

`endif


1)例化my_env,并且设置default_sequence。
2)report_phase根据UVM_ERROR 的数量来打印不同的信息。一些日志分析工具根据打印的信息判断DUT是否通过了某个测试用例的检查。report_phase是UVM内建的一个phase,在main_phase结束后执行。

3)还可以设置平台的超时退出时间。

4)通过config_db 设置验证平台中的某些参数的值。


2.层次结果变为:


3.top_tb中run_test参数由my_env 变为base_test;config_db的路径也要改变:

initial begin
   run_test("base_test");
end

initial begin
   uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.i_agt.drv", "vif", input_if);
   uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.i_agt.mon", "vif", input_if);
   uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.o_agt.mon", "vif", output_if);
end


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中提到,测试用例是对DUT施加的激励,也被称为测试向量或pattern。每个测试用例都是一种激励,不同的激励就是不同的测试用例测试用例的数量是衡量验证人员工作成果的最直接目标。为了保证后加的测试用例不影响已经建好的测试用例,可以在命令行中指定参数来启动不同的测试用例。在UVM中,可以通过设置UVM_TEST_NAME来指定要运行的测试用例的名字。引用\[2\]中给出了一个示例,可以通过命令行参数来启动特定的测试用例。例如,使用命令行参数+UVM_TEST_NAME=my_case1来启动名为my_case1的测试用例。 在编写UVM测试用例时,可以按照以下步骤进行: 1. 创建一个继承自uvm_test类的测试用例类。 2. 在测试用例类中重写build_phase方法,用于构建测试环境和配置各个组件。 3. 在测试用例类中重写run_phase方法,用于执行测试过程。 4. 在测试用例类中定义需要的sequence,用于生成测试向量。 5. 在测试用例类中定义需要的scoreboard,用于验证DUT的输出。 6. 在测试用例类中定义需要的coverage,用于评估测试覆盖率。 7. 在测试用例类中定义需要的reporting,用于生成测试报告。 引用\[3\]中给出了一个示例,展示了如何在UVM中设置和运行测试用例。在initial块中,使用run_test函数来启动名为"base_test"的测试用例。同时,使用uvm_config_db来设置各个组件的接口。 总结起来,编写UVM测试用例需要创建一个继承自uvm_test类的测试用例类,并在其中重写build_phase和run_phase方法,定义sequence、scoreboard、coverage和reporting等组件,以及使用uvm_config_db来设置组件的接口。可以通过命令行参数来指定要运行的测试用例的名字。 #### 引用[.reference_title] - *1* [数字IC验证:《UVM实战》笔记 - Ch2 一个简单的UVM验证平台(下) - sequence,建造测试用例](https://blog.csdn.net/Dabie_haze/article/details/119398822)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [UVM实战 卷I学习笔记4——创建测试用例](https://blog.csdn.net/weixin_41979380/article/details/120498749)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [UVM:2.5 建造测试用例-> 2.5.1 加入base_test](https://blog.csdn.net/tingtang13/article/details/46427821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值