UVM-什么是UVM方法学

news/2024/5/19 17:00:22 标签: uvm, systemverilog, 验证, 方法学

概念简介

百度对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_25">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

http://www.niftyadmin.cn/n/5111741.html

相关文章

Java 8 新特性 Ⅱ

方法引用 举例: Integer :: compare 理解: 可以看作是基于lambda表达式的进一步简化 当需要提供一个函数式接口的实例时, 可以使用lambda表达式提供实例 当满足一定条件下, 可以使用方法引用or构造器引用替换lambda表达式 实质: 方法引用作为函数式接口的实例 (注: 需要熟悉…

数据分析案例-顾客购物数据可视化分析(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

信息学奥赛一本通2060:【例1.1】计算机输出

2060:【例1.1】计算机输出 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 185799 通过数: 91735 【题目描述】 在屏幕上输出“Hello World!”。 【输入】 (无) 【输出】 (无) 【输入样例】 (无) 【输出样例】 He…

【Qt控件之QTabBar】介绍及使用

概述 QTabBar类提供了一个选项卡栏,例如用于选项卡对话框。 QTabBar非常简单易用,它使用预定义的形状绘制选项卡,并在选择选项卡时发出信号。它可以被子类化以调整外观和感觉。Qt还提供了一个实现好的QTabWidget。 每个选项卡具有一个tabT…

第十章 Linux权限升级

在这个阶段,您已经有了一个有限的shell,您想要更进一步,获得一个根shell。根访问将允许您以您想要的方式操作系统,并且可能会为您提供通往另一台主机的新路径(称为pivot)。本章主要讨论Linux操作系统的权限升级,下一章…

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构

本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构前言典型的微服务架构是什么样的微服务的优势 微服务最佳实践在开发微服务时,我们需要遵循以下最佳实践: 微服务通常使用什么技术堆栈…

Java-API简析_java.util.PropertyPermission类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/133970108 出自【进步*于辰的博客】 因为我发现目前,我对Java-API的学习意识比较薄弱…

Kotlin中的Map集合

在Kotlin中,Map集合用于存储键值对(Key-Value Pair),其中键(Key)是唯一的,而值(Value)可以重复。Map集合分为可变集合(MutableMap)和不可变集合&a…