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

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

3天内不再提示

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

jf_78858299 来源:blogs 作者:Vidyashankar Ramaswam 2023-01-30 15:25 次阅读

当我开始使用UVM RAL时,我无法理解UVM基类库对更新Desired和Mirror 寄存器的解释。觉得使用的术语并不能准确地反映里面的真实的意思。花了一些时间后,我想出了一个表格,它可以帮助我理解寄存器模型API 的行为,以及如何最好地调用它们。

在介绍表格之前,我们先来看看寄存器模型的创建过程:

  1. 创建寄存器格式规范
  2. 将规范转换为 UVM 寄存器模型
  3. 使用寄存器模型

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

图片

使用寄存器模型:寄存器模型具有一组用于Desired和Mirror寄存器值的变量。UVM文档使用了术语Desired 和Mirror, 但我在下面将它们称为Main和Mirror以避免混淆。Mirror变量的目的是始终保持或表示RTL的值,以便它可以用作Scoreboard。有很多 API 可对这些变量进行操作。此处的目的是阐明在仿真期间调用这些API时Main变量和Mirror变量会发生什么。

图片

让我们看一下可用的 API。我将它们分为三组:Active、Passive和Indirect。

Active: 在总线上通过物理事务做读写操作。Read()、write()、update() 和 mirror() 是Active API,它们使用物理接口在 DUT 上运行。您可以选择使用后门机制,在这种情况下它不会消耗仿真周期。与使用前门访问相同的RTL寄存器行为一致。

Passive:仅使用寄存器模型操作。set()、get() 和 predict() 是直接在模型上操作的Passive API。调用Passive peek() 不会在读取过程中改变寄存器值。例如,读取以清除寄存器——执行 peek() 时寄存器不会被清除。

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

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

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

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

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

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

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

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

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

我进行了一些实验,下表显示了当从Testbench执行任何这些 API 时,寄存器模型和 DUT 中发生的情况。

缩写

UMV – 更新主变量,UMrV – 更新镜像变量,AP – Auto Predict

RDR – 读取DUT寄存器,UDR – 更新DUT寄存器,RMV – 读取Main变量

FD – 前门,BD – 后门,* – 检查是否使用了 UVM_CHEK, NA – 不适用

图片

要记住的几点

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

在与专家讨论后,了解到这样设计是有意的,是为了确保镜像变量中具有最新的寄存器值。类似地,使用后门访问的 read()/write() 也会更新镜像寄存器——这也是有意的。因为使用了后门,所以不会在物理接口上观察到(当auto predict关闭时)更新寄存器模型的事务。因此,它必须在所有情况下进行更新。

作者:Vidyashankar Ramaswamy

来源:

https://blogs.synopsys.com/vip-central/2015/01/06/using-uvm-register-model/

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

    关注

    31

    文章

    5342

    浏览量

    120297
  • API
    API
    +关注

    关注

    2

    文章

    1499

    浏览量

    61988
  • UVM
    UVM
    +关注

    关注

    0

    文章

    182

    浏览量

    19168
收藏 人收藏

    评论

    相关推荐

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

    在应用寄存器模型时, 除了利用它的寄存器信息, 还可以利用它来跟踪寄存器的值。
    的头像 发表于 11-25 09:27 1874次阅读
    <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.3w次阅读

    集成级的UVM寄存器模型

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

    简述RAL寄存器模型基础

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

    RAL寄存器模型操作图鉴

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

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

    新需求:为带寄存器的DUT搭建UVM仿真环境
    的头像 发表于 05-26 14:57 1818次阅读
    <b class='flag-5'>UVM</b>为什么要引入<b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>呢?

    简化UVM寄存器模型的使用

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

    寄存器模型Register Model学习笔记

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

    RAL寄存器模型操作指南

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