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

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

3天内不再提示

简述RAL寄存器模型基础

jf_78858299 来源:芯片学堂 作者:JKZHAN 2023-02-14 16:55 次阅读

RAL(Register Abstract Layer,寄存器抽象层),通常也叫寄存器模型,顾名思义就是对寄存器这个部件的建模。本文要介绍的内容,包括对UVM寄存器模型的概述,如何构建寄存器模型,以及如何将寄存器模型集成到验证环境中。篇幅原因,将在下一篇文章再给出寄存器模型的操作图鉴(前后门访问API),以及寄存器覆盖率的收集。

01 寄存器模型概述

为什么要对寄存器建模,可能是初学者问得较多的问题。简单地说,寄存器建模要做的事情,就是在软件的世界里面,复刻RTL中的寄存器。既然是面向软件世界做的事情,自然就是为软件所用,要么方便软件观测,要么方便软件使用。

图片

这里的软件,指的是整个验证环境所构造出来的面向对象的世界。有了寄存器模型,软件世界中的参考模型(reference model)可以很方便的获取到当前RTL的功能配置和状态,我们也可以很方便的收集到对寄存器各个域段甚至位的测试覆盖情况等等。

要达成这一目标,就需要考虑两个基本的问题:如何对寄存器进行建模,以及建立怎样的机制才可以让寄存器模型是“实时”复刻RTL寄存器的(上图中的虚线箭头)。这也是本文后面两个小节要介绍的内容。

02 构造寄存器模型

寄存器模型的框架实际上跟RTL中的寄存器组没有什么两样。寄存器组中有的,寄存器模型也应该要有,顶多是多了一些抽象。基于这个想法,构造寄存器模型的工作,便可以从硬件寄存器组的设计,一一映射为对应的数据结构。

寄存器最小的功能单元是域段(field)。一个寄存器要切分成多少个域段、每个域段的位宽、默认值、读写属性以及分别用于什么功能的控制或状态的指示,是根据功能规范来定义的。对域段的建模,UVM类库提供的类型叫uvm_reg_field。

寄存器是可作为单个实体被访问的多个域段的集合,它可以被映射到一个或者多个地址上(memory-mapped)被访问。对寄存器的建模,UVM提供的类型叫uvm_reg。为了提供后门访问(backdoor access),uvm_reg还增加了成员来表示其对应的硬件寄存器在RTL中的层次路径。

寄存器访问译码表,或者叫memory map,是寄存器接口从访问地址到使能对应寄存器所需要的查找表。这张表中指定了每个寄存器的偏移地址(offset)、访问属性、大小端、对应的总线等配置。对memory map的建模,UVM提供的类型叫uvm_reg_map。

图片

多个寄存器及其访问译码表最终构成寄存器组。在同个数字系统的不同总线视角下,寄存器组可以映射到不同的基地址(base)。因此,一个寄存器组除了可以包含多个寄存器,还可以有多个译码表。UVM针对寄存器组的建模提供的类型叫uvm_reg_block。为了便于集中管理,uvm_reg_block还可以包含其他子uvm_reg_block。

在同一类族中,UVM还提供了uvm_mem类,用于对连续地址存储空间的建模。uvm_mem对象也可以被集成到uvm_reg_block中,并通过uvm_reg_map做地址映射,

此外,UVM还提供了uvm_reg_file类。这个类更像是一个对象容器,可以用来装载多个寄存器(uvm_reg)和其他uvm_reg_file,以便对相同规格的寄存器进行多次例化。

03 集成到验证环境

如果只是简单把寄存器模型集成到验证环境,那么只要例化寄存器模型就可以了。现在主要的问题是,建立怎样的机制才可以让寄存器模型“实时”复刻RTL寄存器的值。为了解决这个问题,UVM引入Prediction机制,用到了两个新的组件:Adapter和Predictor。

Adapter,可以翻译为适配器,它的作用是寄存器访问事务和总线事务的相互转换。寄存器访问事务对数据的封装格式相对固定,一般包含读写类型、地址、数据和字节掩码。而总线事务则根据不同的总线协议会有所不同。因此,Adapter扮演了中间做事务转换的角色,其主要实现的函数为reg2bus和bus2reg。

图片

Predictor,是保持寄存器模型“实时”复刻RTL寄存器值的关键组件。Predictor翻译过来叫预测器,可能反而不是很好理解,对其功能比较好的描述我觉得应该是“monitor and update the RAL Model”。根据是否使用外部predictor,有两种应用方式:Implicit Prediction和Explicit Prediction。

隐式预测(Implicit Prediction):用户使用寄存器模型中memory map默认的predictor,当开启其预测功能之后,如果用户在测试用例中通过寄存器模型的API(下篇文章会介绍都有哪些API)去发起硬件寄存器访问操作,该操作会自动被predictor捕捉,并在该操作完成之后自动同步到寄存器模型的寄存器中。下图为了方便展示,将原本同属于寄存器模型中的memory map、registers和adapter分开画了。

图片

显式预测(Explicit Prediction):用户基于UVM提供的基类uvm_reg_predictor实现preditor,并将monitor的总线事务传递给该predictor,同时将其关联到寄存器模型的memory map和对应总线事务的adapter适配器。工作逻辑是这样的:该predictor相当于可以根据memory map监测总线上的寄存器访问行为,并将该行为通过adapter转换成寄存器事务,最终用于更新寄存器模型。

图片

Explicit Prediction相对于Implicit Prediction,除了监视通过寄存器模型API对寄存器的访问操作,还可以覆盖到其他测试序列(sequence)通过总线对寄存器的直接访问,这一点会使它更加通用。

相应的代码示例,也将在下一篇UVM系列文章中提供,欢迎关注。

参考资料

[1] Accellera Systems Initiative. "Universal Verification Methodology (UVM) 1.2 Class Reference" (2014).

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

    关注

    30

    文章

    5028

    浏览量

    117719
  • API
    API
    +关注

    关注

    2

    文章

    1382

    浏览量

    60991
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18964
收藏 人收藏

    评论

    相关推荐

    解析CPU中的寄存器

    8位寄存器在16位寄存器中,而16位寄存器在32位寄存器中。
    发表于 09-19 10:10 2901次阅读

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

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

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

    寄存器(register)是数字系统中非常重要的部件,它常被用于数字系统的功能控制(control)和状态(status)显示。RAL(Register Abstract Layer,寄存器抽象层
    发表于 09-23 14:29

    寄存器与移位寄存器

    寄存器与移位寄存器 寄存器是用来寄存数码的逻辑部件,所以必须具备接收和寄存数码的功能。任何一种触发器都可以构成
    发表于 03-12 15:19 59次下载

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

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

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

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

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

    32位寄存器,32位寄存器是什么意思  从X8086开始学了一年,第一个ASM的程序就是变32换16进制的程序,不过现在叫我从新开始写ASM程
    发表于 03-08 17:26 1.7w次阅读

    寄存器与移位寄存器

    寄存器与移位寄存器:介绍寄存器原理和移位寄存器的原理及实现。
    发表于 05-20 11:47 0次下载

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

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

    RAL寄存器模型操作图鉴

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

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

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

    简化UVM寄存器模型的使用

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

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

    寄存器模型保持着DUT内部寄存器值的 镜像(mirror) 。 镜像值不能保证是正确的,因为寄存器模型只能感知到对这些
    的头像 发表于 06-24 12:02 556次阅读

    寄存器模型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次阅读
    <b class='flag-5'>RAL</b><b class='flag-5'>寄存器</b><b class='flag-5'>模型</b>操作指南