本文章旨在学习总结备份、便于日后查询;内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
原文连接:https://zhuanlan.zhihu.com/p/421277486
一、简介
Phase”是UVM主要的特性之一,其目的是为了统一testbench执行流程。UVM中的phase主要分为3类,即按顺序执行build phase、run-time phase和clean up phase。
- Build phases-构建和配置testbench;
- Run-time phases-在testbench上运行test case(会消耗仿真时间);
- Clean up phases-在该阶段报告test case的结果。
uvm_component基类包含不同pahse的虚拟方法,这些方法由testbench创建者自行填充。在这里就体现了使用UVM的好处了,即各个验证组件独立开发并基于相同的共识相互配合。
二、功能与使用
要启动UVM testbench,必须在顶层initial语句块调用run_test()方法。调用run_test()会构造UVM testbench根组件,然后启动UVM phase。run_test()方法可以传递一个字符串参数用作testbench层次结构的根节点。
为了将testcase组件“my_test”指定为UVM testbench根组件,Questa命令行将是:
vsim tb_top +UVM_TESTNAME=my_test
下面将概述每个UVM phase的用途:
Build Phases:
build phases在UVM testbench仿真开始时执行,其总体目的是构建、配置和连接测试台组件层次结构。所有的build phases方法都是functions ,在0仿真时间执行完成。
- build_phase(自上而下):创建和配置测试平台结构
- connect_phase:建立组件之间的连接,向testbench 资源池分配对象句柄(例如virtual interface)
- end_of_elaboration:测试环境的微调
一旦构建了UVM testbench 根节点组件,build phase就开始执行。它从上到下地构建testbench 组件层次结构。
Run-Time Phases:
- start_of_simulation phase:准备测试环境的仿真,旨在用于自下而上地显示信息(例如testbench拓扑结构、组件配置信息等 )。
- run_phase(耗时):用于激励的产生和testbench的监测和检查。run_phase作为一个task实现,所有uvm_component的run_phase都并行执行。drivers 和monitors 总是会使用这一phase。
run_phase任务和上面细分的12个phase是并行的,即在start_of_simulation_phase任务执行之后,run_phase和reset_phase开始执行,而在shutdowm_phase执行完成之后,需要等待run_phase执行完才可以进入extract_phase。
Clean Up Phases:
clean up phases 用于从scoreboards 和functional coverage monitors中提取信息,以确定testcase是否达到其覆盖目标。clean up phases是functions ,所以也不会消耗仿真时间。
- extract_phase:从测试环境中收集数据
- check_phase:检查仿真中任何不期望的行为
- report_phase:报告测试结果
- final_phase:结束仿真
extract phase、 check phase、 report phase和 final phase都可以在同一个function phase中完成。