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 - 事务机建模

posted @ 2024-03-13 17:48  Icer_Newer  阅读(294)  评论(0编辑  收藏  举报