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

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

3天内不再提示

UVM为什么要引入寄存器模型呢?

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

为什么引入寄存器模型

新需求:为带寄存器的DUT搭建UVM仿真环境

为了读写DUT中的寄存器:UVM提供了 配置寄存器的总线 (bus_agent=sqr+drv+mon)——前门访问DUT中的寄存器值

为了方便参考模型查看DUT中寄存器的值:UVM提供了 寄存器模型 ,作用如下

  • 让前门访问操作更方便:将对DUT中寄存器的总线操作进行封装,通过寄存器模型这一暴露的接口可以方便实现对DUT的读写操作
  • 新加入后门访问操作:通过层次化引用来读写DUT中寄存器的值(不消耗仿真时间),同样使用寄存器模型作为暴露的接口。

DUT中的寄存器设定一个参考模型:引入UVM_PREDICT_DIRECT的predict操作,具体实现如下

  • 在my_model中, 每得到一个新的transaction, 就先从寄存器模型中得到counter的期望值( 此时与镜像值一致) ,
  • 之后将新的transaction的长度加到counter中,
  • 最后使用predict函数将新的counter值更新到寄存器模型中。predict操作会更新镜像值和期望值。
  • 在测试用例中, 仿真完成后可以检查DUT中counter的值是否与寄存器模型中的counter值一致

寄存器模型中的基本概念

  • uvm_reg_field:寄存器的域,是一个uvm_reg中的一个字段/域
  • uvm_reg:寄存器,至少包含一个uvm_reg_field
  • uvm_mem:存储器,
  • uvm_reg_file:引入后,uvm_reg配置时,其路径就不再需要uvm_reg_block的名字
  • uvm_reg_block:包含uvm_reg或者其他uvm_reg_block(可设计层次化的寄存器模型)。一个寄存器模型中至少包含一个uvm_reg_block
  • uvm_reg_map:存储所有寄存器的地址。每个reg_block内部, 至少有一个( 通常也只有一个) uvm_reg_map。

寄存器模型前门访问的实现

图片

参考模型>寄存器模型>转换器>bus_sequencer>driver>dut>driver---

寄存器模型后门访问的实现

  • 在reg_block中调用uvm_reg的configure函数时, 设置好寄存器的第三个路径参数(即后门访问路径:DUT内寄存器相对DUT顶层的路径,如:counter[31:16]表示dut中名为counter的寄存器的[31:16]位)
  • 在将寄存器模型集成到验证平台时, 设置好DUT的根路径hdl_root(这样才能定位DUT在哪里)
  • 在sequence中, 使用peek和poke任务 或者 UVM_BACKDOOR形式的read和write

寄存器模型中的期望值与镜像值

  • 期望值:希望向此寄存器中写入的值——可作为DUT中寄存器的参考模型
  • 镜像值:最大可能地与DUT保持同步

常用操作对期望值和镜像值的影响

  • 针对DUT寄存器的read&write操作:用操作后DUT中寄存器的值更新 期望值和镜像值(会分前门/后门访问)
  • 针对DUT寄存器的peek&poke操作:用操作后DUT中寄存器的值更新 期望值和镜像值 (只有后门)
  • 针对期望值的get&set操作:更新期望值, 不更新DUT中寄存器,不更新镜像值
  • update操作:用期望值 更新DUT中寄存器 和 镜像值
  • mirror操作:用DUT中寄存器的值 更新 期望值和镜像值
  • randomize操作:随机化 期望值,不随机化镜像值
  • predict操作:
    • 参数为UVM_PREDICT_READ和UVM_PREDICT_WRITE时:用操作后DUT中寄存器的值更新 期望值和镜像值——在read/peek和write/poke操作对DUT寄存器完成读写后自动调用
    • 参数为UVM_PREDICT_DIRECT时:人为更新期望值和镜像值,不更新DUT中寄存器

引入reg_predictor

引入reg_predictor的原因:配置寄存器的总线存在多个master时,可能存在 不通过寄存器模型 访问总线来配置DUT中寄存器的情况,这时 寄存器模型 就不能检查到 DUT中寄存器的变化 ,所以需要引入reg_predictor, 通过monitor检测总线,将采集到的tr发送给uvm_reg_perdictor 。如下图,

  • 虚线为通过自动预测途径更新寄存器模型的路径。
  • 实现为经由predictor更新寄存器模型的路径。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 转换器
    +关注

    关注

    27

    文章

    8206

    浏览量

    141812
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117721
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18964
  • DUT
    DUT
    +关注

    关注

    0

    文章

    180

    浏览量

    11997
收藏 人收藏

    评论

    相关推荐

    UVM寄存器模型的常规方法有哪些呢?

    在应用寄存器模型时, 除了利用它的寄存器信息, 还可以利用它来跟踪寄存器的值。
    的头像 发表于 11-25 09:27 745次阅读
    <b class='flag-5'>UVM</b><b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>的常规方法有哪些呢?

    IC验证"为什么学习UVM"

    什么?验证工程师验证工程师能够从本书学会如下内容:如何用UVM搭建验证平台,包括如何使用sequence机制、factory机制、callback机制、寄存器模型(register model)等。一些
    发表于 12-01 15:09

    IC验证之UVM常用宏汇总分析(四)

    : +define+MACRO 或者: +define+MACRO=100扩展寄存器模型中的数据位宽:`define UVM_REG_DATA_WIDTH 128扩展寄存器
    发表于 12-02 15:24

    从设计的角度一块儿来看下这些UVM寄存器模型

    对于搞验证的同学来讲,UVM里面中关于寄存器的概念自然是耳熟能详,对于搞设计的小伙伴来讲,也许我们对于使用的场景和UVM寄存器模型对照并没有
    发表于 06-23 16:06

    介绍UVM寄存器模型访问上的一些内容

    模型的构建和集成到验证环境的基础上。本文将展开介绍寄存器模型访问上的一些内容,包括寄存器域段的成员值、寄存器的前后门访问以及具体各种访问方法
    发表于 07-04 15:36

    如何构建UVM寄存器模型并将寄存器模型集成到验证环境中

    ),通常也叫寄存器模型,顾名思义就是对寄存器这个部件的建模。本文介绍的内容,包括对UVM寄存器
    发表于 09-23 14:29

    集成级的UVM寄存器模型

    UVM使得验证测试平台的结构得以标准化,各种复用策略及标准对于提高验证质量、缩短项目周期都非常有效。垂直重用是常见的复用策略之一,即同一项目测试平台复用于不同验证层次。验证中常将最底层的IP级验证平台向更高的集成层复用,而UVM寄存器
    发表于 09-15 11:49 15次下载
    集成级的<b class='flag-5'>UVM</b><b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>

    五个广泛使用的特殊寄存器

      下一步是学习如何在 IP-XACT 或 SystemRDL 中定义这些特殊寄存器。还需要学习如何在 RTL 中对其进行编码,并创建 UVM 寄存器模型并完成
    的头像 发表于 06-08 09:55 3727次阅读
    五个广泛使用的特殊<b class='flag-5'>寄存器</b>

    简化UVM寄存器模型的使用教程

    当我开始使用UVM RAL时,我无法理解UVM基类库对更新Desired和Mirror 寄存器的解释。觉得使用的术语并不能准确地反映里面的真实的意思。花了一些时间后,我想出了一个表格,它可以帮助我理解
    的头像 发表于 01-30 15:25 1644次阅读
    简化<b class='flag-5'>UVM</b><b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>的使用教程

    简述RAL寄存器模型基础

    RAL(Register Abstract Layer,寄存器抽象层),通常也叫寄存器模型,顾名思义就是对寄存器这个部件的建模。本文要介绍的内容,包括对
    的头像 发表于 02-14 16:55 2347次阅读
    简述RAL<b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>基础

    RAL寄存器模型操作图鉴

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器
    的头像 发表于 05-17 09:01 558次阅读
    RAL<b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>操作图鉴

    简化UVM寄存器模型的使用

    当我开始使用 UVM RAL 时,我无法理解 UVM 基类库对更新所需值和镜像值寄存器的值有什么看法。我还认为,所使用的术语没有准确反映其意图。花了一些时间后,我想出了一个表,帮助我了解寄存器
    的头像 发表于 05-29 10:15 752次阅读
    简化<b class='flag-5'>UVM</b><b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>的使用

    基于DUT内部寄存器值的镜像

    (outdated) 。 寄存器模型可以通过使用 uvm_reg_field::mirror() , uvm_reg::mirror() , 或 u
    的头像 发表于 06-24 12:02 558次阅读

    寄存器模型Register Model学习笔记

    UVM寄存器模型是一组高级抽象的类,用来对DUT中具有地址映射的寄存器和存储器进行建模。
    的头像 发表于 07-11 09:20 760次阅读
    <b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>Register Model学习笔记

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器
    的头像 发表于 07-12 09:37 702次阅读
    RAL<b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>操作指南