SV通识5-2:UVM简介

为什么现在讲:

实验四、实验五、带着UVM思维考虑

实验四实验五mcdf阶段,DUT变大了,我们主要讲如何将验证结构extend,对mcdf进行扩展

一、UVM简介

1、概述

sv标准:2002—>2012—>2017

2011年:UVM发布(Universal Verification Methodology),各种M指的是Methodology

UVM是验证敲门砖

动态仿真,性能验证和效能验证都和动态仿真(功能验证)有关

动态仿真离不开硬件加速

静态


语言趋势


UVM吸取了各种M(AVM,OVM,UVM)的优点,且不绑定某一语言

为什么:验证方法注重可重用的类

底下一定要多画结构


UVM什么数字的都可以验

他就是库,基于SV提供的一系列方法类库,提供一系列基础类库,UVM提供的类库和基本的验证结构可以很快的构建起来验证平台


学习UVM的路线

mcdf相比mcdt来讲:大家共有channel和arbiter;mcdf多了个寄存器模块和Formatter模块,设计变复杂了

寄存器功能:配置功能、反应硬件状态,所以说既可写又可读,本身是硬件的一部分

UVM类库

P260页

分成了总共十大类:注意分类逻辑和处理场景

UVM类

按照类库地图可以分为以下几类:

  • 核心基类:为什么克隆啊,自动定义的,自动的做比较,自动的打印
  • 工厂(factory)类
  • 事务(transactoin)和序列(sequence)类:SV中的事务和序列有机的组合起来
  • 结构创建(structure creation)类
  • 环境组件(environment component)类:SV里面的stimulator,monitor,driver,isdfsdtor,checker
  • 通信管道(channel)类:mailbox(实验三里面讲过)
  • 信息报告(message report)类:(实验四讲独立信息报告的包)
  • 寄存器模型(register model)类:独立的我们不讲了
  • 线程同步(thread synchronization)类:旗语等等
  • 书屋接口(transaction interface)类:发送数据包两个mailBox接起来,为什么要有接口呢?

测试题

答案:BCD

二、UVM组件

1、概述

MCDF中的组件按功能分为:激励器(stimulator)、监视器(monitor)、检查器(checker)

uvm_component是非常重要的核心类,环境的组件类

(1) 环境组件类

方框里面的都继承于uvm_component

  • uvm_drivert:我们也学到了
  • uvm_monitort:我们也学到了
  • uvm_sequencer:不熟悉,承担了一部分generator的功能,目前我们的generator既要产生激励又要发送激励,sequener承担了发送激励的一部分,产生激励由另外一个类承担了
  • uvm_agent:我们也学到了
  • uvm_scoreboard:就是我们写的checker类
  • uvm_env
  • uvm_test

其中uvm_env和uvm_test的差别会体现在实验三和实验四里面

2、构建MCDF顶层验证环境:构建UVM最终结构图

目前这张图是我们到模块二的时候UVM应该是怎么样的形式


测试题

答案:ABCD

sequencer是agent里面的常客,产生激励在上图中看不到,因为此时产生激励不属于UVM的结构,属于动态的产生激励的过程,属于sequence(和sequencer就差了一个字母),我们后来学


三、UVM环境

1、phase机制

(1) 概述

我们讲完组件,就需要例化了吧,再进行组件之间的连接,最后运行

SV中我们通过new()函数没法解决一个重要问题,就是无法保证例化的先后关系,即在验证层次中没法保证先例化顶层,再例化下一层

我们必须小心的不断通过new()里面进行嵌套,这个连接也成为了问题,需要确保上层例化了再对底层进行连接

UVM可以事先进行配置,不用等待例化(即phase机制)

phase机制名词上解释是阶段机制,就是按照阶段进行

(2) phase机制函数表

在各个组件内部只需要去填充预定义好的方法,这些方法有的是函数、有的是任务

phase机制解决了,例化的先后关系,从而只需要在对应组件中定义需要的任务

(3) phase机制流程图

总共九个阶段:图中少了一个final阶段(其他的是除了黄色快的阶段与函数表一一对应)

不一定都要在每个组件中实现所有方法,只需要实现对你有帮助的,其他阶段不定义就是空置的

黄色部分先不讲

2、创建测试平台:流程图


测试题

答案:ABCD

函数是不消耗时间的所以B是对的,new函数也不消耗时间