文章目录

  • 前言
  • 一、使用rgm的优点
  • 二、将rgm集成到验证环境
  • 三、rgm内建seq



前言

寄存器模型作为验证的重要部分,通过使用寄存器模型对总线做访问,代替直接从总线访问寄存器,寄存器模型与寄存器保持同步,通过寄存器模型更新寄存器,提高了测试用例的复用性。提供了后门访问寄存器的方式,从而不耗时地访问寄存器的值。


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用rgm的优点

(1)提高了 sequence 的复用性
对于功能验证而言,通过使用寄存器模型对总线做访问,代替了直接从总线访问寄存器。这种方式的优点在于以往由具体地址来指定寄存器的方式,将由寄存器名称来代替。并且寄存器模型封装的一些函数可以直接对寄存器的域进行操作,测试序列更易读。如果后期寄存器的地址做修改,或者是对寄存器域修改,测试激励中不需要跟着一起修改,提高了测试序列的复用性。
举个例子,寄存器模型中包含各个寄存器和寄存器域,我们在写测试激励是是对特定的寄存器或寄存器域的set()它们的desired value,再通过 updata( )的方式完成对寄存器的配置,这就避免了直接从总线上发送具体地址来对整个寄存器做配置。而如果不从寄存器模型对寄存器做配置,首先需要发送寄存器对应地址,并发送对应地址需要对寄存器各个域写入的配置。假如这时需求变了,对应寄存器的地址或者域发生变化。如果是前者通过寄存器模型访问,只需要去寄存器模型中修改相应的configure ()和map,测试激励不用变;而后者直接从总线访问寄存器则需要改变测试激励中的地址和需要写入寄存器的值。
(2)提供了后门访问方式
后门访问的方式可以在软件仿真时直接读取寄存器模型中的值,从而不耗时的获取寄存器的值。如果没有寄存器模型,只能通过启动sequence通过前门访问总线的方式来读取寄存器的值。后门访问不消耗仿真时间,在大型设计验证时,在其正常工作前需要配置众多寄存器,如果采用前门访问的方式会需要很长的时间,而如果使用后门访问方式配置会极大地缩短时间。

二、将rgm集成到验证环境

寄存器模型是用来使用可读性更高的方式对dut的寄存器模块进行控制。

通过set()+update()或mirror()的方式,将rgm中的值更新到reg中。

寄存器模型只更新镜像值 寄存器模型ral的好处_测试用例


验证平台与测试用例:

寄存器模型只更新镜像值 寄存器模型ral的好处_fpga开发_02


寄存器模型只更新镜像值 寄存器模型ral的好处_寄存器_03


寄存器模型只更新镜像值 寄存器模型ral的好处_寄存器模型只更新镜像值_04


① 对于mcdf_rgm的集成,倾向于顶层传递的方式,即最终从test层传入寄存器模型句柄。这种方式有利于验证环境mcdf_bus_env的闭合性,在后期不同test如果要对rgm做不同的配置,都可以在顶层例化而后通过uvm_config_db来传递。

② 寄存器模型在创建之后,还需要显式调用build()函数。而uvm_reg_block是uvm_object类型,因此其预定义的build()函数并不会自动执行,还需要单独调用。

③ 在顶层环境的connect阶段中,还需要将寄存器模型的map组件与bus sequencer和adapter连接。这样才能将map(寄存器信息)、sequencer(总线侧激励驱动)和adapter(寄存器级别和硬件总线级别的桥接)关联在一起。也只有通过这一步,adapter的桥接功能才可以工作。

三、rgm内建seq

在项目一开始的阶段,设计内部的逻辑还不稳定,对于verifier而言,如果想要跟上设计的进度,可以展开验证的部分无外乎是系统控制信号(时钟、复位、电源)和寄存器的验证。

在项目早期,寄存器模型的验证可以为后期各个功能点验证打下良好的基础。比如,通过内建的寄存器/存储序列可以实现完善的寄存器复位值检查,又比如检查读写寄存器的读写功能是否正常等。

不过有一些寄存器即便可以测试,也建议将其作为例外而过滤出去,例如一些重要的系统控制信号(时钟、复位、电源),当写入某些值以后,会使得系统全部或者局部复位、时钟也可能被关闭,这就可能阻碍寄存器的下一步检查。

所以UVM提供了一些特殊域,用来禁止sequence检查这些寄存器/存储。

寄存器模型只更新镜像值 寄存器模型ral的好处_测试用例_05


寄存器模型只更新镜像值 寄存器模型ral的好处_寄存器模型只更新镜像值_06