0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UVM学习笔记(一)

冬至子 来源:多读点书 作者:夕文x 2023-05-26 14:38 次阅读

第1章与UVM的第一次接触

基本没有感兴趣的内容,推荐直接从第2章开始,防止劝退。

第2章一个简单的UVM验证平台

2.1 验证平台的组成

图片

图片

2.2 只有driver的验证平台

2.2.1 最简单的验证平台

driver应该派生自uvm_driver,而uvm_driver派生自uvm_component。相关派生关系如下图所示:

图片

2.2.2 加入factory机制

factory机制的实现被集成在了一个宏中:uvm_component_utils。它可以将my_driver注册在UVM内部的一张表中。只要在定义一个新的类时使用这个宏,就相当于把这个类注册到了这张表中。然后使用run_test时,可以自动创建一个类的实例并调用其中函数main_phase。其中uvm_component_utils的入参是类名my_driver,而run_test入参为在UVM内部表中注册的字符串名(注意:这里的字符串名必须和类名相同)。

图片

2.2.3 加入objection机制

objection机制用来控制仿真的开始和结束。在每个phase中,UVM会检查是否有objection被提起(raise_objection),如果有,那么等待这个objection被撤销(drop_objection)后停止仿真;如果没有,则马上结束当前phase。

图片

2.2.4 加入virtual interface

目的:杜绝在验证平台中使用绝对路径,从而增强验证平台的可移植性。

SV和UVM中端口使用的比对:

  • sv中
    • 使用interface,通过对top_tb.my_driver.xxx的引用实现赋值。
  • UVM中
    • 引入virtual interface:解决UVM类中无法实例化接口的问题。
    • 引入config_db机制:解决top中无法通过实例模块引用内部接口的问题(UVM通过run_test语句实例化了一个脱离了top_tb层次结构的实例,建立了一个新的层次结构,导致top_tb.my_dut.xxx可以,但top_tb.my_driver.xxx不可以)。具体而言分为set和get两步操作
    • 引入了build_phase:为config_db机制的实现服务。它也是UVM中内建的一个phase,在new函数之后main_phase之前执行(是一个函数phase,不消耗仿真时间)。通过config_db的set和get操作来传递一些数据,以及实例化成员变量等。

config_db机制中set方法的使用

图片

  • 第一个参数:目标get所在实例的参考路径索引(举例:“null”,“this”)。在top_tb中设置virtual interface时,由于top_tb不是一个类,无法使用this指针,所以设置set的第一个参数为null。
  • 第二个参数:目标get所在实例的路径索引,它是相对于第一个参数的相对路径(举例:"uvm_test_top"、"uvm_test_top.drv")
  • 第三个参数:一个名字,建立set与get之间的对应关系
  • 第四个参数:set要传递个get的信号,信号为uvm_config_db#(xxx)中xxx的实例。

进一步解释:

  • 无论传递给run_test的参数是什么,创建的实例的名字都为uvm_test_top。
  • 由于set操作的目标是my_driver,所以set函数的第二个参数就是uvm_test_top。
  • set函数与get函数使用双冒号是因为这两个函数都是静态函数,而uvm_config_db#( virtual my_if)则是一个参数化的类,其参数就是要寄信的类型。

uvm_fatal宏的理解

  • 类似于断言,条件为假时,结束仿真。

路径索引的概念:

  • UVM采用树形结构,对于树中任何一个结点,都有一个与其相应的字符串类型的路径索引。路径索引可以通过get_full_name函数来获取,把下列代码加入任何UVM树的结点中就可以得知当前结点的路径索引:
$display("the full name of current component is: %s", get_full_name());
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    551

    浏览量

    20123
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18964
  • PHASE
    +关注

    关注

    0

    文章

    9

    浏览量

    10787
收藏 人收藏

    评论

    相关推荐

    新手学习System Verilog & UVM指南

    新手学习SystemVerilog & UVM指南 从刚接触System Verilog以及后来的VMM,OVM,UVM已经有很多年了,随着电子工业的逐步发展,国内对验证人才的需求也会急剧
    发表于 03-11 16:24

    IC验证"为什么要学习UVM呢"

    推出了RGM,补上了这短板。只是很遗憾的是,RGM并没有成为OVM的部分,要想使用RGM,需要额外下载。现在OVM已经停止更新,完全被UVM代替。UVM(Universal
    发表于 12-01 15:09

    IC验证"个简单的UVM验证平台"是如何搭建的(六)

    连载....小编考虑到个好的连续剧不能没有结尾,所以后期会持续更新ic验证的UVM相关内容.......今天更新个最简单的验证平台,只有driver的验证平台.....driver是验证平台最基本
    发表于 12-04 15:48

    数字IC验证之“什么是UVM”“UVM的特点”“UVM提供哪些资源”(2)连载中...

    原文链接:https://zhuanlan.zhihu.com/p/345775995大家好,我是哥,上章内容主要讲述两个内容,芯片验证以及验证计划。那本章我们主要讲述的内容有介绍什么是uvm
    发表于 01-21 16:00

    什么是uvmuvm的特点有哪些呢

    大家好,我是哥,上章内容我们介绍什么是uvmuvm的特点以及uvm为用户提供了哪些资源?本章内容我们来看
    发表于 02-14 06:46

    请问下在UVM中的UVMsequences是什么意思啊

    UVM方法学中,UVMsequences 是寿命有限的对象。UVM sequences从uvm_sequence_item基类扩展得到,uvm_sequence_item进
    发表于 04-11 16:43

    谈谈UVM中的uvm_info打印

    uvm_report_info(xxx)函数调用当前m_rh的report(xxx)函数来打印message。但在m_rh.report(xxx)内部其实是调用uvm_report_server class来打印消息的。uvm
    发表于 03-17 16:41

    UVM中seq.start()和default_sequence执行顺序

      1. 问题  假如用以下两种方式启动sequence,方法1用sequence的start()方法启动seq1,方法2用UVM的default_sequence机制启动seq2。那么seq1
    发表于 04-04 17:15

    我的第UVM代码——Hello world

    `uvm_component_utils有关 仿真命令: irun -sv -uvmhome \\\\ /.../ies/tools/methodology/UVM/CDNS-1.2/sv \\\\ hello_world.sv 仿真结果如下: 最后,再用
    发表于 11-03 10:18

    UVM学习笔记(二)

    更规范地传递信息,更方便地引入transaction级的随机激励。(一般来说,物理协议中的数据交换都是以帧或者包为单位的,而transaction就类似于这里包的概念)
    的头像 发表于 05-26 14:43 724次阅读
    <b class='flag-5'>UVM</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>(二)

    UVM学习笔记(三)

    sequence机制作用:用于产生激励。其分为两部分,一是sequence,二是sequencer。
    的头像 发表于 05-26 14:46 776次阅读
    <b class='flag-5'>UVM</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>(三)

    UVM中的uvm_do宏简析

    uvm_do宏及其变体提供了创建、随机化和发送transaction items或者sequence的方法。
    的头像 发表于 06-09 09:36 2903次阅读
    <b class='flag-5'>UVM</b>中的<b class='flag-5'>uvm</b>_do宏简析

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVM中的uvm_config_db,在UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-20 17:28 796次阅读

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVM中的uvm_config_db,在UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-29 16:57 613次阅读

    一文详解UVM设计模式

    本篇是对UVM设计模式 ( 二 ) 参数化类、静态变量/方法/类、单例模式、UVM_ROOT、工厂模式、UVM_FACTORY[1]中单例模式的补充,分析静态类的使用,UVM中资源池的
    的头像 发表于 08-06 10:38 899次阅读
    一文详解<b class='flag-5'>UVM</b>设计模式