寄存器模型常用方法

1. 寄存器模型常规方法

1.0 期望值、镜像值、实际值区别

在这里插入图片描述

  • 寄存器模型中每一个寄存器都有两个值:镜像值、期望值。
    在这里插入图片描述
  • 首先RAL、DUT中的寄存器都会复位,此时值相同。
  • mirror value是monitor捕捉到总线上面的行为(对DUT寄存器进行读写)然后做预测(predict)后更新的(也只能这样才能修改),但是对于RAL中的寄存器,在RAL没有去读DUT中的对应的状态REG时候是不会自动更新的(后门读也可以用来更新),但不论前后门,我们必须走出这一步才会更新。
  • 随机化针对的是期望值,因为是想让DUT中REG都处于一个不定态,看能不能有什么边界情况,紧接着才会更新mirror value;随机化对mirror value不起作用。
  • 若访问寄存器有多重总线访问方式,我们的monitor可能没有都检测到,那就没法即使更新。

1.1 预测

在这里插入图片描述

  • 前门访问通过显示预测,通过例化predictor并借助monitor检测总线获取DUT寄存器值。
  • 显示预测符合硬件行为。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • adapter是object,而predictor是component!
  • predictor是一个参数化类,需要指定参数类型为monitor过来的类型
  • 将map、adapter句柄赋予predictor,predictor需要用到adapter中的bus2reg的方法,并且还需要借助map将对应的寄存器更新。
  • 最后的connect_phase中还需要将monitor的ap和predictor中的bus_in接口相连,二者通过fifo相连。
  • predictor只需要指定其参数类型就行,不需要实现什么方法;adapter需要实现两个虚方法bus2reg/reg2bus

1.2 uvm_reg访问方法

在这里插入图片描述

  • block包含reg包含field,block也可以包block
  • block相当于是对其中包含的寄存器做一个批量操作,省的写多行代码对各个寄存器进行操作。
  • mirror一般用法:读回来DUT中REG值,更新寄存器的mirror值;还可以在更新的同时检查,对于配置寄存器,我们对其进行了写操作,写操作时候已经借助predictor更新了mirror值,那么可用mirror()对其进行检测,通过总线读回来实际值看是否真的写入了。
  • update一般用法:先修改软件期望值(set),之后看期望值和镜像值是否相同,不同则更新DUT中reg值后mirror值再同步actual value。
  • get、set都是操作RAL期望值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.3 mem与reg的联系与差别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 利用内建sequences实现对寄存器的测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 寄存器模型的应用场景

寄存器模型作用:

  • 优化sequence,提高复用性、可读性
  • 方便检查DUT中寄存器
  • 新增了寄存器覆盖率

2.1 概述

在这里插入图片描述

  • 对硬件的配置,同时也写入本地的影子寄存器,那么再次读取配置寄存器时不用通过总线了,直接读取本地的影子寄存器就行,大大节约时间。
    在这里插入图片描述
  • RM模仿DUT的行为,有时候也需要知道DUT中寄存器的值,一般是通过寄存器模型来获取的(拿镜像值即可)。

2.2 寄存器检测

在这里插入图片描述
在这里插入图片描述

2.3 覆盖率收集

在这里插入图片描述

2.3.1 自动收集模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • has_coerage()表示一个covergroup有条件的例化,在上面set_coverage就是构造这个条件。
    在这里插入图片描述
  • uvm_reg中预定义了一个虚函数 sample(),实现时候形式必须和预定义的一致
    在这里插入图片描述

2.3.2 手动收集

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • subscriber也是参数类,接收monitor的trans。
  • 这里覆盖点覆盖的bins是mirror value
    在这里插入图片描述
  • avail中定义了7个bin,0,1,62,63是必须覆盖的边界值,而[2:7],[8:55],[56:61]是定义了3个中间的bin。
  • 一旦monitor在总线捕捉到了一个trans,由于fifo存在?,那么就会调用write函数中的reg_value_cg.sample()去采样收集覆盖,捕捉到每一个寄存器。
    在这里插入图片描述
### 回答1: 寄存器模型是一种设计硬件的方法,用于描述和模拟硬件系统中的寄存器及其行为。它通常使用HDL(硬件描述语言)编写,包括描述寄存器和寄存器之间的逻辑关系。 ralgen是一个常用的生成寄存器访问层(RAL)的工具,可用于自动生成寄存器模型的代码。它可以根据给定的寄存器描述文件自动创建寄存器模块和对应的读写接口。 生成ralgen脚本的主要步骤如下: 1. 定义寄存器:首先根据硬件设计需求,定义所需的寄存器、位字段以及其相应的属性,如宽度、默认值等。 2. 构建寄存器模型:根据寄存器定义,使用ralgen语法构建寄存器模型,并定义寄存器模块的名称和接口。 3. 生成脚本:使用ralgen工具,根据寄存器模型文件生成对应的ralgen脚本,该脚本包含寄存器访问层的代码实现。 ralgen脚本生成完成后,可以在实际的硬件设计中使用。它提供了简单、高效的寄存器访问接口,以便于软件和测试团队对寄存器进行读写操作。同时,脚本还包含了对寄存器的各种访问控制和功能验证,提高了开发效率和设计的可靠性。 总之,通过使用寄存器模型和ralgen脚本,设计人员可以更加方便地创建寄存器访问层,并提供了更好的可扩展性和重用性,加快了硬件设计的开发进程。 ### 回答2: 寄存器模型生成ralgen脚本是为了自动生成寄存器抽象层的代码,以提高设计效率和减少手工工作。它是基于寄存器抽象层(Register Abstraction Layer,RAL)的基础上进行的。 首先,我们需要创建一个RAL模型,定义模型中的寄存器及其属性。通过设置寄存器的名称、地址、位宽、访问权限等信息,我们可以对寄存器进行准确的描述。然后,根据需要,我们可以在寄存器中添加字段,用于描述寄存器中的各个位。这些字段可以设置位宽、访问权限、默认值等属性。 确定好寄存器模型后,我们可以使用ralgen工具来生成RAL代码。ralgen根据寄存器模型生成的脚本,可以自动生成寄存器抽象层的代码。该代码包括寄存器的读写接口、寄存器字段的操作接口等,并且根据所选的模板生成用户需要的代码语言,如C++、SystemVerilog等。 通过使用ralgen工具生成的RAL代码,我们可以方便地进行寄存器的配置和操作。RAL抽象层提供了一种高层次的接口,使得寄存器操作更简洁、更易于维护。同时,它还提供了寄存器的访问权限管理、寄存器模式的验证等功能,有助于确保设计正确性。 总结起来,寄存器模型生成ralgen脚本是一种自动化的方法,可以根据寄存器模型快速生成寄存器抽象层的代码。这样做可以提高设计效率,减少手工工作,同时也有助于提高设计的可靠性和可维护性。 ### 回答3: 寄存器模型生成ralgen脚本是一种用于自动生成寄存器抽象层代码的方法。ralgen脚本是使用ralgen工具进行寄存器模型生成的输入脚本。 使用寄存器模型可以在硬件设计中对寄存器进行更高层次的抽象,使得设计工作更加高效和可靠。通过ralgen脚本,可以快速生成寄存器抽象层代码,从而减少了手动编写的工作量,并且避免了人为错误。 ralgen脚本的编写通常包括以下步骤: 1. 确定寄存器的名称、地址、位宽等信息。 2. 根据寄存器的功能和特性,选择合适的寄存器字段,如读写控制、数据位、校验位等。 3. 对于每个寄存器字段,指定它的属性和寄存器的访问权限,如读或写。 4. 根据需要,可以指定寄存器的默认值、重置值等。 5. 定义寄存器集,将相关的寄存器归类到不同的寄存器集中。 编写ralgen脚本时需要注意以下几点: 1. 脚本的语法应符合ralgen的规范,可以参考ralgen工具的文档和示例。 2. 寄存器字段的定义应准确、清晰,以便于后续的寄存器模型使用和生成。 3. 在编写脚本时,可以根据具体的需求和设计要求,增加一些额外的功能和选项,如寄存器的自动重置、清零等。 通过这样的方式,使用寄存器模型生成ralgen脚本可以帮助我们实现更高效和可靠的寄存器抽象层代码生成,从而提高硬件设计的开发效率和质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值