文章目录
uvm平台组件
- uvm库;
- uvm_component;
- uvm结构树;
- uvm phase;
- uvm objection
uvm库
基本要素的是三个层次:
- TLM:组件之间通信的标准;
- Structural Element包含了UVM的各个组件;
- methodology在不改变测试平台原代码的情况下,对平台进行更改配置。
UVM库的文件目录结构
uvm_packet包含的类
- uvm_component:构建uvm testbench 层次结构最基本的类。
- uvm_object:作为uvm的一种数据结构,可作为配置对象来配置测试平台。
- uvm_transaction:产生激励和收集响应。
uvm_component
- uvm_object类的派生:
- 平台组件扩展于uvm_component;
test、env、agent、driver、monitor、scoreboard以及sequencer - 组件中包含了task和function;
- 组件是uvm结构树上的节点;
uvm结构树
- 简单的
- 通常情况下
可以用topology函数看
uvm结构树的根节点为uvm_top(uvm_root) - uvm树逻辑层次存在的必要性:
- 为config机制提供搜索路径;
- 为override机制提供搜索路径;
- 是phase自动执行的需要。
uvm phase
- phase是uvm_component的属性;
- run_phase和右边12个phase是并行的
phase 图
为什么需要phase:
- 验证平台的构建、配置、连接到运行,最后停止需要一个顺序;
phase的特性:
1. phase的执行按照上图顺序;
2. 不同的phase或components对应相应的任务与函数:
- ==build==对应==function void build_phase()==;
- ==connect==对应==function void connect_phase()==;
3. 同一phase自顶向下或自下向上执行:
自顶向下:从从uvm结构树的根部uvm_top执行;
自下向上:从uvm结构树的枝叶test开始;
phase的运行规则
- 同一个phase,执行遵循uvm结构树,不同phase,遵循build->run->clean_up;
- 前四个和后四个phase都是function phase,不会消耗仿真时间;
- run_phase是task phase,会消耗仿真时间;
- 只有build_phase和build_phase是自顶向下执行的,其他都是自下向上执行的。
run phase
- 12个run-time phase,与run phase是并行的;
pre
reset、configure、main、shutdown
post
uvm phase
run_test();全局函数调用uvm平台
1. build_phase
构建顶层测试平台的拓扑结构;
2. connect_phase
连接测试平台的各个组件;
3. end_of_elaboration_phase
打印平台的相关信息(比如平台结构);
4. start_of_simulation_phase
配置验证组件;
5. run_phase
- 在12个run-time_phase执行过程之前必须有raise_objection,之后有drop_objection
- 仿真的整个过程;
6. extract_phase
收集DUT详细的最终状态;
7. check_phase
检查仿真结果;
8. report_phase
对方在结果进行分析和报告;
9. final_phase
关闭引擎,结束联合仿真;
uvm objection
- 控制task phase的运行与终止;
- 同步各个同名的task phase;
- 使用方法:
<task phase>.raise_objection();
<执行语句>
<task phase>.drop_objection(); - 注意事项
- objection只对task phase有意义;
- 必须在执行消耗仿真时间的语句之前raise objection;
- 在task phase结束之后必须有drop objection;
- 同名task phase的objection操作会互相影响;
- 最好在每个需要操作的phase前后使用raise和drop;
- 不要在无限循环的task phase中使用raise和drop;
- 每个phase尽量只使用一次;