篇2-uvm tb的运转&run_test
参考资料:
(1) uvm中run_test | 骏的世界 (lujun.org.cn)
(2) 从run_test浅谈Test Bench的启动 (qq.com)
1. run_test
(1) run_test是uvm_globals.svh中定义的一个task,用于启动UVM.
2. 调用uvm_root.run_test
(1)在run_test内,会先获取uvm_root的实例,然后调用其run_test函数,传入test_name的名字.
3. class uvm_coreservice_t
4. uvm_root
5.uvm_root.run_test
(1) 初始化objection;
(2) 设置testcase的name,从cmdline获取+UVM_TESTNAME参数.如果有,将来使用第一个参数设置的值.如果cmdline没有设置UVM_TESTNAME,使用传入的testname.
(3) 根据test_name,调用工厂函数create_component_by_name,创建testcase的实例,并且赋值给uvm_test_top,因此对于UVM环境,顶层的testcase将来都会变成uvm_test_top;
(4) m_children是uvm_component中内建的变量,保存该类包含哪些子类;当一个子类,通过UVM的工厂机制创建类实例后,会往其父类的m_children中加入该类对象;而testcase的父类就是uvm_root,因testcase被工厂机制创建实例之后,会将往uvm_root的m_children中加入该testcase的类对象,此时m_children的个数就不为0。
(5) 判断创建的实例是否成功;
(6) 通过process类,保存进程号,启动uvm phase。此处用fork join_none,父进程就不必等子进程结束,就可以退出。#0,父进程休眠,其他进程得到调度,使其他phase的runner得到运行。
(7) 最后等待uvm的phase结束.结束之后.将创建的所有子进程杀掉.调用report.打印(l_rs.report_summarize,格式可以见仿真log末尾部分).最后调用$finish结束仿真。