2-uvm平台组件

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();
  • 注意事项
  1. objection只对task phase有意义;
  2. 必须在执行消耗仿真时间的语句之前raise objection;
  3. 在task phase结束之后必须有drop objection;
  4. 同名task phase的objection操作会互相影响;
  5. 最好在每个需要操作的phase前后使用raise和drop;
  6. 不要在无限循环的task phase中使用raise和drop;
  7. 每个phase尽量只使用一次;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值