引言
本专栏的博客均与 UVM 的学习相关,学习参考:
【1】UVM Tutorial
【2】张强著,UVM实战 (卷 Ⅰ)
【3】Download UVM Standard Universal Verification Methodology)
本文就先介绍 UVM 的基本内容。
UVM 概念
UVM(Universal Verification Methodology,通用验证方法) 是一个全产业的标准,它使能了更快速的开发,验证环境的重用以及IP验证。
它是使用SV的语法和语义定义的一组类库,SystemVerilog IEEE 1800),现在是一个IEEE标准。
UVM背后的主要思想是通过提供可以部署在多个项目的API架构来帮助公司开发模块化、可重用和可扩展(推广)的 testbench 。
UVM主要来源于开放验证方法OVM技术)和支持多个EDA供应商,像Synopsys,Cadence,Mentor and Aldec。UVM类库提供了通用的工具,比如配置数据库,TLM和组件层次结构除了数据自动化功能,如复制、打印和比较。它将在一个抽象层验证环境中的每个组件都有一个特定的角色。例如,驱动类的对象将只负责驱动设计中的信号,而监控只是监视的设计接口和不驱动接口信号。
下图显示了一个典型的验证环境是由扩展可用UVM类是用uvm_ *前缀。这些组件已经有必要的代码,让他们彼此之间的连接,处理数据包和与他人同步合作。
它还经历了许多修改,增加了新的功能,取消了一些旧的功能。UVM的参考手册可以在这里:Download UVM Standard Universal Verification Methodology)获得,其中包含对类层次结构、函数和任务的描述。
这里对 UVM 资源的下载以及学习使用作如下说明:
1、点进去链接后,选择最新版本下载:
2、下载完成后,得到一个名为 UVM-18002-2020-20tar.gz 的压缩包。需要通过 power shell 完成解压。(Win 10)
搜索 power shell:
然后打开应用。
解压完成后,得到下面的文件:
当然,如果不想麻烦,直接进我的粉丝交流群(文末有链接),我已经上传到群文件:
如果需要学习,建议直接打开下面所示的 网页文档:
可以按照右边的索引,系统学习:
UVM 类的层级结构
UVM提供了一组基类,从中可以通过继承来构建更复杂的类,并向其添加验证环境所需的某些函数。例如,可以通过从UVM基类uvm_driver扩展来构建Wishbone协议的新驱动程序类。该协议的激励可以通过从uvm_sequence_item中进行扩展来编写。如何构建这个序列并传递给驱动程序由UVM框架内部处理。
uvm_void是所有类的基础,但它是空类.uvm_object是主要类,其中定义了打印、复制和比较同一类的两个对象的公共函数。
该层次结构中有两个分支。第一个分支包含定义验证组件的类,如驱动程序、监视器,其余的在图中显示为UVM_REPORT_OBJECT下的所有内容。第二个分支定义由验证组件使用和操作的数据对象,这些数据对象在图中显示为UVM_TRANSACTION下的所有内容
UVM类的 主要类别
UVM对象(Objects)
UVM背后的想法是增强灵活性和重用代码,这样相同的测试台就可以以不同的方式配置来构建不同的组件,并提供不同的激励。建议从uvm_object中派生出这些新的用户定义的配置类。例如,可以构建一个配置类对象,使其具有定义必须如何构建测试台环境的某些设置。
UVM序列(Sequence)
UVM还引入了一个序列的概念,它只是一个实际激励设计的容器。如果你将不同的激励放到不同的序列中,它会增强重用和随机驱动这些序列的能力,以获得更多的覆盖率和验证结果。建议从uvm_sequence 继承所有新的用户定义的激励类。
每个序列都可以在其他序列中使用来创建不同的场景。例如,可以创建单独的序列,每个序列分别用于“读”和“写”事务。它们可以在其他序列中以随机模式用于执行R->W->R->W,或R->R->R->W,W->W->R->R和其他类似的模式。
UVM序列项(Sequence item)
必须驱动到DUT的数据对象通常被称为序列项,建议从 uvm_sequence_item 继承。例如,可以为APB事务定义一个序列项类,该事务定义了地址、写/读数据和访问类型,并将其发送到APB驱动程序,以将事务驱动到DUT。
UVM组件
所有主要的测试台组件都来自于相应的基类。例如,建议从 uvm_driver 继承所有新的用户定义的驱动程序类,并从 uvm_monitor 继承监控器类,等等。下表中给出了对每个UVM组件所执行的操作的简要描述。
寄存器层
数字设计支持可以由软件配置的控制寄存器,这在系统虚拟日志测试台中是非常具有挑战性的,因为对于每个项目,您必须构建一组单独的类来存储和配置这些寄存器。UVM有一组广泛的类,使该任务相对简单,并且属于被称为寄存器模型的东西。这在验证可以在各种SoC设计中重用的ip时非常有用。
TLM连接
另一个真正聪明的特性是使用了来自System C的TLM。TLM帮助以事务和类对象的形式在组件之间发送数据。它还带来了一种向听众广播数据包的方法,而不必创建特定的频道并附加。
UVM阶段
验证组件从其父类 uvm_component 继承的另一个主要特性是阶段性的。这使得每个组件在继续下一阶段之前相互同步。下一章将介绍各个阶段。每个组件都经过实例化的构建阶段,在连接阶段相互连接,在运行阶段消耗模拟时间,并在最后阶段一起停止。
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2232822.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
UVM学习——介绍
引言
本专栏的博客均与 UVM 的学习相关,学习参考: 【1】UVM Tutorial 【2】张强著,UVM实战 (卷 Ⅰ) 【3】Download UVM Standard Universal Verification Methodology)
本文就先介绍 UVM 的基本内容。 UVM 概念
UV……
移动APP测试流程及测试点
1.APP测试基本流程
1.1测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向负责人确认项目排期。
1.2测试资源 测试任……
day21—选择题
文章目录1. 设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度(D)2.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5&……
JAVA-BeanDefinition是什么?是干什么的?在哪里?里面有什么?
目录
前言
抛砖引玉
单词含义
BeanDefinition是什么?
BeanDefinition在哪个包里面?
BeanDefinition里面有哪些属性?
BeanDefinition是如何存放的?
BeanDefinition被读取的常见读取器
如果本篇博客对您有一定的帮助&#……
【新2023Q2押题JAVA】华为OD机试 – 字符串重新排序
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:字符串重新排序
题目描述
给……
微服务+springcloud+springcloud alibaba学习笔记1/9)
1.微服务简介
什么是微服务呢?
就是将一个大的应用,拆分成多个小的模块,每个模块都有自己的功能和职责,每个模块可以 进行交互,这就是微服务
简而言之,微服务架构的风格,就是将单一程序开发成……
2018年 团体程序设计天梯赛——题解集
前言: Hello各位童学大家好!😊😊,茫茫题海你我相遇即是缘分呐,或许日复一日的刷题已经让你感到疲惫甚至厌倦了,但是我们真的真的已经达到了我们自身极限了吗?少一点自我感动……
【Kaggle实战记录01】Titanic – Machine Learning
title : 【Kaggle实战记录01】Titanic – Machine Learning from Disaster date : 2023/4/7 tags : 机器学习,练习记录 author : Linno 【Kaggle实战记录01】Titanic – Machine Learning
太久没写过博客了,这是一个新系列,用当时搞Kaggle的代码写文章&am……
C语言预处理命令(宏定义和条件编译)
C语言预处理命令(宏定义和条件编译)
前言 在编译和链接之前,还需要对源文件进行一些文本方面的操作,比如文本替换、文件包含、删除部分代码等,这个过程叫做预处理,由预处理程序完成。 较之其他编程语言&am……
云日记结构bug心得
用户模块 通过用户行为来区分 actionName 用户登录 actionName"login" 进入个人中心 actionName"userCenter" 加载头像 actionName"userHead" 验证昵称的唯一性 act……
combiner partitioner
combine是在map端进行的,是在patition之后 partitioner也是在map端进行的 combine 适用在每个map端进行简单的合并,同样也是继承Reduce类。…
toString.indexOf:)和subsTring
package com.test2.test;public class subStirngTest {public static void mainString[] args) {String sb"abcdefgh";String sc"abcd:efgh";int splitIndexsc.indexOf":");//找到标识符的位置System.out.printlnsplitIndex);sb.substring1)……
Aprior 算法
Apriori 算法:(hadoop中实现) 第一步:统计项的频度 (用一个MR统计出来) 假设是一个矩阵 U1 app1 , app3
U2 app1 , app2 , app3
U3 app2 , app3 把矩阵看成一行行的向量
U1<app……
matlab中kmeans简单使用
[Idx,C,sumD,D]Kmeansdata,3,’dist’,’sqEuclidean’,’rep’,4) 等号右边: kmeans:K-均值聚类 data是你自己的输入数据 3 是你要聚成3类 dist sqEuclidean 这2个参数,表示距离函数为欧式距离。什么是欧式距离自己百度 ’rep’,4 聚类重……
matlab中贝叶斯简单使用
Matlab部分代码: Data_prediction loadlichen\Pima-prediction-set.txt);
Data_train loadlichen\Pima-training-set.txt);
training_data Data_train:,1:8);
training_label Data_train:,9);
prediction_data Data_prediction:,1:8);
prediction_la……
awk sed 的截取和替换vsftpd.log
vsftpd.log 日志
首先需要在配置文件中添加开启的语句。
然后必须有用户登录才会产生日志文件。 日志格式: 截取结果: Static.sh脚本内容:
#!/bin/bash
cat /var/log/vsftpd.log |awk {print $8 " "$9" "$10" &……
Hadoop中Writable和WritableComparable区别
Hadoop的key和value的传递序列化需要涉及两个重要的接口Writable和WritableComparable。 1> Writable: public void writeDataOutput out){} public void readFieldsDataInput in){} 也就是读数据和写数据的方式 2> WritableComparable:……
FP树挖掘算法实现
Fptree算法: FP-growth算法,采用的是分而治之的思想,在挖掘的过程中不会像Apriori算法那样,产生大量的候选集,Apriori算法中如果有10^4个频繁一项集会导致10^7个频繁二项集,而对长度为100的频繁模式&#x……
hadoop分片大小
Hadoop的最佳分片大小应该和HDFS的块大小相同:如果跨越俩个数据块,那么对于任何一个HDFS节点,基本都不会同时存储在俩个数据块,难免会进行跨网络传输。于在本地数据运行慢许多。…
hadoop磁盘写入流程
map:将输入写入到本地磁盘 reduce:写入到HDFS
因为map产生的是中间结果,中间结果是由reduce任务处理后才是最终结果,而且中间结果一旦使用完后是可以进行删除的,不适合写入到HDFS…
编程日记2023/4/16 14:50:30