寄存器模型2

article/2025/8/22 23:58:56

6.MCDF寄存器设计代码

(1)示意图

(2)代码

  • verilog中数组操作:regs[`SLV0_RW_REG][0:5]指的是32bit数据下的0:5位。


7.adapter

(1)adapter的位置

(2)adapter实现

(3)示例代码

[1]继承与uvm_reg_adapter;

[2]在new()中将provides_responses置1;

[3]将uvm_reg_bus_op类型转换成mcdf_bus_trans类型,但是函数返回的是uvm_sequence_item类型。return t;是隐式的转换。

[4]从函数的参数中看出将uvm_sequence_item类型的bus_item转化为uvm_reg_bus_op类型;但父类句柄但指向的是子类对象;定义了子类型mcdf_bus_trans t,需要将父类转换为子类,毕竟指向的是子类对象。

[5]

(4)示例分析

(5)adapter的集成

[1]一般rgm(reg model)在test层,env通过rgm句柄引用,所以先看顶层有没通过config_db配置,没有的话则在env中创建。

[2]rgm.build():可参考9-1-3(2)。

[3]

rgm.map.set_sequencer(agent.sequencer,reg2mcdf);

句柄关联:rgm_map先与adapter关联,adapter又与agent.sequencer关联。

[4]

rgm.map.set_auto_predict();

auto_predictor不依赖于predictor和monitor。

(6)示例分析



8.寄存器的访问方式

(1)概述

  • DPI访问很快,0时刻就可以访问到。

(2)前门访问简介

  • read()、write()是reg的方法;read_reg()、write_reg()是uvm_reg_sequence的方法。

extern virtual task read(output uvm_status_e      status,

                            output uvm_reg_data_t    value,

                            input  uvm_door_e        path = UVM_DEFAULT_DOOR,

                            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);

status: 表示操作状态,OK or NOT OK

value: 表示读出的值

path: 表示是前门访问还是后门访问

map: 表示 如果是前门访问时用哪个map。

parent:表示哪个sequence来发送RAL item读操作请求

prior:表示item的优先级

extension:表示一些扩展信息

fname和lineno没有什么用,暂时不用去care

(3)前门访问示例

(4)后门访问:HDL路径映射

  • reg_backdoor_access是db.config的名字;路径映射后:reg_backdoor_access.dut.regs[]。

(5)后门访问:add_hdl_path()、add_hdl_path_slice()、peek、poke

(6)后门访问示例

(7)前门和后门比较

  • 因为有些寄存器配置有先后关系,不受时序的话,会出问题。

(8)混合应用

  • 通过随机化寄存器使得各个域处于随机值,再通过前门访问配置我们关注的域的值,这样的好处是不再通过设置复位之后的寄存器,这种更具有确定性的场景,而是一开始就随机化模拟无法预期的硬件配置,在设置了必要的寄存器之后,再看看有没有意想不到的边界情况。

rgm.reg.randomize();

rgm.reg.reg_field.set(值);//设置某个域

rgm.reg.update(status,UVM_FRONTDOOR,.parent(this));

  • 通过前门写后门读/后门写前门读,来检查地址映射到错误寄存器的问题。

rgm.reg.write(status,data,UVM_FRONTDOOR);

rgm.reg.mirror(status,UVM_CHECK,UVM_BACKDOOR,.parent(this));

  • 对于状态寄存器,这种不方便随机以及不方便和硬件值做比较的,往往先使用peek获取(后门访问会用自动预测更新mirror value),然后再调用mirror的方法从前门访问,和更新的镜像值作比较。

rgm.reg.peek(status,data);

rgm.reg.mirror(status,UVM_CHECK,UVM_FRONTDOOR,.parent(this));//要选择UVM_CHECK

  • 比较复位值是不是与硬件一侧的寄存器描述一致,先用get_rest得到软件一侧的复位值,再用后门从硬件里读回硬件复位值(硬件在外部先复位),再比较

@(negedge p_sequencer.vif.rstn);

@(posedge p_sequencer.vif.rstn);

rgm.reg.reset();

value=rgm.reg.get_reset();

value2=rgm.reg.read(status,data,UVM_BACKDOOR);

if(value!=value2) `uvm_error



1.mirror、desired和actual value

(1)

  • 每个filed都有两个值。

(2)


2.prediction分类

(1)跟踪寄存器值的两种方式

(2)自动预测

(3)显式预测:explicit

(4)显式预测示例 

  • uvm_reg_predictor是参数类,并是component,为了保证monitor的ap口和predictor的imp口类型一致,所以参数是必须的。

  • mcdf2reg_predictor.map = rgm.map; mcdf2reg_predictor.adapter = reg2macdf;  是将map和adapter的句柄接到predictor里面,之所以要传递他们的句柄,是将利用两个函数将预测值返给到reg里。


3.uvm_reg的访问方法

(1)uvm_reg_block、uvm_reg、uvm_reg_field三个类提供访问寄存器的方法表格

[1]read/write/peek/poke

uvm_reg而言,四者都是针对硬件的真实值,后门访问都有这四种方法,而对于前门访问没有peek、poke。

[2]由于前门访问时bytes操作的,所以不能按位修改,所以前门访问中field是“否”。

[3]get与set都是软件值。

(2)再将uvm_reg_sequence提供的方法(均是针对寄存器对象的,而不是寄存器块或者寄存器域)整理如下:

(3)reset() 、get_reset()

(4)mirror()

(5)set()、updata()



http://www.hkcw.cn/article/MduWUuOKuq.shtml

相关文章

胡塞武装称过去一周对以色列多地目标实施打击

当地时间5月29日晚,也门胡塞武装领导人阿卜杜勒马利克胡塞在其每周讲话中表示,在本周内,该组织对以色列多地目标实施了军事打击。在打击过程中,该组织使用了14枚高超音速导弹、弹道导弹以及无人机,打击目标包括以色列特拉维夫以北的雅法、海法、南部城市阿什凯隆以及红海沿…

女子向丈夫要5元遭拒轻生?假 网传信息不实

近日,网上流传一则消息称山东一名女子因向丈夫索要5元钱买煎饼果子当早餐被拒后选择喝药轻生。经省内各地和有关部门核实,该信息并不属实。希望广大网友保持理性和冷静,不轻易相信和传播未经证实的信息,共同维护健康有序的网络环境。责任编辑:zx0176

【C++】“多态”特性

文章目录 一、多态的概念二、多态的定义实现1. 多态的构成条件1.1 虚函数1.2 虚函数的重写 2. 多态的调用3. 虚函数重写的其他问题3.1 协变3.2 析构函数的重写 三、override和final关键字四、重载/重写/隐藏的对比五、纯虚函数和抽象类六、多态的原理 C的三大主要特性&#xff…

SmolDocling-256M:极小参数量的视觉语言模型|端到端文档解析方案的另一种思路

背景问题 传统的一站式文档解析工具,包含布局分析、OCR和表格识别等,往往需要结合多个独立的模型,同时根据处理任务的不同调用不同的模型,增加了处理流程的复杂度,并且难以泛化到不同的文档类型。大型视觉语言模型&am…

SUV行驶中被巨石砸下路面,目击者:SUV司机自己爬上来,没受伤!

SUV行驶中被巨石砸下路面。5月28日贵州毕节,SUV行驶中被巨石砸下路面,摩托车司机弃车避险后又赶来查看,目击者:SUV司机自己爬上来,没受伤!SUV行驶中被巨石砸下路面SUV行驶中被巨石砸下路面SUV行驶中被巨石砸下路面SUV行驶中被巨石砸下路面SUV行驶中被巨石砸下路面责任编辑…

一文了解半导体封装测试

1.半导体后端工艺 制作半导体产品的第一步,就是根据所需功能设计芯片(Chip)。然后,再将芯片制作成晶圆(Wafer)。由于晶圆由芯片反复排列而成,当我们细看已完成的晶圆时,可以看到上面…

leetcode hot100刷题日记——28.环形链表2

解答&#xff1a; 方法一&#xff1a;哈希表 class Solution { public:ListNode *detectCycle(ListNode *head) {//哈希表unordered_set<ListNode *>visited;while(head!nullptr){if(visited.count(head)){return head;}visited.insert(head);headhead->next;}return…

NW907NW918美光固态闪存NW920NW930

NW907NW918美光固态闪存NW920NW930 技术解析&#xff1a;美光NW系列固态闪存的核心突破 美光NW907、NW918、NW920、NW930四款固态闪存产品&#xff0c;代表了当前存储技术的顶尖水平。其核心创新在于G9 NAND架构的深度优化&#xff0c;采用更先进的5纳米制程工艺&#xff0c;…

前人栽树,后人乘凉——AdaBoost

一、AdaBoost介绍 AdaBoost的全称是ADAPTIVE BOOSTING&#xff08;自适应增强算法&#xff09;&#xff0c;是一种经典的集成学习算法&#xff0c;它通过组合多个弱学习器来构建一个强学习器。 从表意上看&#xff0c;AdaBoost就是在不断对于错误的知识点进行加深印象&#x…

【深度学习:进阶篇】--2.3.深度学习正则化

学习目标 目标 了解偏差与方差的意义知道L2正则化与L1正则化的数学意义知道Droupout正则化的方法了解早停止法、数据增强法的其它正则化方式 应用 无 目录 学习目标 1 偏差与方差 1.1 数据集划分 1.2 偏差与方差 1.3 解决方法&#xff08;过拟合&#xff09; 2 正则化(…

解决报错error: ‘void_t’ is not a member of ‘std’

解决报错error: ‘void_t’ is not a member of ‘std’ 博主是在编译ceres库时遇到的此报错。 解决方式很简单&#xff0c;将编译使用的c标准设定为c17即可。 例如&#xff0c;在VS2022中&#xff0c;右键单击项目-属性&#xff1a;

【达梦数据库】会话sp_close关闭不掉

背景 一个纯查询的语句&#xff0c;执行了很久&#xff0c;sp_close关闭不掉 排查方法 1、会话sp_close关闭不掉&#xff0c;sp_cance后再执行sp_close依旧关闭不了&#xff1b; sp_close_session(sess_id)sp_cancel_session_operation(sess_id)2、通过分析事务视图v$trx的…

澳门向永久居民每人发1万澳门元 新计划细节公布

澳门特区行政会今日完成讨论《2025年度现金分享计划》行政法规草案。该法规对2025年度的现金分享发放资格及申请手续进行了规范。根据规定,符合身份条件和在澳条件的居民可获得现金分享,其中永久性居民每人一万澳门元,非永久性居民每人六千澳门元。身份条件是指在2024年12月…

接口测试之文件上传(全)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在日常工作中&#xff0c;经常有上传文件功能的测试场景&#xff0c;因此&#xff0c;本文介绍两种主流编写上传文件接口测试脚本的方法。 首先&#xff0c;要知道…

数十家超市曝出食品安全问题 供应链隐患凸显

近日,全国多地超市接连曝出食品安全问题,涉及蔬菜、肉类、包装食品等多个品类。永辉、麦德龙、山姆会员店、小象超市、盒马、中百、朴朴、沃尔玛、奥乐齐和大润发等多家超市被点名。在12315、黑猫和消费保等投诉平台上,可以看到山姆永辉等超市因食品安全问题遭到消费者投诉。…

canvas 实现全屏倾斜重复水印

​ 参考&#xff1a; html、js、canvas实现水印_html页面使用canvas绘制重复水印-CSDN博客 效果 ​​​​ 不求水印显示完全。 实现代码 <template><div class"watermark" ref"waterMark"></div></template><script lang&q…

Android Studio 2022.2.1.20 汉化教程

查看Android Studio 版本 Android Studio Flamingo | 2022.2.1 Patch 2 下载&#xff1a;https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----/versions/stable

一根开价10万 年轻人迷上文玩玉米,风靡年轻圈

一根开价10万年轻人迷上文玩玉米。“文玩玉米风靡年轻圈,单根标价10万仍抢手!特殊培育的琥珀纹路、蜜蜡颗粒,经直播带货引爆市场,产业链从云南育种到百倍溢价,争议中见证新消费魔力。”文玩,这个曾被贴上“中老年专属”标签的传统爱好,如今正以意想不到的方式在年轻人中…

如何在Qt中绘制一个带有动画的弧形进度条?

如何在Qt中绘制一个弧形的进度条 在图形用户界面开发中&#xff0c;进度指示控件&#xff08;Progress Widget&#xff09;是非常常见且实用的组件。CCArcProgressWidget 是一个继承自 QWidget 的自定义控件&#xff0c;用于绘制圆弧形进度条。当然&#xff0c;笔者看了眼公开…

体育平台数据服务解决方案:从痛点到落地的全栈技术支持

一、体育平台开发的数据痛点解析 在体育平台开发领域&#xff0c;数据层建设往往成为技术团队的核心挑战&#xff1a; 实时数据获取难自建实时数据采集系统需解决赛事方反爬机制、多源数据同步&#xff08;如比分 / 球员位置 / 赔率&#xff09;、毫秒级延迟控制等问题&#…