UVM寄存器模型:uvm_reg_adapter
文章目录
- 一、什么是uvm_reg_adapter
- 1、what
- 2、Example
- 2.1、代码详解
- 二、如何使用uvm_reg_adapter
- 三、为什么要引入uvm_reg_adapter
一、什么是uvm_reg_adapter
1、what
uvm_reg_adapter继承于uvm_object,定义了用于在uvm_reg_bus_op和特定总线事务之间进行转换的接口,使得寄存器模型和总线之间能够有效地进行通信。uvm_reg_bus_op:定义用于寄存器和内存访问的通用总线事务的结构,具有类型(读或写)、地址、数据和字节启用信息。
类型 成员
uvm_access_e kind UVM_READ or UVM_WRITE.
uvm_reg_addr_t addr 地址;默认64位
uvm_reg_data_t data 数据:默认64位
int n_bits 传输的bit位
uvm_reg_byte_en_t byte_en 使能byte操作
uvm_status_e status 传输的结果:UVM_IS_OK, UVM_HAS_X, UVM_NOT_OK.
2、Example
class rkv_ahbmtx_reg_adapter extends uvm_reg_adapter;`uvm_object_utils(rkv_ahbmtx_reg_adapter)
function new(string name = "rkv_ahbmtx_reg_adapter");super.new(name);provides_responses = 1; // 如果总线要返回response数据,则应当使能provides_responses
endfunctionfunction uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw); //函数原型需要一字不改svt_ahb_transaction t;t.xact_type = (rw.kind == UVM_WRITE) ? svt_ahb_master_transaction::WRITE :svt_ahb_master_transaction::READ;t.addr = rw.addr;t.burst_type = svt_ahb_master_transaction::SINGLE;t.burst_size = svt_ahb_master_transaction::BURST_SIZE_32BIT;t.data = new[1]; //svt_ahb_transaction 中的data是数组,这里是single传输,所以设置size为1t.data[0] = rw.data;return t; //隐形转换
endfunctionfunction void bus2reg(uvm_sequence_item bus_item, ref uvm_reg_bus_op rw); //函数原型需要一字不改svt_ahb_transaction t;if (!$cast(t, bus_item)) begin`uvm_fatal("CASTFAIL", "Provided bus_item is not of the correct type")return;endrw.kind = (t.xact_type == svt_ahb_master_transaction::WRITE) ? UVM_WRITE : UVM_READ;rw.addr = t.addr;rw.data = t.data[0];rw.status = UVM_IS_OK;
endfunction
endclass
2.1、代码详解
-
provides_responses:如果总线要返回response数据,则应当使能provides_responses;若总线不支持返回response数据(没有调用put_response(RSP)或者item_done(RSP)),则不应设置,负责会使得环境挂起 -
supports_byte_enable:总线支持byte访问,则使能 -
reg2bus:- 函数原型:
pure virtual function uvm_sequence_item reg2bus( const ref uvm_reg_bus_op rw) pure virtual:纯虚方法,即没有实体的方法原型,它只可以在抽象类中定义(uvm_reg_adapter是抽象类(virtual class uvm_reg_adapter extends uvm_object ))- 函数声明的返回类型是
uvm_sequence_item:uvm_sequence_item是父类类型,但是最后return t返回的是子类句柄(svt_ahb_transaction实例的句柄),这里存在一个隐形转换:子类句柄转换为父类句柄并返回;也就是说最后返回的是父类句柄指向的父类类型;( 在svt_ahb_master_driver中其参数的数据类型是svt_ahb_master_transaction;svt_sequencer和svt_driver的参数都是uvm_sequence_item,所以将其返回为uvm_sequence_item)
const ref:const关键字用于声明一个变量为常量,意味着该变量的值在初始化后不能被修改。const ref表示一个常量引用,指向一个对象,但不允许通过这个引用修改该对象reg2bus()完成的桥接场景是,如果用户在寄存器级别做了操作,那么寄存器级别操作的信息uvm_reg_bus_op会被记录,同时调用uvm_reg_adapter::reg2bus()函数。在完成了将uvm_reg_bus_op的信息映射到bus_trans之后,函数将bus_trans实例返回。而在返回bus_trans之后,该实例将通过bus_seqeuncer传入到bus_driver。这里的transaction传输是后台隐式调用的,不需要主动发起。
- 函数原型:
-
bus2reg- 函数原型:
pure virtual function void bus2reg(uvm_sequence_item bus_item,ref uvm_reg_bus_op rw) - 父类句柄
bus_item指向了子类对象(实际传输的类型就是子类类型),所以要把父类句柄bus_item指向的子类对象转换为uvm_reg_bus_op类型;父类句柄是无法访问子类对象,需要先把父类句柄转换为子类句柄
- 函数原型:
vt_ahb_transaction t;
if (!$cast(t, bus_item)) begin`uvm_fatal("CASTFAIL", "Provided bus_item is not of the correct type")return;end
-
bus2reg函数的功能与reg2bus相反,完成了从bus_trans到uvm_reg_bus_op的内容映射。在完成映射之后,更新的uvm_reg_bus_op数据最终返回至寄存器操作场景层。 -
对于寄存器操作,无论读操作还是写操作,都需要经历调用
reg2bus,继而发起总线事务,而完成总线事务发回反馈之后,又需要调用bus2reg,将总线的数据返回至寄存器操作层面。
二、如何使用uvm_reg_adapter
- 集成在
env中 - 例化后,需要在
connect_phase中做必要的连接
rgm.map.set_sequencer(agt.sequencer, adapter);
predictor.adapter = adapter;
三、为什么要引入uvm_reg_adapter
-
通过使用适配器,验证环境中的不同组件可以相互独立开发和修改,减少了对其他组件的依赖。
-
提高可重用性:适配器可以在不同的项目或测试环境中复用,从而节省开发时间和资源。
-
简化复杂性:在复杂的验证环境中,适配器有助于简化不同协议之间的交互,使得设计和验证人员可以专注于各自的任务,而不必担心接口细节。
-
没有适配器,组件无法轻松适应不同的协议或接口,降低了验证环境的灵活性和可重用性。
相关文章:
UVM寄存器模型:uvm_reg_adapter
文章目录 一、什么是uvm_reg_adapter1、what2、Example2.1、代码详解 二、如何使用uvm_reg_adapter三、为什么要引入uvm_reg_adapter 一、什么是uvm_reg_adapter 1、what uvm_reg_adapter继承于uvm_object,定义了用于在 uvm_reg_bus_op 和特定总线事务之间进行转换…...
总结OpenGL和pyrender安装和使用过程中的坑
目录 报错一:AttributeError: NoneType object has no attribute glGetError 报错二:ImportError: (Unable to load OpenGL library, OSMesa: cannot open shared object file: No such file or directory, OSMesa, None) 报错三:raise ImportError("Unable to load…...
温湿传感器(学习笔记下)
接着我们温湿传感器上半部分的学习,现在我们学习接下来的部分,编写GXHTC3驱动程序,也就是给gxhtc3.c文件添加代码,我们要判断gxhtc3芯片是否存在和正常,就要先读取gxhtc3的ID号,根据gxhtc3的数据手册,读取命…...
期刊论文写作之word模板
一、zotero参考文献使用 下载zotero软件,请搜索相关帖子或者小破站即可; 把pdf拖到zotero软件里面,直接拉进去; 下面建立一个word演示: 1.导入pdf点击红框部分,根据期刊要求选择参考文献样式࿰…...
雷池社区版OPEN API使用教程
OPEN API使用教程 新版本接口支持API Token鉴权 接口文档官方没有提供,有需要可以自行爬取,爬了几个,其实也很方便 使用条件 需要使用默认的 admin 用户登录才可见此功能版本需要 > 6.6.0 使用方法 1.在系统管理创建API TOKEN 2.发…...
LSTM(Long Short-Term Memory,长短期记忆网络)在高端局效果如何
lstm 杂乱数据分析 LSTM(Long Short-Term Memory,长短期记忆网络)在高端局,即复杂的机器学习和深度学习应用中,展现出了其独特的优势和广泛的应用价值。以下是对LSTM在高端局中的详细解析: 一、LSTM的优势…...
模组操作宝典:4种关机重启技巧,让你的设备运行无忧
今天我说的是关于关机重启技巧。 给4G模组VBAT断电关机,模组关机前未能及时退出当前基站,会有什么影响呢? 基站会误以为设备还在线,下次开机仍会拿着上次驻网信息去连基站。基站一看,上次链接还在——认为你是非法设…...
利用API接口实现旺店通和金蝶系统的无缝数据对接
旺店通销售出库对接金蝶销售订单(线下)的技术实现 在企业日常运营中,数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体案例:如何通过轻易云数据集成平台,实现旺店通企业奇门的数据无缝对接到金蝶云星空系统。我们将…...
热题100(hash)
热题100(Hash) 三道题目 1.两数之和(√) 49.字母异位词分组(题解) 128.最长连续序列(题解) 思路 第1题简单hash映射,O(n) 第49题,关键点在于Hashmap的形式,‘HashMap<Stri…...
Ubuntu下Mysql修改默认存储路径
首先声明,亲身经验,自己实践,网上百度了好几个帖子,全是坑,都TMD的不行,修改各种配置文件,就是服务起不来,有以下几种配置文件需要修改 第一个文件/etc/mysql/my.cnf 这个文件是存…...
LVGL移植教程(超详细)——基于GD32F303X系列MCU
版本:LVGL Kernel V8.3.0,运行压力测试Demo Stress首先放一张最终Stress Demo 运行图: 一、准备 1. GD32 Keil工程 准备任意一个屏幕可以正常显示的GD32工程: 2. LVGL源码 最新版现在已经是V9.2了,这里我选择了…...
《计算机原理与系统结构》学习系列——处理器(中)
系列文章目录 目录 流水线数据通路与控制概述5个流水级指令周期与流水级 流水线性能流水线时钟周期的长度T和数量cycles流水线性能 流水线数据通路流水线寄存器流水线分析图形化流水线流水线控制 流水线数据通路与控制 概述 5个流水级 指令周期与流水级 单周期实现中&#x…...
深入解析 OceanBase 数据库中的局部索引和全局索引
深入解析 OceanBase 数据库中的局部索引和全局索引 引言 在分布式数据库中,索引的设计对于优化查询性能至关重要。OceanBase 作为一款高性能的分布式关系数据库,支持局部索引和全局索引两种索引类型。理解这两种索引的特点和适用场景,对于数…...
2024防晒衣市场社媒营销洞察报告
2024年,硬防晒已经从单一的户外场景,扩展到通勤、外出游玩、穿搭等更多场景,多样化的需求导致的消费群体不断扩大,“防晒经济”迎来自己的主场时刻。 当前,防晒衣不仅需要满足不用场景的灵活切换,还要满足多…...
【Ubuntu20.04 Visual Studio Code安装】【VSCODE】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、打开VSCOE官网二、下载VSODE的Ubuntu版本三、安装VSCODE软件包四、导入工作空间(添加工作空间目录)五、安装插件:1.安装简体中文包2.安装ros插件…...
贪心算法day(1)
1.将数组和减半的最少操作次数 链接:. - 力扣(LeetCode) 思路:创建大跟堆将最大的数进行减半 注意点:double t queue.poll()会将queue队列数字减少一个后再除以2,queue.offer(queue.poll()/…...
窗口函数sql使用总结
一、开窗 基础知识:窗口分析函数 (1)LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往…...
python单因素分析
写了个简易小程序实现,以后用的时候直接复制就行: import numpy as np from scipy.stats import fdatas [[65,60,69,79,38,68,54,67,68,43],[74,71,58,49,58,49,48,68,56,47],[22,34,24,21,20,36,36,31,28,33] ] a 0.05def get_mean_var(data):data_m…...
「C/C++」C++ STL容器库 之 std::list 双向链表容器
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...
应用程序框架进阶<HarmonyOS第一课>
一、判断题 1. 一个应用是由一个或多个HAP组成。 正确(True) 错误(False) 正确(True) 回答正确 2. UIAbility组件多实例启动模式是默认的启动模式。 正确(True)错误(False) 错误(False) 回答正确 二、单选题 1. 以下关于指定实例启动模式说法正确的是? …...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
