寄存器模型的讲解

首先寄存器模型是用来对dut中具有地址映射的寄存器和储存器进行建模。他可以反应dut中寄存器的各种特性,可以产生激励作用于dut并进行寄存器功能检查。通过寄存器模型,可以简单的实现对dut中寄存器的前门或者后门操作。

因为寄存器模型是高度抽象的,我们要创建一个adapter的类,来实现uvm_reg_bus_op与真正作用到dut的transaction直接的相互转换。

接下来我们看一看寄存器模型的结构:

1.uvm_reg_field是寄存器模型的最小单位,和dut里面的每个register相对应。

2.uvm_reg和dut中的每个register对应,宽度一般和总西安位宽一致。

3.uvm_reg_block里面包含uvm_reg,一个最底层模块级别的dut的所有寄存器,具有相同的基地址,会放到一个reg_block里面。并且block里面海包含了map,可以进行地址i映射,以及用来完成寄存器的前后门访问。

因为项目中可能又大量的寄存器,人工来进行访问耗时耗力,也会出现错误,因此我们要使用寄存器模型。

下面讲一讲寄存器模型的优势:

1.方便对dut中寄存器进行读写。

2.再仿真时,可以不耗时的获取寄存器的值。

3.可以方便的对寄存器的coverage验证点的收集

相启动sequence以及将他的结果返回这样的事情,都可又寄存器模型自动完成,再没有寄存器模型之前,只能启动sequence进行前门访问的方式来进行读取寄存器,局限大,并且在scorebiard中难以控制,有了寄存器模型之后,scoreboard只和寄存器模型打交道,不论是发送读的指令还是获取读操作的返回值,都是由寄存器模型实现。

并且寄存器模型代码是不用自己写的,直接使用python来实现从excel到寄存器模型文件的转换即可。我们只需要在excel中把有关寄存器的一些信息填入即可。

在了解了寄存器模型之后,让我们来看看如何使用寄存器模型来检查寄存器,协助交叉硬件设计逻辑以及比对数据。

寄存器的检查:

1.从前门写,从前门读,但是次方法没法检查地址是否正确映射。

2.从前门写,从后门读,即利用write()实现前门写,利用read或者peek实现后门读。

3从后门写,从前门读。当然,这些方法均已经在寄存器内建序列中实现了。

寄存器模型还可以配合scoreboard进行dut检查

首先我们要确保scoreboard可以索引到寄存器模型,可以通过config_db进行层次化配置。

其次,就MCDF寄存器模型来说,处理测试寄存器本身,我们还要考虑在不同的配置下,设计的数据处理,仲裁功能是否正确,因此要放置功能覆盖率在寄存器模型中。

最后,在UVM的寄存器模型已经内置了一些方法来使能对应的covergroup,同时在调用write()和read()的时候就可以自动嗲用covergroup::sample()来完成覆盖率的收集。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值