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掉.

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值