RAL 寄存器模型 --- 概述

本文介绍了在UVM验证环境中如何使用寄存器模型简化寄存器访问,包括寄存器检测方法、寄存器模型的作用(如解耦Scoreboard和Sequence、简化流程等)、Froutdoor和Backdoor的访问方式,以及RAL模型的层次结构,重点阐述了Adapter在模型中的关键作用和连接机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

寄存器模型概述

1.为什么要使用寄存器模型?

1)寄存器检测的方法

2)寄存器模型的作用

3)Froutdoor

4)Backdoor

 2.RAL模型层次结构

1)uvm_reg_field

2)uvm_reg

3)uvm_reg_block

4)uvm_reg_map

3.Adapter


寄存器模型概述

1.为什么要使用寄存器模型?

在复杂的UVM验证环境中,访问DUT中的寄存器可能会涉及到多个模块和层级的交互。初学者可能会发现手动处理这些交互过于复杂。

使用UVM寄存器模型,验证工程师可以直接调用内置的函数来访问寄存器,而无需处理复杂的交互过程。

1)寄存器检测的方法

通常来说,DUT中会有一组控制端口,通过控制端口,可以配置DUT中的寄存器,DUT可以根据寄存器的值来改变其行为。这组控制端口就是寄存器配置总线。

a. 无寄存器模型:

启动读写的sequence进出完成,sequence产生的读写事物通过sequencer传入到对应的driver当中,driver讲对应的信号驱动给dut中,dut根据驱动的信号做出相应的动作,如改变寄存器的值或者返回寄存器的值,monitor再从接口上捕获到接口信息,可以判断drive操作的哪个寄存器以及对应的值,再讲信息送到sb中,进行对比。

这个方法很难在其他组件中在适当的时间启动读写寄存器。

ral提供了用于对设计当中的寄存器和存储器进行建模的register model,是一套数据结构,需要使用他们建立寄存器模型。

b.有寄存器模型:

有了寄存器模型之后,scoreboard只与寄存器模型打交道,无论是发送读的指令还是获取读操作的返回值,都可以由寄存器模型完成。有了寄存器模型后,可以在任何耗费时间的phase中使用寄存器模型以前门访问或后门(BACKDOOR)访问的方式来读取寄存器的值,同时还能在某些不耗费时间的phase(如check_phase)中使用后门访问的方式来读取寄存器的值。

前门访问与后门访问是两种寄存器的访问方式。所谓前门访问,指的是通过模拟cpu在总线上发出读指令,进行读写操作。在这个过程中,仿真时间($time函数得到的时间)是一直往前走的。

UVM寄存器模型的本质就是重新定义了验证平台与DUT的寄存器接口,使验证人员更好地组织及配置寄存器,简化流程、减少工作量。

2)寄存器模型的作用

  1. 解耦Scoreboard和Sequence

    有了寄存器模型,Scoreboard可以通过寄存器模型间接访问DUT中的寄存器和存储器,而不需要直接与Sequence紧密耦合。这种解耦使得Scoreboard的设计更加灵活,能够更好地适应复杂的验证环境。
  2. 简化寄存器访问流程

    使用寄存器模型提供的API,Scoreboard可以直接对寄存器和存储器进行访问,而不需要通过Sequence来启动访问操作。这简化了寄存器访问的流程,提高了验证环境的可维护性和可扩展性。
  3. 提供读写接口

    寄存器模型提供了read和write等接口,使得Scoreboard可以方便地读取寄存器的值或向指定的寄存器写入值。这种直接的读写接口使得Scoreboard能够更加灵活地与DUT进行通信和交互。
  4. 事务转换器的使用

    为了让寄存器模型能够与Sequence进行交互,通常需要使用事务转换器。这个转换器能够将寄存器模型产生的事务类型转换成Sequence能够接受的类型,从而实现寄存器模型与Sequence之间的无缝连接和通讯。
  5. 寄存器模型与Sequencer的连接

    通过事务转换器,寄存器模型和Sequencer得以连接。这样一来,寄存器模型就可以直接与DUT进行通信,而不需要依赖于Sequence的启动,从而进一步简化了验证流程和提高了效率。

3)Froutdoor

scoreboard或者是平台的其他组件当中,调用寄存器模型的相关API进行寄存器访问时,寄存器模型会根据这个API以及寄存器的名称自动产生出一个类型为uvm_reg_item的事物对象。

比如,如果是read操作,那么这个对象中的操作类型就是独操作,访问的地址会根据寄存器的名称,register name自动生成。接着,寄存器模型会将这个事物对象进一步进行转换,转换为uvm_reg_ bus_op类型的事物对象。并将事物对象传入adapter转换器,转换器再将其转换为sequencer可接受的事物类型。sequencer在收到后,通过driver驱动到相应的dut,最终返回相应的值。

下面是一个简单的伪代码示例,展示了如何使用寄存器模型进行寄存器的读取操作:

import uvm_pkg::*;

class scoreboard extends uvm_component;
    // 寄存器模
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值