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

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

3天内不再提示

简化UVM寄存器模型的使用

星星科技指导员 来源:Bernie DeLay 作者:Vidyashankar Ramaswam 2023-05-29 10:15 次阅读

当我开始使用 UVM RAL 时,我无法理解 UVM 基类库对更新所需值和镜像值寄存器的值有什么看法。我还认为,所使用的术语没有准确反映其意图。花了一些时间后,我想出了一个表,帮助我了解寄存器模型 API 的行为,以及如何最好地调用它们。

在介绍该表之前,让我们看一下创建寄存器模型的过程:

创建寄存器格式规范

将规范转换为 UVM 寄存器模型

使用寄存器模型

创建寄存器格式规范:有许多寄存器格式可用于描述设计人员的寄存器规范。您可能熟悉广泛使用的 Synopsys RALF 格式。下图说明了使用 Synopsys Ralgen 工具将 RALF 格式转换为寄存器模型的流程。虚线表示您可以为不同的方法生成寄存器模型:

poYBAGR0CpeAN3jJAAGpVeG25uo771.png

使用寄存器模型:寄存器模型具有一组用于所需寄存器值和镜像寄存器值的变量。该文档使用术语“所需”和“镜像”,但为了避免混淆,我在下面将它们称为“主”和“镜像”。镜像变量的目的是始终保存或表示 RTL 的值,以便它可以用作记分板。有一堆 API 可用于对这些变量进行操作。这里的目的是阐明在模拟期间调用任何这些 API 时主变量和镜像变量会发生什么情况。

pYYBAGR0CpqAPSqrAAH16vAEplc459.png

让我们看一下可用的 API。我将它们分为三类:主动、被动和间接。

积极:物理事务在总线上执行读取和写入操作。Read()、write()、update() 和 mirror() 是使用物理接口在 DUT 上运行的活动 API。您可以选择使用后门机制,在这种情况下,它不会消耗模拟周期。您可以期待与使用前门访问时发生的相同的 RTL 寄存器行为.

被动:仅使用寄存器模型运行。set()、get() 和 predict() 是直接在模型上运行的被动 API。我也称 peek() 为被动,因为这不会在读取过程中更改寄存器值。例如,读取以清除寄存器 – 在执行 peek() 时不会被清除。

间接:有一组API间接地在DUT上运行,它们是peek()和poke()。请注意,peek() 和 poke() API 只是后门访问。虽然 poke 可以更新 RTL 寄存器,但它无法模拟物理读取期间可能发生的实际寄存器行为。例如,写一个要清除。

让我们简要介绍一下广泛使用的 API 定义。您可以在 UVM 类参考指南中找到更多详细信息

读取():使用前门或后门访问从 DUT 寄存器读取值。

写():使用前门或后门访问更新 DUT 寄存器。

更新():如果使用 set() 更改了主寄存器变量中的任何值,则可以使用此方法(批量更新)在 DUT 中写入所有这些寄存器。您可以调用单独的 write() 方法来获得相同的结果。

镜像(): 镜像维护 DUT 寄存器值的副本。Mirror() 方法读取寄存器,如果启用了检查,则可以选择将读回值与当前镜像值进行比较。 镜像可以使用物理接口(前门)或 peek()(后门)机制执行。

躲猫猫():使用后门访问机制从 DUT 寄存器读取值。

Poke():使用后门访问机制将 DUT 寄存器写入指定值。

预测(): 可以使用此方法将镜像变量值更改为预期值。

我运行了一些实验,下表显示了从测试台执行任何这些 API 时寄存器模型和 DUT 中会发生什么。

缩写
UMV – 更新主变量, UMrV – 更新镜像变量, AP – 自动预测
RDR – 读取 DUT 寄存器, UDR – 更新 DUT 寄存器, RMV – 读取主变量
FD – 前门, BD – 后门, * – 检查是否使用了UVM_CHEK, NA – 不适用

pYYBAGR0Cp6ARivPAAIs3vmCoZg721.png


要记住的几点

我没想到 peek() 和 poke() 方法会无条件更新镜像值。在查看了 UVM 源代码后,我发现 do_predit() 方法在 peek() 和 poke() 方法中被无条件调用。我还注意到,使用后门机制的 write() 和 read() 方法会在调用 do_predict() 时更新镜像寄存器,而无需检查此 get_auto_predict() 方法的输出。我看到唯一有条件调用的地方是具有前门访问权限的 write () 和 read() 方法。

在与专家讨论后,我了解到预期功能是确保镜像变量具有最新的寄存器值。类似地,使用后门访问的read()/write()更新镜像寄存器 — 这也是有意为之的。由于使用了后门程序,因此物理接口上不会观察到(当自动预测关闭时)来更新寄存器模型。因此,在所有情况下都必须对其进行更新。

审核编辑:郭婷

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

    关注

    31

    文章

    5305

    浏览量

    119924
  • API
    API
    +关注

    关注

    2

    文章

    1481

    浏览量

    61776
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    19126
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定义  寄存器是中央处理内的组成部分。寄存器是有限存贮容量
    发表于 03-08 14:26 2.2w次阅读

    数据寄存器,数据寄存器是什么意思

    数据寄存器,数据寄存器是什么意思 数据寄存器数据寄存器包括累加AX、基址寄存器BX、计数
    发表于 03-08 14:38 1.2w次阅读

    集成级的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 4491次阅读
    五个广泛使用的特殊<b class='flag-5'>寄存器</b>

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

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

    RAL寄存器模型操作图鉴

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

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

    新需求:为带寄存器的DUT搭建UVM仿真环境
    的头像 发表于 05-26 14:57 1732次阅读
    <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 840次阅读

    寄存器模型Register Model学习笔记

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

    RAL寄存器模型操作指南

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