【UVM入门 ===> Episode_9 】~ 寄存器模型、寄存器模型的集成、寄存器模型的常规方法、寄存器模型的应用场景

1. 寄存器模型

1.1 概述

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

1.2 模型建立

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

1.3 中心化管理

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

1.4 uvm_reg

在这里插入图片描述

1.4.1 MCDF寄存器模型

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

1.5 寄存器建模

在这里插入图片描述

1.5.1 模型使用流程

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

2. 寄存器模型的集成

2.1 总线UVC

2.1.1 什么是UVC?

UVC的全称是UVM Component,往往是我们构建环境中所用到的最底层的组件,它虽然“小”,但却十分重要,许多模块级的验证甚至SOC验证都会使用相同的UVC,牵一发而动全身。

2.1.2 什么是VIP?

这里的VIP可不是大家生活中的 VIP 呀!这里是指 Verification IP,VIP的范围更广,多为第三方提供(也有企业自研VIP),它可能不仅仅只是一个uvm的组件,可能会是一个纯sv的对象集合,也可能会是一些verilog的model,所以uvc是vip的一个非空真子集。

2.1.3 实现

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

2.1.4 代码解析

在这里插入图片描述

2.2 MCDF寄存器设计代码

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

2.3 Adapter

2.3.1 概述

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

2.3.1.1 无predictor

在这里插入图片描述

2.3.1.2 有predictor

在这里插入图片描述

2.3.2 实现

在这里插入图片描述

2.3.3 解析

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

2.3.4 集成

在这里插入图片描述

2.3.4.1 代码实现

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

2.3.5 访问方式

在这里插入图片描述

2.3.5.1 前门访问

在这里插入图片描述

2.3.5.2 举例说明

在这里插入图片描述

2.3.5.3 后门访问

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

2.3.5.4 举例说明

在这里插入图片描述

2.3.5.5 二者的比较

在这里插入图片描述

2.3.5.6 混合应用

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

3. 寄存器模型的常规方法

3.1 mirror、desired和actual value

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

3.2 prediction的分类

在这里插入图片描述

3.2.1 自动预测

在这里插入图片描述

3.2.2 显示预测

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

3.3 访问方法

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

3.4 mem 与 reg 的联系和差别

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

3.5 内建(build-in)sequences

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

4. 寄存器模型的应用场景

4.1 概述

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

4.2 寄存器检查

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

4.3 功能覆盖率概述

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

4.3.1 举例说明

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

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UVM提供了uvm_reg_backdoor类,用于在测试中访问寄存器的内部实现。这个类可以让我们在测试中使用不同的方式来访问寄存器,以验证寄存器的功能和性能。 uvm_reg_backdoor类主要有两个方法: - `void read(uvm_reg_item rw)`:读取寄存器的值,将结果存储在rw.value中。 - `void write(uvm_reg_item rw)`:写入寄存器的值,将值存储在rw.value中。 其中,`uvm_reg_item`是一个包含寄存器地址、写入/读取值等信息的uvm序列化对象。 要使用uvm_reg_backdoor类,我们需要创建一个新类,继承自uvm_reg_backdoor。在新类的构造函数中,我们需要调用基类的构造函数,并通过该函数将要访问的寄存器作为参数传递。 下面是一个使用uvm_reg_backdoor类的示例: ```systemverilog class my_reg_backdoor extends uvm_reg_backdoor; `uvm_object_utils(my_reg_backdoor) function new(string name = "my_reg_backdoor"); super.new(name); endfunction virtual function void read(uvm_reg_item rw); // 从寄存器中读取值 endfunction virtual function void write(uvm_reg_item rw); // 将值写入寄存器 endfunction endclass ``` 在测试中,我们可以使用uvm_reg_backdoor类的实例来访问寄存器。例如: ```systemverilog my_reg_backdoor my_bd = new; uvm_reg_item rw = new; rw.element = my_reg; rw.kind = UVM_REG; rw.path = UVM_FRONTDOOR; rw.offset = 0; rw.value[0] = 0x1234; my_bd.write(rw); // 从寄存器中读取值 my_bd.read(rw); $display("value = %h", rw.value[0]); ``` 使用uvm_reg_backdoor类可以方便地访问寄存器的内部实现,从而进行更全面和深入的验证。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值