• UVM学习笔记—快速入门篇


    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/#)

  • 相关阅读:
    【闲聊杂谈】源码追踪Spring的三级缓存及循环依赖
    CSDN编程竞赛第八期 | 参赛经历分享
    开发人员都需要知道的几款优秀数据库管理工具
    微信小程序_20,使用第三方npm包
    OSPF高级配置——虚接口,NSSA
    【移动开发】2022 年 12 大移动应用程序开发趋势
    jvm性能监控、故障处理命令行工具详解(jps、jstat、jinfo、jmap、jhat、jstack)(宝藏博文)
    【蓝桥杯 第十五届模拟赛 Java B组】训练题(A - I)
    【Django毕业设计源码】Python考试题库练习系统
    【Java】x-easypdf: 一种简单易用的PDF处理库
  • 原文地址:https://blog.csdn.net/coachip/article/details/126867226