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

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

3天内不再提示

SoC芯片上的寄存器设计与验证

冬至子 来源:长点芯 作者:SJ 2023-10-20 10:39 次阅读

就像芯片本身一样,SoC上的CSR设计也沿用了层级设计的方法。从最底层往上,寄存器可以被分为以下几个层级。

  1. Reg Field
  2. Reg
  3. Reg Block
  4. Memory Map

下面我们就来一一简单介绍一下,它们是如何在设计里面实现的。

1. Reg Field:

为了提升设计的效率,一个寄存器往往包含着许多功能的控制或是模块的状态,所以一个寄存器往往可以再向下分出几个更小的配置单元来达到不同的目的。比如说下图就是一个被设计了五个不同域的寄存器,每个域都有它特定的功能。

图片

CSR中的不同域

图片

A Register Block

2.Reg & Reg Block:

那么Reg本身不用说就是最常见的CSR unit了。而Reg Block则是根据SoC上不同模块的Reg Collection组成的一个寄存器块。比如对于SoC Top层的寄存器有控制 Direct Memory Access(DMA 的也有监视中断状态的寄存器。一个模块的寄存器往往都拥有同一个 offset address 。如下图所示。

3. Memory Map:

一个SoC上通常都有一个或多个processor cores,direct memory access(DMA),bus network interconnects和许多种 peripheral module 。而每个外设模块都拥有一个它所有CSRReg BlockMemory Map就是这些所有Reg Block的顶层模块,并为每个Reg Block定义了不同的地址范围,每个Block都有它一个对应的 base address 。而且对于不同的 processor core ,这些地址范围还可能不一样,根据不同的 rocessor bus(Maybe AHB or AXI)

图片

A Memory Map

第二部分:UVM中关于CSR的验证方法学

在了解UVM Reg Model这一部分之前,让我们先了解一下它的一些来源吧。

At the begining, UVM_RGM is not part of the Accellera standard, it is a user contribution from Cadence which is based on their use contribution from the OVM. UVM1.1 has a Register Abstaction as a part of the Accellera standard called UVM_REG. There is already multiple vendors that supprot generations producing UVM_REG descriptions

这是来自一个论坛上对于UVM_REG的介绍。大致意思就是UVM_REG的前身是 UVM_RGM ,在加入到Accellera标准之前,它其实是一个民间创建的package。所以我们可以简单理解UVM_REG就是一个UVM的library。

UVM_REG重新定义了TB和设计中的寄存器,它提供了一种不同的验证方法来简化对芯片上的寄存器的仿真。那么它到底是如何简化的呢?

就像设计中寄存器的层级结构,在搭建寄存器验证环境的时候我们当然也想要一个能模仿DUT中CSR行为的结构,所以UVM Reg Model也提供了

  1. UVM Reg Field Class
  2. UVm Reg Class
  3. UVM Reg Block Class

1. UVM Reg Field Class:

正如前面所提,UVM将设计中的CSR每一层都抽象成了一种class。对于Reg Field而言就是uvm_reg_field这个class了。一般它在Reg Class中被声明成rand类型的变量。

2. UVM Reg Class:

对于Reg本身,UVM定义了uvm_reg这一class,就像所有的Reg field需要继承自uvm_reg_field一样,寄存器验证环境中的每个寄存器都要继承自uvm_reg。如下code所示,Reg Field被声明成rand类型的变量便于我们有时候做一些特殊的case,后面会介绍到。

就像所有uvm的class一样,我们需要将它实例化才能够真正使用它。这里我们看到一个函数——‘configure()‘这个configure()函数十分重要,它决定了这个寄存器中每个寄存器域的属性,决定了这个域的访问权限,是否具有失忆性等等。这在后面的验证过程中十分重要!!!

图片

在一个uvm_reg中声明不同rand类型的域

3. UVM Reg Block Class:

当我们在环境里面定义了所有需要被仿真的寄存器后,就需要将它们集合在一起方便做一些更高层级的操作,就像DUT中的CSR一样。这个时候我们就用到了uvm_reg_block这个class了。以下是一段uvm block的code。

图片

在uvm_block中声明所有这个block中的CSR

除了要声明,实例化这些寄存器以外,也不要忘记使用configure()定义这些寄存器的属性,并将它们添加到default map当中。一个reg_block的对象就是一个Register model然后通过它可以访问到里面所有的寄存器进行读写操作。

图片

configure函数

第三部分:如何用UVM搭建CSR验证环境

到目前为止,我们只知道了如何去构建一个类似于DUT中的寄存器仿真模型(有点reference model内味儿)。但如何让环境中的寄存器模型“动起来”,like模拟DUT中CSR的读写操作还仍未知晓。

当然,这只是寄存器仿真环境的一部分,要想进行寄存器操作,我们还需要向bus发送bus transaction,就像直接通过普通的bus agent向外设寄存器配置接口发送读写的transaction一样。

但在我们继续这个环境的剩余部分之前我还需要向你们介绍UVM Reg中两个重要的概念——Mirror Value和Desired Value。这两个概念十分重要,对于理解后面UVM Reg内建的各种task和sequence帮助巨大!

Desired Value:

这个value可以理解成我们期望DUT寄存器中的值。寄存器模型中的这个变量其实就是我们预先设定好而后再更新同步到DUT中的寄存器里。如下图:

图片

CSR中的期望值

Mirrored Value:

而mirror value则是尽它最大的可能反应实际DUT中的值,每次我们通过寄存器模型发送读写操作到DUT中,对应寄存器的mirror value都会被更新。如下图:

图片

CSR中的镜像值

实际上,整个寄存器环境一共有四个组成部分:

图片

寄存器模型环境整体

  1. Register Model
  2. Agent
  3. Adapter
  4. Predictor

Register Model就是上文用了大量笔墨提到的一个组成部分。Agent也与其他常规验证环境中的agent类似,依据不同的protocol将不同的transaction通过agent作为激励送到DUT中。下面我们将重点介绍一下在寄存器环境中特有的两个组成部分:AdapterPredictor

Adapter:

由于寄存器模型中的seq有它特有的封装方式,所以为了将寄存器模型类型的seq转化成bus agent可识别的bus transaction,我们需要一个转换器,同理来自bus agent的transaction也需要经过Adapter的转换才能将来自DUT的信息同步到寄存器模型中。Adapter中最重要的两个函数就是reg2bus()bus2reg() 了,分别对应上述的两个方向的transaction的转化。

Predictor:

Predictor的作用也是用来同步寄存器模型中的值的。但经常,如果我们只通过寄存器模型里发起sequence,我们只拥有一个adpter就足够同步寄存器模型里面的值通过寄存器模型built-in的task——read(),write(),因为这些内建的task中都有predict()函数,它的作用就是来将我们配置或从DUT收集来的值同步到寄存器模型中。但如果有一些配置DUT中寄存器的transaction来自于其他sequencer发送到bus agent的话,这个时候寄存器模型就不能实时的更新了,这有可能使我们最后的check mismatch。

所以predictor的main idea就是在环境中增添了一个连接agent中monitor的component来无时无刻监视着bus agent的动态,只要有任何write/read transaction经过,都会将其同步回寄存器模型中。

图片

集成了predictor的寄存器模型环境

ok,现在我们已经具备了寄存器模型环境中的所有所需要的“砖头”了,那么接下来就是如何将他们搭建成一个完整的房子了。如同其他所有验证环境一样,我们要在build phase将它们一个个实例化,然后在connect phase中再将它们衔接在一起。以下是一个简易的寄存器模型环境的实例,仅供参考。

结语

寄存器虽然在整个芯片当中作为一个设计风险较小的组成部分,但在SoC验证过程中是要优先完成验证的部分。如果由于一个顶层寄存器的问题而导致一个芯片上大部分模块无法正常工作是很耽误验证时效的。对于寄存器验证来讲,特别是一个有很多寄存器的芯片来讲,如何通过UVM Reg进行高效,灵活的寄存器验证十分重要!

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

    关注

    3

    文章

    117

    浏览量

    69430
  • SoC芯片
    +关注

    关注

    1

    文章

    530

    浏览量

    34477
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18964
  • 状态寄存器
    +关注

    关注

    0

    文章

    37

    浏览量

    7001
  • DUT
    DUT
    +关注

    关注

    0

    文章

    180

    浏览量

    11997
收藏 人收藏

    评论

    相关推荐

    解析CPU中的寄存器

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

    一个优秀的SOC验证环境应该具备哪些功能呢

    funct7,funct3,opcode又是什么呢?通过查询 riscv 手册可以查到以下结果。由此我们组成一个简单的加法的操作指令,CPU拿到这个操作指令之后就可以进行寄存器的加法运算。事实除了上述
    发表于 05-31 11:39

    SOC芯片寄存器外设地址集合资料介绍

    1、SOC寄存器外设地址集合之前,说明了,当外部需要增加寄存器的时候,需要更改总线互联模块。在总线互联模块中对于读数据和使能信号是每一个寄存器都有一个连线和总线互联模块相连的,如果
    发表于 07-19 15:17

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

    ),通常也叫寄存器模型,顾名思义就是对寄存器这个部件的建模。本文要介绍的内容,包括对UVM寄存器模型的概述,如何构建寄存器模型,以及如何将寄存器
    发表于 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次阅读

    寄存器传输级低功耗设计方法

    寄存器传输级的低功耗设计对降低整个芯片的功耗作用非常显著,本文讨论的三种寄存器传输级低功耗设计方法,经验证对动态功耗的降低很有效。
    发表于 02-16 18:12 1350次阅读
    <b class='flag-5'>寄存器</b>传输级低功耗设计方法

    寄存器与移位寄存器

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

    芯片寄存器

    芯片寄存器作为一个嵌入式开发人员,从接触第一块单片机的时候,就一定会听到一个此,叫做寄存器。单片机的很多功能都是通过配置修改寄存器来实现的。我们了解
    发表于 11-23 16:21 49次下载
    <b class='flag-5'>芯片</b>与<b class='flag-5'>寄存器</b>

    GPIO寄存器

    每组IO口有10个寄存器组成,如果芯片有GPIOA~GPIOI,9个组那么一共有90个寄存器如果配置一个IO口需要2个位,那么刚好32位寄存器配置一组IO口16个IO口如果配置一个IO
    发表于 12-08 17:06 5次下载
    GPIO<b class='flag-5'>寄存器</b>

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

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

    简述RAL寄存器模型基础

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

    车载芯片安全寄存器的布局设计

    我们知道在车载芯片的数字实现中,常用的安全机制有安全寄存器(Safety Register),所以识别出关键路径上失效风险高的寄存器(也就是热点寄存器)就非常重要,需要EDA工具重点发
    的头像 发表于 05-22 10:25 944次阅读
    车载<b class='flag-5'>芯片</b>安全<b class='flag-5'>寄存器</b>的布局设计