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

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

3天内不再提示

RAL寄存器模型操作图鉴

sanyue7758 来源:芯片学堂 2023-05-17 09:01 次阅读

寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器的值。对寄存器模型的操作,可以通过调用模型提供的方法来实现。这些方法的调用,建立在已经完成寄存器模型的构建和集成到验证环境的基础上。

本文将展开介绍寄存器模型访问上的一些内容,包括寄存器域段的成员值、寄存器的前后门访问以及具体各种访问方法图示。

01 寄存器域段

按照前文介绍UVM寄存器模型基础时的描述,寄存器域段(uvm_reg_field)是构造寄存器模型最小的功能单元。这也就意味着,寄存器的值,是由多个域段的值拼接起来的。那么,在介绍寄存器的访问方法之前,有必要先看看寄存器的域段都是怎么存放值的。

从uvm_reg_field类型定义的源码可以看到,跟域值相关的成员变量有这么几个:value, m_mirrored, m_desired, m_reset[“HARD”]。它们的数据类型均为uvm_reg_data_t,其实也就是UVM对bit unsigned [`UVM_REG_DATA_WIDTH-1:0]的类型重命名。

bcc1f0a6-f44c-11ed-90ce-dac502259ad0.png

尽管除value以外其他三个成员都是local可见的,但是知道这些local成员的存在和意义,对理解和使用后面要介绍的操作方法会有很大的帮助。

02 前后门访问

寄存器的前门访问(front door access),指的是Testbench所发出的寄存器操作,都会被转换成总线事务,并实际驱动到DUT的总线上,会占用总线和消耗总线周期。换句话说,这种寄存器访问方式跟其他硬件组件访问寄存器一样,是从”明面“上对寄存器进行访问。

寄存器的后门访问(back door access),指的是用户通过仿真器,对DUT中指定路径的寄存器信号进行改写或读取。这种寄存器访问方式不需要消耗仿真时间,毕竟”走后门“总是要比走前门要方便快捷很多。后门访问的前提是,在建立寄存器模型的时候,指定了对应寄存器在DUT中的路径(HDL_path)。

bcdd64e4-f44c-11ed-90ce-dac502259ad0.png

后门访问带来的坏处是,这种直接改写和读取寄存器的操作不会被反映成总线行为,也就无法覆盖到寄存器访问涉及到的总线系统,以及总线上其他相关的逻辑模块。举个栗子,后门访问可以掩盖掉总线系统上本来存在着的地址译码错误。总结起来:除一些特殊的测试场景,寄存器的访问少走后门,多走前门。

下一小节介绍寄存器模型操作方法的同时,也会提到哪些是对寄存器的前门访问,哪些是后门访问。

03 寄存器模型方法

寄存器模型方法有很多,大致如下图所示。由于方法较多,本文就不再列出这些方法的原型,有需要的读者完全可以通过UVM提供的类型手册找到非常详细的函数原型和说明。

bcf9307a-f44c-11ed-90ce-dac502259ad0.png

对寄存器的访问方法,无非是对DUT中寄存器,或者是对寄存器模型中各个成员值的改写或读取。因此,可以整理出每种方法对这些值的影响(见下图),然后总结出来常用场景下的操作组合。下图中彩色渐变格式表示操作的开始。

bd0bb7b8-f44c-11ed-90ce-dac502259ad0.png

在大多数的应用场景,对寄存器的访问完全可以通过write(value) & read()这样的组合来完成,也可以选用set(value)先修改期望值,然后在通过update()函数去做同步。这样的好处是,如果RTL寄存器的值已经是我们的期望值,那么就不会也没有必要再浪费总线资源去重新配置一遍。






审核编辑:刘清

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

    关注

    31

    文章

    5342

    浏览量

    120297
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59769
  • UVM
    UVM
    +关注

    关注

    0

    文章

    182

    浏览量

    19168
  • DUT
    DUT
    +关注

    关注

    0

    文章

    189

    浏览量

    12376

原文标题:SystemVerilog | UVM | RAL寄存器模型操作图鉴

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    寄存器是什么?怎么操作寄存器点亮LED灯?

    寄存器,是集成威廉希尔官方网站 中非常重要的一种存储单元,通常由触发组成。在集成威廉希尔官方网站 设计中,寄存器可分为威廉希尔官方网站 内部使用的寄存器和充当内外部接口的寄存器这两
    的头像 发表于 07-21 16:59 4026次阅读
    <b class='flag-5'>寄存器</b>是什么?怎么<b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>点亮LED灯?

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

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

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

    模型操作图鉴(前后门访问API),以及寄存器覆盖率的收集。01 寄存器模型概述为什么要对寄存器
    发表于 09-23 14:29

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

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

    寄存器操作方法_对寄存器操作的通用方法总结

    本文主要详解寄存器操作方法以及对寄存器操作的通用方法总结,具体的跟随小编来了解一下。
    的头像 发表于 05-22 15:53 2.3w次阅读

    寄存器变量

    C语言中使用关键字register来声明局部变量为寄存器变量。寄存器变量的值会被存放在CPU的寄存器中,每当需要使用它们时,CPU就可以直接使用,而无须再通过控制从内存中获取。由于
    发表于 06-03 10:13 2373次阅读

    使用寄存器的逻辑操作指令是什么?

    操作系统中硬件相关的部分集中体现在汇编指令和对寄存器操作中,因此我们对ARM体系结构的介绍也围绕ARMv8-A的汇编指令和寄存器来展开。
    的头像 发表于 06-18 15:49 3692次阅读

    C语言:寄存器操作

    C语言:寄存器操作
    发表于 01-13 12:56 6次下载
    C语言:<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    STM32的寄存器操作

    STM32的寄存器操作在使用STM32单片机编程时一般都用ST给的库函数编程,库函数编程的底层就是对单片机寄存器操作,库函数就是一系列寄存器
    发表于 01-13 15:43 19次下载
    STM32的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

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

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

    简述RAL寄存器模型基础

    ,以及如何将寄存器模型集成到验证环境中。篇幅原因,将在下一篇文章再给出寄存器模型操作图鉴(前后门访问API),以及
    的头像 发表于 02-14 16:55 2715次阅读
    简述<b class='flag-5'>RAL</b><b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>基础

    简化UVM寄存器模型的使用

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

    寄存器模型Register Model学习笔记

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

    RAL寄存器模型操作指南

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

    如何在shell中操作寄存器

    shell 中操作寄存器可以使用 devmem 命令. devmem 命令其实就是上述应用层操作寄存器生成的可执行文件,只不过busybox已经帮我们实现了。 devmem 命令格式:
    的头像 发表于 09-26 16:39 1048次阅读