UVM指的是验证方法学,是学习数字验证的入门课程。它是至关重要的,有不少人往IC验证方向发展的,多多少少都会去了解UVM。但UVM并不是简单的翻个书就可以学会的,还是要掌握学习方法或者跟着老师学习的。

UVM介绍

UVM是一个以SystemVerilog为主体的验证平台开发框架,验证工程师利用其可重用组件可以构建具有标准化层次结构和接口的功能验证环境。

UVM是一个库,在这个库中,几乎所有的东西都是使用类(class)来实现的。类是面向对象编程语言中最伟大的发明之一,是面向对象的精髓所在。

使用UVM的第一条原则是:验证平台中所有的组件都应该派生自UVM中的类。当要实现一个功能时,首先应该想到的就是从UVM的某个类派生出一个新的类,类中可以有成员变量,也可以有函数和任务,通过成员变量、函数或任务实现所期望的功能。

对于验证方法学来说,分层的测试平台是一个关键的概念。虽然分层似乎会使测试平台变得更复杂,但它能够把代码分而治之,有助于减轻工作负担,而且重复利用效率提升。基于UVM的验证平台可以类似分为五个层次:信号层、命令层、功能层、场景层和测试层。

如何学习UVM

UVM1.2版本包含121个文件,311个类。从经验来说,我们搭建一个普通的UVM验证环境,大约需要编写10个文件,20个类左右。这里分享一下对初学者的个人建议:

第一阶段-基础:
学习UVM之前熟悉SV是必须的,关于SV的系统学习首推“绿皮书”。工作中“asic-world”这个网站可以作为我们的查询手册。

第二阶段-学习:
有了SV的基础和OOP的思想,我们就可以开始学习UVM了(很多人入门是看《UVM实战》-张强著 )。这时我们需要了解UVM构架,各种component, phase管理机制等。最好配合实例代码一边看书一边敲代码做练习。

第三阶段-应用:
当然我们有的朋友会说:“我现在的公司还没有用UVM来搭环境呀,怎么应用啊?” 但是,没有条件我们可以创造条件呀! 网上这么多开源的IP,找一个自己感兴趣的,把自己当成验证主管,自己玩儿呗。或者把已经做过的项目再用UVM搭一遍。

第四阶段-研究:
这个时候你已经是熟手,并能够独立搭建复用性很强的UVM环境了。
这时可以去看看UVM源码,帮助同事解决实际工作中的各种问题。研究一下UVM代码自动生成,UVMF是什么等等。

1.什么是UVM?UVM的优势有哪些?
(NXP、百度面试题)
UVM(通用验证方法)是一种用于验证数字设计标准化的简单方法。
优势:
第一种自动化方法和第二种自动化类库的集合
贯穿于验证平台的可重用性
即插即用的验证IP
通用的验证平台开发
供应商和模拟器独立
高智能的验证平台(即从预先设计的覆盖计划中产生合法的激励)
支持CDV(覆盖率驱动)验证
支持CRV(受限随机)验证
UVM在Accelerate System Initiative下标准化
支持寄存器模型

2.uvm_component和uvm_object之间有何区别?
或者我们已经拥uvm_object,为什么我们需要uvm_component这种实际派生自的uvm_object类?(比特大陆、寒武纪面试题)
uvm_component:
准静态实体(在构建阶段之后,它在整个模拟过程中可用)
始终连接到给定硬件(DUT接口)或TLM端口
具有用于控制仿真行为的phase机制
配置组件拓扑结构
uvm_object:
动态实体(在需要时创建,从一个组件转移到另一个组件然后取消引用)
不连接到给定的硬件或任何TLM端口
没有phase机制

3.UVM phase中top-down(自顶而下)、down-top(自底而上)以及并行执行的phase分别有哪些?
(寒武纪、乐鑫面试题)
只有build_phase是自顶而下的,除了run_phase,其他phased都是自底而上的。run_phase自顶而下工作,可以配置测试工作台层次结构,因此我们需要在构建叶子之前构建分支。

4.为什么build_phase是自顶而下而connect_phase是自底而上?
connect_phase旨在用于在组件之间建立TLM类型的连接,这就是它在构建阶段之后发生的原因。它自底而上工作,以便在设计层次结构中获得正确的实现,如果从上到下工作,这是不可能的。

5.UVM中的function phase和task phase分别有哪些?
只有run_phase(及其并行的12个phase)是task phase(消耗仿真时间的phase),其他phase都是function phase(不消耗仿真时间的非阻塞类型phase)。

6.哪个phase花费了更多时间以及为什么?
(比特大陆面试题)
如前所述,run_phase作为task phase,剩下的都是function phase。run_phase将从仿真(run)开始到仿真结束执行。run_phase非常耗时,测试用例产生激励正是在run_phase中实现。

7.UVM phase如何启动?
通过在顶层模块中调用run test(“test1”)来启动UVM phase。当调用run test()方法时,它首先会创建一个test_top的对象然后调用所有phase。

8.测试用例如何从仿真的命令行启动?
在top模块中写run test(),即不要在变量中提供任何内容。然后在命令行中添加:+UVM_TESTNAME =test1,启动测试用例名为test1的测试用例。

9.模块和基于class的tb的区别有哪些?
(乐鑫面试题)
模块是在仿真期间始终存在的静态对象。
class是一个动态对象,因为它们可以在仿真的生命周期中来去。
特别指出:interface是静态对象,因此只能用于top、模块等静态对象中,driver为动态的对像类,因此driver等类中使用的为virtual interface,通过虚的指针指向实际的interface。

10.什么是uvm_config_db?uvm_config_db和uvm_resource_db之间有什么区别?
(比特大陆面试题)
uvm_config_db是一个参数化类,用于将不同类型的参数配置到uvm数据库中,如此它可以被任何较低级别层次结构中的组件使用。
uvm_config_db是一个构建在uvm_resource_db之上的便利层,但这种便利非常重要。特别是,uvm_resource_db使用“最后写入获胜”方法。另一方面,uvm_config_db通过end_of_elaboration查看层次结构中的内容,因此“父获胜”。一旦启动start_of_simulation,config_db就会变成“最后写入获胜”。
uvm_config_db#(T)中的所有函数都是静态的,因此必须使用::运算符调用它们。uvm_config_db#(T)是从uvm_resource_db#(T)扩展而来的,所以它是uvm_resource_db#(T)的子类。

以上就是IC修真院分享的关于UVM的学习方法,UVM的学习难度非常大,想要学好建议找个靠谱的老师跟着学习,这样才能事半功倍。

《IC入行指导建议》快来参与吧!(https://www.wenjuan.com/s/3EBZB3H/#)

UVM学习笔记—快速入门篇相关推荐

  1. JavaScript学习笔记之入门篇

    JavaScript学习笔记之入门篇 JavaScript引入 1. 页面级 js: 2. 外部js文件: JavaScript变量 1. 变量的作用: 2. 声明变量: 3. 变量赋值: 4. 单一 ...

  2. HTML5+app开发学习之快速入门篇

    HTML5+app开发学习之快速入门篇 5+app开发概念理解相关 开发环境与支持 快速入门实战 5+app开发概念理解相关 见博文:学习跨平台移动应用开发必须理解的一些概念 开发环境与支持 开发环境 ...

  3. javaSE学习笔记01 入门篇

    javaSE学习笔记01 入门篇 java语言概述 Java背景知识 java是 美国 sun 公司 在1995年推出的一门计算机高级编程语言. java早期称为Oak(橡树),后期改名为Java. ...

  4. Java学习笔记系列-入门篇-计算机基础

    Java学习笔记 Java学习笔记是一个持续更新的系列,工作多年,抽个空对自身知识做一个梳理和总结归纳,温故而知新,同时也希望能帮助到更多正在学习Java 的同学们. 本系列目录: 入门篇 计算机基础 ...

  5. 经典再现,看到就是赚到。尚硅谷雷神 - SpringBoot 2.x 学习笔记 - 基础入门篇

    SpringBoot 2.x 时代 – 基础入门篇 视频学习地址:https://www.bilibili.com/video/BV1Et411Y7tQ?p=112&spm_id_from=p ...

  6. Go 菜鸟学习笔记-快速入门(上)

    1.简介和hello world go特性 接受了函数式编程的一些想法,支持匿名函数与闭包 接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道 推荐使用消息而不是共享内存来 ...

  7. Swi-Prolog学习笔记(入门篇)

    首先介绍一个学习swi-prolog 和amzi-prolog很靠谱的中文网站:http://hyry.dip.jp/tech/book/page/prolog/search_game_maxmin. ...

  8. 金融常识学习笔记之入门篇

    金融常识学习笔记 拉弗曲线 住房痛苦指数 CPI 什么是CPI? 如何才能跑赢CPI? 工资上涨能跑赢CPI吗? PPI 什么是PPI? PPI有什么作用? 恩格尔系数 什么是恩格尔系数? 恩格尔系数 ...

  9. 持续集成学习笔记-入门篇(1)持续集成基本概念

    今年7月份中下旬,笔者见过一个号称"资深开发者"的哥们(据说编程有十来年了),笔者问他:"你们平时用的持续集成工具都有哪些?"这哥们回答:"那些都是骗 ...

最新文章

  1. 语法分析生成器 - LEX
  2. 关于数据库插入中文乱码问题
  3. Dvbbs8严重漏洞
  4. swift源代码兼容开源项目清单
  5. 解决CentOS7本机时间与实际时间相差8小时的问题
  6. 信息学奥赛一本通 2037:【例5.4】约瑟夫问题 | 1334:【例2-3】围圈报数 | 洛谷 P1996 约瑟夫问题
  7. 04-树7. Search in a Binary Search Tree (25)
  8. 深入理解redis中的lua脚本
  9. 集合 ---- 重复数
  10. 【读书笔记】钢铁是怎么炼成的
  11. Wordpress昼夜切换导航主题模板 NDNAV主题
  12. 4K视频质量分析 白皮书
  13. 群晖系统设定定时NTP同步时间
  14. 淘宝开放平台深入浅出
  15. Windows动态链接库DLL和静态库的原理以及创建方法
  16. ORACLE安装入门篇OEL5.4安装ORACLE11g
  17. ADO Overview
  18. 阿里移动11.11 | Weex 在双十一会场的大规模应用
  19. python如何调用自己写的matlab函数和mat数据
  20. Android视频直播的实现(推流完整实现001)

热门文章

  1. [Go实战]CGO 入门系列-手把手教程3 调用 mysql (c语言类库)为案例
  2. 工具SecureCRT使用
  3. Unicode简介(转)
  4. [展览人周刊]华展云20170703期
  5. 虚拟机 如何打开3D加速
  6. 程序员如何保护自己的眼睛
  7. html逐帧动画,谈谈网页中实现逐帧动画
  8. 51单片机的应用——I/O口数据传送
  9. 浏览器的兼容性测试基础知识
  10. Java to Android