UVM-什么是UVM方法学

概念简介

百度对UVM的解释如下:

通用验证方法学(Universal Verification Methodology, UVM)是一个以SystemVerilog类库为主体 的验证平台开发框架,验证工程师可以利用其可重用组件 构建具有标准化层次结构和接口的功能验证环境

UVM bench结构

自上而下首先是testbench,中间是interface,底下是DUT。

test即testcase,表示测试用例,testbench中,最外层是testcase(图中缩写为),是验证平台运行的起点,严格来说testcase不属于testbench,一个成世俗的验证平台为了测试dut的功能,会产生很多testcase。

env即environment,是验证平台的最顶层模块,被实例化在testcase中,当运行一个testcase,build phase会动态构建env组件。env包含angent和scoreboard等组件,完成agent和scoreboard之间的通信信道连接。

agt即agent,表示代理模块,作用类似于sub env,包含了sequencer,driver和monitor组件,构建完这些组件后会链接seqencer和diriver之间的通信信道,monitor连接到agent的通信端口上。

sequencer是产生激励的组件,激励是依附于sequence产生的,一个sequencer可以产生不同的seqence,不同的seqence产生不同激励,如长度固定的数据包,长度随机的数据包,读命令的数据包,故意出错的数据包等等,不同testcase可以选取不同的seqence,运行在seqencer组件中,产生符合测试者意图的激励,并传输给driver。

drv即dirver,表示驱动,它将seqencer产生的激励转化为驱动信号,由interface驱动到dut中。

mon即monitor,采集dut信号,封装为transaction,传输到其他组件,如scoreboard中进行比较

agent中还可以包含config,用来存储和控制agent的配置信息。agent还可以有active agent和passive agent之分,前者通常是master agent,包含向dut输送激励,和从dut采集输出两部分内容,即包括了sequencer,driver和monitor三个组件。passive agent则是slave agent,不驱动dut,只用来收集dut的输出,也就是只有monitor,不包含sequencer和driver。通常开发agen时通过设置一个变量,决定当前是active还是passive。

scb即sorerboard,表示记分板组件,将dut输出和期望值比对。期望值可以直接从monitor采集获取,driver获取,或者引入reference model对原始激励进行转化,从而和dut输出进行对比。reference model可以用system verilog,c等语言编写。自动比对是大规模回归测试的前提条件。

UVM层次

最上层是测试(test)层,由各种testcase组成,接下来是场景(scenario)层,由产生激励的sequencer构成,第三层是功能(function)层,包括scoreboard等组件,第四层是命令(command)层,由driver和monitor这种和interface打交道的组件构成,最底下是信号(signal)层,这一层是通过interface和dut进行交互。这几个层次各司其职,相互配合,实现了一个面向高层建模的可重用验证平台。

systemverilog类库

这些类库一方面包括了各种组件的基础代码,如uvm_driver,uvm_scoreboard,验证工程师通过扩展这些源代码,就可以为各种项目开发组件,搭建验证平台,另一方面这些类库包含了各种内建的函数,例如copy,compare,这些通用函数帮助我们减少工作量,节省开发时间。

可重用组件的意思是同个agent可以运用在不同规模的验证平台上,也可以在不同项目中随意移动。

以uart为例,在ip级验证中,验证平台可以长成这样:

在soc级验证中,除了uart,还有cpu,memory等外设,此时我们就可以把uart agent移过来,interface重新连接下就可以复用了:

uvm按照组件开发,组件的独立性强,可重用性高,层次化的验证平台格局使得各种uvm验证平台的架构长相非常相似,统一的格局,减少了工程师代码风格各异性,增强了代码可读性,这样统一的规划,阅读维护和管理起来,都会非常轻松。

参考:

  1. https://mp.weixin.qq.com/s?__biz=MzUyNzA2MDA0OQ==\&mid=2247550241\&idx=1\&sn=748dc65f50608211538e175b8033855e\&chksm=fa07181fcd70910976ce13152890c7d104f427ff9e2e25e11db9f83d65ee5cb4176fa4524466\&scene=27
相关推荐
apple_ttt6 天前
SystemVerilog学习——构造函数new
fpga开发·fpga·systemverilog·uvm
慢生活的人。7 天前
SpringSecurity+jwt+captcha登录认证授权总结
java·认证·rbac·权限·验证
apple_ttt8 天前
SystemVerilog学习——虚拟接口(Virtual Interface)
fpga开发·fpga·systemverilog·uvm
Amd7948 天前
Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解
json·vite·配置·nuxt·验证·钩子·动态
Amd79412 天前
Nuxt.js 应用中的 schema:extend事件钩子详解
自定义·应用·nuxt·数据·扩展·验证·钩子
那么菜14 天前
第18篇 :关于SystemVerilog中的约束随机机制(一)
systemverilog
小妖11601 个月前
uvm_info、uvm_warning,uvm_error、uvm_fatal
uvm·ic验证
Mr.codeee1 个月前
QT 实现随机码验证
开发语言·qt·animation·验证
网络研究院1 个月前
自主主权身份在企业中的作用
网络安全·管理·身份·观点·验证·ssi·自我主权身份
hh1992033 个月前
systemverilog中的DPI-C用例介绍
c语言·systemverilog·dpi-c