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会进行例化