uvm寄存器模型RAL

在这里插入图片描述

在这里插入图片描述

implicit predictor 自动预测

在这里插入图片描述

在这里插入图片描述

explicit predictor

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

register model

uvm_reg_block

  • 属于uvm_object

reg

field最小单位
  • m_mirrored
  • m_desired

至少包含一个reg_map

map

  • 调用reg2bus /bus2reg函数
  • 连接adapter/seqr
  • 子map

uvm_mem

seq中访问register model的两种方法

a.通过config_db

往seq中传递一个句柄;
uvm_config_db #(reg_top_block)::set(this, "*", "reg_top_block", reg_rm);

b. 通过sequencer

通过p_sequencer调用sqr中的register model的句柄
connect_phase 中 ref_mdl.p_rm = this.p_rm;

RAL内建的一些sequence

需要掌握下边两个sequence

  • uvm_reg_hw_reset_seq
  • uvm_reg_bit_bash_seq

uvm_reg_hw_reset_seq 检查上电复位后寄存器模型与DUT 寄存器的默认值是否相同

  • 把register model的句柄赋值给这个sequence的model
  • 此seq通过前门读取寄存器的值与ral模型中的mirror值做比较,不一样则报错. 调用reg的mirror方法
  • 在测试时如果有些寄存器的默认值不需要关注,那么可以通过设置NO_REG_TESTS或者NO_REG_HW_RESET_TEST来实现.在实际的应用当中也支持对整个block做exclude处理.
    UVM:7.6.2 检查默认值的sequence
    uvm_reg_hw_reset_seq

mirror

virtual task mirror(    output  uvm_status_e    status,    //报错
  input     uvm_check_e     check    =  UVM_NO_CHECK,
  input     uvm_path_e  path     =  UVM_DEFAULT_PATH,
  input     uvm_reg_map     map  =  null,
  input     uvm_sequence_base   parent   =  null,
  input     int     prior    =  -1,
  input     uvm_object  extension    =  null,
  input     string  fname    =  "",
  input     int     lineno   =  0   )

读DUT中寄存器的值,与update操作相反。如果第二个参数check为UVM_CHECK,那么会检查读取的值与镜像值是否一样,如果不一样报错。通过mirror读取DUT的寄存器值之后,会调用predict函数,更新镜像值。
mirror有两种应用场景:一是在仿真中不断调用,但此时是UVM_NO_CHECK,保证镜像值与DUT中的值相等;二是在仿真结束的时候调用,这时是UVM_CHECK检查模型中的镜像值与DUT中的寄存器值是否一致。
在这里插入图片描述

uvm_reg_bit_bash_seq

Verify the implementation of all registers in a block by executing the uvm_reg_single_bit_bash_seq sequence on it.
Verify the implementation of a single register by attempting to write 1’s and 0’s to every bit in it, via every address map in which the register is mapped, making sure that the resulting value matches the mirrored value.
uvm_reg_bit_bash_seq实现对寄存器每个bit的遍历操作,通过前门写前门读确认每个bit读写操作是否ok.此操作对RW寄存器有效,因为本身其就要支持读写操作,如果读写有问题就可以发现错误;对于诸如RO、RC这样属性的寄存器,本身就不支持写操作,会导致误报错误,所以后续需要exclude掉.

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: uvm_reg_bit_bash_seq是UVM中的一个类,用于对寄存器进行位操作的序列化。它可以模拟对寄存器的写入和读取操作,以测试寄存器的功能和正确性。该类可以通过继承和重载来适应不同的寄存器类型和测试需求。 ### 回答2: uvm_reg_bit_bash_seq 是 UVM 提供的一种使用 regbus 进行读写寄存器的工具。它适用于验证寄存器的读写操作,通过随机化生成不同的读写序列,来测试寄存器的响应行为,并检查其是否符合规范。 uvm_reg_bit_bash_seq 的主要特点包括: 1. 高度可配置性:可以将 uvm_reg_bit_bash_seq 序列长度、操作类型、测试步骤等进行参数化设置,以便进行各种不同类型的测试。 2. 随机化测试: uvm_reg_bit_bash_seq 序列生成器采用随机化的方式生成测试序列,可以有效测试潜在的边界条件和异常情况。 3. 适用范围广:该工具适用于任何类型的寄存器,包括单个寄存器、连续范围的寄存器、以及离散的寄存器。 使用 uvm_reg_bit_bash_seq 可以有效提高测试效率和代码覆盖率,同时提供良好的可读性,方便寄存器验证人员进行分析和调试。但需要注意的是,在使用 uvm_reg_bit_bash_seq 进行寄存器验证时,需仔细考虑测试所覆盖的接口信号范围和测试顺序,以确保测试覆盖全面、无遗漏。 ### 回答3: uvm_reg_bit_bash_seq是UVM注册(uvm_reg)组件中的一种用于寄存器位操作的序列(sequence)。在电子设计自动化(EDA)过程中,uvm_reg_bit_bash_seq是一种重要的验证组件,可以用于验证芯片中的寄存器操作是否符合预期。uvm_reg_bit_bash_seq可以通过UVM架构中的bit-bashing功能实现。 UVM注册(uvm_reg)是UVM框架中的一种关键组件,用于描述硬件芯片的寄存器。在芯片设计过程中,通常会将一些常用的控制信号和数据存储在寄存器中,并通过编程方式读写寄存器来实现对芯片功能的控制。因此,寄存器的正确操作和验证是芯片设计和验证中一个非常重要的环节。 uvm_reg_bit_bash_seq通过仿真实现寄存器位的各种操作,如读取和写入位值、比较操作等。在执行uvm_reg_bit_bash_seq序列时,会在仿真环境中模拟寄存器的读写操作,并且根据输入输出比对结果对寄存器进行验证。在验证过程中,开发人员可以根据需要指定uvm_reg_bit_bash_seq的执行次数和执行速度等参数,以便达到更好的验证效果。 在使用uvm_reg_bit_bash_seq进行寄存器验证时,需要准备好uvm_reg模型和其关联的uvm_field,以便模拟寄存器的实际操作。在创建uvm_reg_bit_bash_seq序列时,需要将目标uvm_reg和其相关uvm_field信息传递给测试过程类,以便在模拟寄存器操作时进行调用。 总之,uvm_reg_bit_bash_seq是uvm_reg组件中的重要序列之一,对于芯片设计和验证中寄存器的正确操作和验证具有重要意义。通过使用uvm_reg_bit_bash_seq序列可有效地验证芯片寄存器的正确性和可靠性,提高芯片设计和验证的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值