UVM验证平台可以看成是由多个模块组合在一起,通过把这些模块放在一起利用接口和DUT连接起来,从而最终实现验证的目的。如图为一个完整的UVM验证平台框图,下图中每一个组件(即UVM中的component)就是一个类。

这些模块不是简单的函数或者过程,而是一个个实实在在的对象文件,这些对象内部会包括一些function或者task等来协作完成整个验证平台的运行

sequence是产生transaction(事务)的组件,属于平台外的,但由于和testbench关系较大,所以一并讨论。

0. sequence组件

事务反生器,即产生transaction。transaction不能算是testbench中的组件,只是各组件间的数据流。

  • 基类
  1. uvm_sequence_item
    该类可以派生事务级的transaction类,这是使验证平台相互连通的重要组件。

    为了使transaction能随机化,需要给每个成员指定为rand。

    transaction和driver类是不同的,它是有生命周期的,他在仿真的某一时间产生,经过driver驱动,在经过testbench中的参考模型处理,最终由scoreboard比较完成后,其生命周期结束。

  2. uvm_sequence
    产生事务发生器,即派生出sequence,并可以在定义时产生一系列transaction对象(一般来说,一个sequence产生一种类型的transaction)。它不属于验证平台的部分,但是却能给验证平台提供激励。
  • task
  1. body()
    sequence中最重要的部分就是其中的task: body(),作用是产生和控制transaction。当一个sequence启动之后,会自动执行body中的代码。
  1. `uvm_do(ptr)
    该宏在UVM中比较常用,作用是:
    (1)创建transaction对象,调用一次即产生一次对象,即产生完整地使平台运行的一个包。
    (2)将其随机化
    (3)最终将其送给sequencer。
    ptr为指针,可通过该指针访问创建的事务对象。driver取走这个transaction后,uvm_do并不会立刻返回执行下一次uvm_do,而是等待在那里,直到driver返回item_done信号。

1. testcase

在testbench中首先需要创建一个测试案例,它用来实例化和配置environment,使env模拟不同的配置环境,执行不同的测试行为;指定测试的sequence

若一个功能点的testcase的env配置完成,则不能改动,若要改动或修复则需重新配置env。

2. environment组件

env组件可以将testbench中所有组件封装在一起,在该类中可以实例化多个agent,reference model,scoreboard等,并将其互连。

注意:一旦该组件定义完成,后续不得轻易对其更改,若更改须重新验证所有的testcase。因此在定义时最好事先配置好interface,使env就有可配置性。

  • 基类
  1. uvm_env
    可以派生出可以实例化testbench中各组件类的容器类。和driver一样,容器类在仿真中是一直存在的,可以使用uvm_component_utils宏来实现factory的注册

3. agent组件

agent中可以实例化sequencer,driver,monitor等组件,并将这些组件连接起来。

  • 模式
  1. active
    需要实例化sequencer、driver、monitor,连接sequencer和driver。
    该状态是agent的默认状态,在代码中,is_active是agent内建的变量,默认值为UVM_ACTIVR。
  2. passive
    该模式下只有monitor,因此没有驱动DUT的能力,但可以用来捕获DUT的输出信号并转化为transaction。
  • 基类
  1. uvm_agent

4. sequencer组件

用来启动sequence,并将transaction对象发送给driver。绝大部分功能由UVM实现

  • 基类
  1. uvm_sequencer(transaction)
    作用:
    (1)sequence在向sequencer发送transaction时,会先发一个请求,sequencer把这个请求放在一个仲裁队列中,并检测仲裁队列里是否有某个sequence发送transaction的请求
    (2)检测driver是否申请transaction

5. driver组件

激励驱动,从sequencer接收transaction对象,并转化为DUT可接收的pin级信号,再按照DUT总线接口协议要求驱动DUT。

  • 基类
  1. uvm_driver(transaction)

6. monitor组件

driver类负责把transaction级别的数据变成DUT的端口级别,并驱动给DUT;monitor的行为与其相对,用于收集DUT的端口数据,并将其转换为transaction交给后续的组件reference model,scoreboard处理。

monitor要通过TLM_port和其他组件相连。

  • 基类
  1. uvm_monitor

7. reference model组件

模拟DUT的功能行为,根据输入的激励产生相应的结果,并交给scoreboard。

无直接调用基类,均由uvm_component扩展

8. scoreboard组件

比较reference model和DUT的输出结果是否一致,从而判断DUT的功能是否正确;同时可以将功能覆盖率收集嵌入到该组件中。

  • 基类
  1. uvm_scoreboard

IC验证——UVM学习——验证平台中的组件相关推荐

  1. IC验证——UVM学习

    UVM是一种基于Systemverilog的验证方法学,其特征是提供用于基本验证结构和可调用的基础类库,可让验证工程师快速搭建可靠的验证框架.UVM自定义的框架构建类和测试类能够帮助验证师减轻环境构建 ...

  2. UVM实战 卷I学习笔记2——为验证平台加入各个组件(1)

    目录 1.加入transaction 2.加入env 3.加入monitor 4.封装成agent 开始引入reference model.monitor.scoreboard等验证平台的组件,在这些 ...

  3. UVM学习——搭建简单的UVM平台

    引言 本专栏的博客均与 UVM 的学习相关,学习参考: [1]UVM Tutorial [2]张强著,UVM实战 (卷 Ⅰ) [3]Download UVM (Standard Universal V ...

  4. [附源码]Java计算机毕业设计SSM大学生学习交友平台

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  5. UVM学习之路(5)— 完整的UVM验证平台

    UVM学习之路(5)- 完整的UVM验证平台 一.前言 一个完整的UVM验证平台还应该加入寄存器模型,对应的设计文件中也应该存在寄存器及其控制端口, 通过该控制端口可以配置DUT中的寄存器. 二.设计 ...

  6. UVM学习之路(6)— 基于MCDF的验证平台

    UVM学习之路(6)- 基于MCDF的验证平台 一.前言 MCDF即多通道数据整形器(Multi-Channel Data Formatter)可以将多个通道是数据经过打包后以数据包的形式发送出去,其 ...

  7. UVM学习之路(4)— 基本的UVM验证平台

    UVM学习之路(4)- 基本的UVM验证平台 一.前言 一般我们将设计输出的文件称为DUT(Design Under Test),即待测设计,验证是来找出DUT中的bug, 这个过程通常是把DUT放入 ...

  8. #UVM# 搞清验证平台中的 uvm_top、uvm_test_top及module top的层次关系

    [UVM] 1. UVM 方法学的测试平台构建框架关系 1.1 uvm_top 1.2 uvm_test_top 1.3 module top 1. UVM 方法学的测试平台构建框架关系 UVM 验证 ...

  9. 从0开始搭建基于UVM的验证平台 ----- phase0.0

    从0开始搭建基于UVM的验证平台-----phase 0.0 0. Introduction 1. Creating simple test 2. Build your own test case 3 ...

最新文章

  1. mysql 常用操作命令
  2. 成功解决File frozen importlib._bootstrap, line 219, in _call_with_frames_removed ImportError: DLL lo
  3. pku 1925 Spiderman DP
  4. #include *.c文件的妙用
  5. mysql配置-django
  6. More Effective C++ (限制类的对象数量)
  7. 哟,2020 年了,用 Vue 做一个自己的小程序吧!| 原力计划
  8. appium自动化测试环境部署_Android
  9. PHP open_basedir配置未包含upload_tmp_dir 导致服务器不能上传文件
  10. 开发板Linux内核,芯灵思SinlinxA33开发板Linux内核workqueue(附实测代码)
  11. Vue webapp项目通过HBulider打包原生APP
  12. 【C语言开源项目】盘点 GitHub 上不错的 4 个C语言项目
  13. python语法简洁清晰、特色之一是强制用作为语句缩进_问道python之基础篇【一】 认识python...
  14. Springboot毕业设计毕设作品,网上图书商城系统 开题报告
  15. 计算机毕业设计android的云南旅游,美食攻略,产品预订app(源码+系统+mysql数据库+Lw文档)
  16. JavaScript弹出框、对话框、提示框、弹窗总结
  17. Hive秒数转成时分秒
  18. Revit API 开发周边:对 Element 进行 Reflection
  19. 大连工作后到外省就业要办的手续
  20. mobx+mobx-react

热门文章

  1. 论校园网如何实现免认证
  2. 056_《Delphi应用程序开发精彩实例》
  3. iOS 应用程序开发官方中文手册
  4. eva每一集片尾曲是谁唱的_EVA 电视版片尾曲 初版
  5. 霍夫曼编码求节省空间
  6. 2021年A特种设备相关管理(电梯)考试题及A特种设备相关管理(电梯)模拟考试
  7. android 指令模式,Android 源码中的命令模式
  8. 分享PS高手使用的技穷 你都只知道哪些?
  9. 什么样的人适合做会计(转)
  10. CentOS7 单节点和多节点 HPL测试