UVM - 3 (UVM验证平台)

内容

UVM - 统一的验证方法学

UVM演进

什么是验证?

验证计划

验证目标

RTL代码覆盖率

功能覆盖率

功能覆盖率和代码覆盖率的关系

覆盖率驱动的验证CDV

验证阶段

- 随机大量测试加定向边界测试
UVM提供了哪些内容

UVM基础类库和宏定义

UVM编码原则

更多的测试案例和更少的代码

- 随机化测试一定要使用随机的seed
SoC UVM验证平台架构

封装便于重用

- 一个协议总线一般封装为一个agent
- 从上到下进行例化
UVM架构具有可扩展性

- passive agent - 只有monitor进行采样,不会进行驱动
- active agent - 既有driver和monitor,可以采样和驱动数据
UVM架构组件

- 扩展组件,使用继承的方式进行扩展
UVM组件执行过程

第一个UVM示例

编译UVM验证平台并仿真

UVM源码库

UVM仿真流程

UVM消息服务

- $fatal - 会调用$finish
UVM组件的父子关系

UVM组件的逻辑层次

UVM组件的phaze执行

- final也是自顶向下执行的
- 各个组件的相同的phaze是并行执行的
- 各个phaze是串行执行的
- 从components扩展出来的类才有phaze的概念
Review
- uvm提供了一些组件,这些组件的父类是uvm_component
- uvm_component中定义了很多phaze,执行顺序,在uvm中会自动执行,不用显式调用
- build和final的执行顺序是自顶向下的,其他的phaze都是自底向上执行的
agent



env

test

tb_top

Makefile

执行顺序


UVM_component:override

- this指的是当前的类environment
- uvm创建对象的时候不是直接调用new函数,而是使用component::type_id::create();方式创建对象
UVM的各种元素

- TLM - 在组件之间进行通信,类似于SV中的mailbox,是从system C进行传输
- Transaction - 定义数据封装
- Sequence_class - 产生一系列事务
- Sequencer_class - 将Sequence中的事务传给driver
- Driver - 接收序列器发送的事务驱动到接口上
- monitor - 用于监测

- 一般一个协议封装一个agent,ahb_agent,apb_agent
UVM元素组成的验证平台

- uvm_sequence和uvm_sequence_item - 不会在agent中进行例化的,但是可以随时进行调用的
- sequencer和driver会进行例化
TLM - 事务机建模


浙公网安备 33010602011771号