当前位置: 首页 > news >正文

数字验证每日十问--(3)

  1. 深拷贝和浅拷贝的区别?

当只拷贝对象中的成员变量和声明的句柄时,称为浅拷贝。浅拷贝只把对象中的句柄复制了,却没有复制句柄b所指向的对象。这会导致复制后,a2中的句柄b 和 a1 中的句柄b指向同一个对象,如果a2中的句柄b修改了对象的内容,那么a1中的句柄 b 所指向的内容也会发生变化。

深拷贝会复制对象中的所有成员变量以及对象中嵌套的其他类的实例的内容。实现深拷贝,需要自己在类中定义copy方法,目的是为了在复制类中的套娃(对象里面另一个类的实例)时,产生一个新的句柄,并产生一个具有相同内容的对象。

可以将克隆clone理解为深拷贝,需要自己定义产生新对象的逻辑;

  2.类的public、protected和local的区别?

如果没有指明访问类型,那么成员的默认类型是public,子类和外部均可以访问成员。

如果指明了访问类型是protected,那么只有该类或者子类可以访问成员,而外部无法访问。

如果指明了访问类型是local,那么只有该类可以访问成员,子类和外部均无法访问。

  3.sequence机制的作用和优点?

sequence机制主要是用于控制和产生激励,并将产生的一系列transcation发送给driver。

其优点在于: 将激励的产生功能从driver中剥离出来,同时也将testcase和testbench分离开来, 在不同的testcase中,可以将不同的sequence配置成sequencer的main_phase中的default_sequence,当sequencer执行到main_phase时,就会启动sequence, 在不改变driver的情况下完成不同的激励驱动。

    4.Sequence的分类?

a.扁平类(flat sequence):这一类往往只用来组织更细小的粒度,即item实例构成的组织。

b.层次类( hierarchical sequence):这一类是由更高层的sequence用来组织底层的sequence,进而让这些sequence或者按照顺序方式,或者按照并行方式,挂载到同一个sequencer上。

          c.虚拟类(virtual sequence):这一类则是最终控制整个测试场景的方式,鉴于整个环境中              往往存在不同种类的sequencer和其对应的sequence,我们需要一个虚拟的sequence来协            调顶层的测试场景。之所以称这个方式为virtual sequence,是因为该序列本身并不会固定              挂载于某一种sequencer类型上,而是将其内部不同类型sequence最终挂载到不同的目标              sequencer上面。这也是virtual sequence不同于hierarchical sequence的最大一点。

     5.如何在driver中使用interface?

interface声明的是一个实际的物理接口;

dirver中使用virtual interface进行申明接口,然后通过config_db进行接口参数传递,这样我们可以从上层组件获得虚拟的interface接口进行处理。

Config_db传递时只能传递virtual接口,即interface的句柄,否则传递的是一个实际的物理接口

     6.field_automation机制?

可以自动实现copy、compare、print等函数。当使用uvm_field系列相关宏注册之后,可以直接调用以上三个函数,而无需自己定义。这极大的简化了验证平台的搭建,尤其是简化了driver和monitor,提高了效率。

      7.UVM中各个component之间是如何组织运行的,串行还是并行,通过什么机制进行调度的?

搭建的uvm验证环境是自顶向下的树形结构;UVM中运行是通过Phase机制进行层次化仿真的。从组件来看各个组件并行运行,从phase上看是串行运行,有层次化的。Phase机制的9个phase是串行运行的,不同组件中的同一个phase都运行完毕后才能进入下一个phase运行,同一个phase在不同组件中的运行也是由一定顺序的,,build 和 final是自顶向下。

      8.所搭建的验证平台为什么要用RAL(寄存器)?

        首先,寄存器对设计非常重要,其是模块间交互的窗口,我们可以通过读寄存器值去观察模            块的运行状态,通过写寄存器去控制模块的配置和功能改变

保证寄存器的读写正确才能保证dut设计的正确性;采用RAL寄存器模型去测试验证,寄存器模型独立于TB之外,我们可以搭建一个测试寄存器的agent,去通过前门或者后门访问去控制DUT的寄存器,使得 DUT按照我们的要求去运行;

      9.前门访问和后门访问的区别?

a.前门访问顾指的是在寄存器模型上做的读写操作,最终会通过总线UVC来实现总线上的物理时序访问,因此是真实的物理操作。

b.后门访问,指的是利用UVM DPI (uvm_hdl_read()、uvm_hdl_deposit()),将寄存器的操作直接作用到DUT内的寄存器变量,而不通过物理总线访问。前门访问在使用时需要将path设置为UVM_FRONTDOOR

在进行后门访问时,用户首先需要确保寄存器模型在建立时,是否将各个寄存器映射到了DUT一侧的HDL路径:使用add_hdl_path

    从上面的差别可以看出,后门访问较前门访问更便捷更快一些,但如果单纯依赖后门访问也不能称之为“正道”。实际上,利用寄存器模型的前门访问和后门访问混合方式,对寄存器验证的完备性更有帮助。

      10.前门访问和后门访问的方法?

前门访问:

第一种uvm_reg::read()/write(),在传递时,用户需要将参数path指定为UVM_FRONTDOOR。除了status和value两个参数需要传入,其他参数可采用默认值.

寄存器模型提供的方法

//reg_model寄存器模型实例名,reg寄存器实例名

reg_model.reg.write(status, value, UVM_FRONTDOOR, .parent(this));

reg_model.reg.read(status, value, UVM_FRONTDOOR, .parent(this));

第二种uvm_reg_sequence::read_reg()/write_reg(),在使用时,也要将path指定为UVM_FRONTDOOR,uvm_reg_sequence预定义方法

read_reg(rgm.ss, status, data, UVM_FRONTDOOR);

write_reg(rgm.ss, status, data, UVM_FRONTDOOR);

后门访问

确保寄存器模型在建立时将各个寄存器映射到DUT一侧的HDL路径

add_hdl_path("reg_backdoor_access.dut");

chnl0_ctrl_reg.add_hdl_path_slice($sformatf("regs[%0d]", `SLVO_RW_REG), 0, 32);

lock_model();

通过uvm_reg_block::add_hdl_path()将寄存器模型关联到DUT一端

通过uvm_reg::add_hdl_path_slice完成将寄存器模型各个寄存器成员与HDL一侧的地址映射

lock_model()函数结尾,结束地址映射关系,保证模型不会被其他用户修改

          寄存器模型完成HDL路径映射后,利用uvm_reg或uvm_reg_sequence自带的方法进行后门             访问

uvm_reg::read()/write(),在调用该方法时设置UVM_BACKDOOR的访问方式。uvm_reg_sequence::read_reg()/write_reg(),在调用该方法时设置UVM_BACKDOOR的访问方式。uvm_reg::peek()/poke()两个方法,分别对应了读取寄存器(peek)和修改寄存(poke)两种操作,本身只针对后门访问,所以无需设置UVM_BACKDOOR。

寄存器模型提供的方法read()/write()

rgm.ctrl.read(status,data,UVM_BACKDOOR,.parent(this));       

rgm.ctrl.write(status,'h11,UVM_BACKDOOR,.parent(this));

uvm_reg_sequence预定义方法read_reg()/write_reg()

read_reg(rgm.ss,status,data,UVM_FRONTDOOR);

write_reg(rgm.ss,status,'h22,UVM_FRONTDOOR);

寄存器模型提供的方法peek()/poke()

rgm.ctrl.peek(status,data,.parent(this));   

rgm.ctrl.poke(status,'h22,.parent(this));

相关文章:

数字验证每日十问--(3)

深拷贝和浅拷贝的区别? 当只拷贝对象中的成员变量和声明的句柄时,称为浅拷贝。浅拷贝只把对象中的句柄复制了,却没有复制句柄b所指向的对象。这会导致复制后,a2中的句柄b 和 a1 中的句柄b指向同一个对象,如果a2中的句…...

22.给定 n 对括号,实现一个算法生成所有可能的正确匹配的括号组合

22. Generate Parentheses 题目 给定 n 对括号,编写一个函数生成所有可能的正确匹配的括号组合。 例如,当 n = 3 时,可能的组合集合为: ["((()))","(()())","(())()","()(())","()()()" ]题目大意 给出 n 代表生成…...

检测到目标URL存在http host头攻击漏洞

漏洞描述 修复措施 方法一: nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。 server { …...

C++奇迹之旅:手写vector模拟实现与你探索vector 容器的核心机制与使用技巧

文章目录 &#x1f4dd;基本框架&#x1f320; 构造和销毁&#x1f309;vector()&#x1f309;vector(const vector& v)&#x1f309;vector(size_t n, const T& value T())&#x1f309;赋值拷贝构造&#xff1a;vector<T>& operator(vector<T> v)&a…...

018、钩子函数 mounted和beforeDestroy、父组件向子组件传递参数 props 的使用

文章目录 1、mounted 和 beforeDestroy1.1、mounted1.2、beforeDestroy 2、父组件向子组件传递参数 props2.1、子组件定义2.2、父组件调用子组件并传参 3、完整例子3.1、父组件 Tags.vue3.2、子组件 TagsMenu.vue3.3、效果图 1、mounted 和 beforeDestroy 1.1、mounted mount…...

xlnt在Windows中的dll,lib生成

前言 花了半天时间想要把xlnt 集成到VS2022 Cmake项目中,以我目前掌握的能力,Cmake语法对于我来说难懂,对于只是使用过Cmake编译MySQL,或是其他lib,dll库的小白来说,不应该为了显示自己能力多么出众,强行去配置一些程序内容。 生活中没有绝对的事情,有舍有得. https://github…...

【网络】私有IP和公网IP的转换——NAT技术

目录 引言 NAT工作机制​编辑 NAT技术的优缺点 优点 缺点 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 公网被子网掩码划分为层状结构&#xff0c;一个公网IP的机器又可以用很多私有IP搭建内网。在日常生活场景中用的都是私有IP&#xff0c;例如手机&#xff0c;…...

java 面试 PDF 资料整理

“尊贵的求知者&#xff0c;作者特此献上精心编纂的Java面试宝典PDF&#xff0c;这份资料凝聚了无数面试精华与实战经验&#xff0c;是通往Java技术殿堂的钥匙。若您渴望在Java编程的求职之路上稳健前行&#xff0c;只需轻轻一点&#xff0c;完成这象征支持与认可的一键三联&am…...

初步认识Linux系统

前言 Linux系统具有许多优点&#xff0c;不仅系统性能稳定&#xff0c;而且是开源软件。其核心防火墙组件性能高效、配置简单&#xff0c;保证了系统的安全。在很多企业网络中&#xff0c;为了追求速度和安全&#xff0c;Linux不仅仅是被网络运维人员当作服务器使用&#xff0c…...

JavaScript AI 编程助手

JavaScript AI 编程助手 引言 随着人工智能技术的飞速发展&#xff0c;编程领域也迎来了前所未有的变革。JavaScript&#xff0c;作为全球最流行的编程语言之一&#xff0c;其与AI的结合为开发者带来了巨大的便利和无限的可能性。本文将探讨JavaScript AI编程助手的定义、功能…...

达梦数据库的系统视图v$datafile

达梦数据库的系统视图v$datafile 达梦数据库的V$DATAFILE 是一个重要的系统视图&#xff0c;提供了有关数据库数据文件的信息。 V$DATAFILE 系统视图 V$DATAFILE 视图用于显示数据库中每一个数据文件的详细信息。通过查询这个视图&#xff0c;数据库管理员可以了解数据文件的…...

Triton/window安装: triton-2.0.0-cp310-cp310-win_amd64.whl文件

下面这个github仓&#xff1a; https://github.com/PrashantSaikia/Triton-for-Windows/tree/main 安装命令也很简单&#xff0c;下载到本地后运行: pip install triton-2.0.0-cp310-cp310-win_amd64.whl...

应急响应-DDOS-典型案例

某单位遭受DDoS攻击事件如下 事件背景 2019年2月17日&#xff0c;某机构门户网站无法访问&#xff0c;网络运维人员称疑似遭受DDoS攻击&#xff0c;请求应急响应工程师协助。 事件处置 应急响应工程师在达到现场后&#xff0c;通过查看流量设备&#xff0c;发现攻击者使用僵…...

JAVA学习之知识补充(下)

六&#xff1a;File类与IO流&#xff1a; 这里给出三种常见的初始化方法&#xff1a; 通过文件路径初始化: File file new File("C:/example/test.txt");这种方法用于创建一个文件对象&#xff0c;该文件对象表示指定路径的文件或目录。例如&#xff1a;File fil…...

qt生成一幅纯马赛克图像

由于项目需要&#xff0c;需生成一幅纯马赛克的图像作为背景&#xff0c;经过多次测试成功&#xff0c;记录下来。 方法一&#xff1a;未优化方法 1、代码&#xff1a; #include <QImage> #include <QDebug> #include <QElapsedTimer>QImage generateMosa…...

python循环——九九乘法表(更加轻松的理解循环结构)

感受 首先&#xff0c;得明确意识到这个问题&#xff0c;就是我的循环结构学的一塌糊涂&#xff0c;完全不能很好的使用这个循环来实现各种九九乘法表达输出&#xff0c;这样的循环结构太差了&#xff0c;还需要我自己找时间来补充一下循环的使用&#xff0c;来拓宽自己的思考方…...

UDS诊断系列之十八故障码的状态掩码

在谈19服务的子功能之前&#xff0c;先说一下故障码&#xff08;DTC&#xff09;的状态掩码是什么。 一、状态掩码 状态掩码由八个状态位构成&#xff0c;客户端利用它向服务器请求与其状态相匹配的DTC信息。当服务器接收到来自客户端的请求时&#xff0c;它会通过过滤匹配的…...

【jvm】直接引用

目录 1. 说明2. 形式3. 特点4. 生成过程5. 作用 1. 说明 1.在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;直接引用&#xff08;Direct Reference&#xff09;是相对于符号引用&#xff08;Symbolic Reference&#xff09;而言的&#xff0c;它是指向内存中实际存在的…...

PythonStudio 控件使用常用方式(二十七)TActionList

PythonStudio是一个极强的开发Python的IDE工具&#xff0c;官网地址是&#xff1a;https://glsite.com/ &#xff0c;在官网可以下载最新版的PythonStudio&#xff0c;同时&#xff0c;在使用PythonStudio时&#xff0c;它也能及时为用户升到最新版本。它使用的是Delphi的控件&…...

PDF 转Word 开源库

1. Apache PDFBox Apache PDFBox 是一个开源的 Java 库&#xff0c;用于创建和操作 PDF 文档。虽然 PDFBox 本身没有直接支持 PDF 转 Word 的功能&#xff0c;但它可以提取 PDF 内容&#xff0c;你可以结合其他方法将这些内容写入 Word。 添加依赖 <dependency><gr…...

AgentScope Java:阿里开源的多智能体框架,让AI应用开发变得简单

为什么我们需要Agent框架&#xff1f; 如果你开发过AI应用&#xff0c;一定遇到过这些问题&#xff1a; LLM只能生成文本&#xff0c;无法查询数据库、调用API、执行计算多轮对话需要管理上下文&#xff0c;但手动维护消息历史太繁琐复杂的任务需要多步推理&#xff0c;简单的…...

GIS空间分析:从“裁剪”到“掩膜”,如何精准提取目标区域数据?

1. 为什么需要精准提取目标区域数据&#xff1f; 想象一下你手里有一张全国地图&#xff0c;但只需要研究某个城市的数据。这时候就需要像"剪刀"和"遮罩"这样的工具来帮我们精准提取目标区域。在GIS领域&#xff0c;这就是**裁剪(Clip)和掩膜(Mask)**两大核…...

避坑指南:在Ubuntu 20.04上搞定XTDrone+ORB-SLAM2,我踩过的那些依赖版本坑

避坑指南&#xff1a;在Ubuntu 20.04上搞定XTDroneORB-SLAM2&#xff0c;我踩过的那些依赖版本坑 当你在Ubuntu 20.04上尝试搭建XTDrone与ORB-SLAM2的开发环境时&#xff0c;可能会遇到各种令人抓狂的依赖版本冲突问题。作为一个经历过无数次失败后终于成功配置的开发老手&…...

从‘分式规划’到‘加减法’:二次变换如何成为通信优化工程师的‘瑞士军刀’

从‘分式规划’到‘加减法’&#xff1a;二次变换如何成为通信优化工程师的‘瑞士军刀’ 通信系统优化中&#xff0c;工程师常遇到一类令人头疼的问题&#xff1a;目标函数是分式形式&#xff0c;且分子分母都包含待优化变量。这类问题在能效优化、频谱效率提升等场景中尤为常见…...

Codesys实战排障手记:从证书过期到RTC时钟校准

1. 当Codesys突然弹出证书过期警告时 那天我正在客户现场调试禾川HCQ1系列PLC&#xff0c;刚打开Codesys V3.5开发环境&#xff0c;一个鲜红的证书过期警告就弹了出来。这种突如其来的报错让现场气氛瞬间紧张——产线等着调试&#xff0c;设备等着联调&#xff0c;而系统却在关…...

Ip2region终极指南:如何快速部署高性能离线IP定位系统

Ip2region终极指南&#xff1a;如何快速部署高性能离线IP定位系统 【免费下载链接】ip2region Ip2region (2.0 - xdb) 是一个离线IP地址管理与定位框架&#xff0c;能够支持数十亿级别的数据段&#xff0c;并实现十微秒级的搜索性能。它为多种编程语言提供了xdb引擎实现。 项…...

FPGA资源优化指南:use_dsp48和SIMD模式在Vivado中的实战技巧

FPGA资源优化实战&#xff1a;DSP48E的SIMD模式与use_dsp48高阶应用 在5G信号处理、雷达系统等高性能计算场景中&#xff0c;FPGA开发者经常面临资源利用率与计算性能的双重挑战。Xilinx 7系列及UltraScale架构中的DSP48E1/DSP48E2切片作为专用计算单元&#xff0c;其灵活配置…...

这家口腔机构,如何用AI把到院成本从1200+打到310元?

广东有一家口腔机构&#xff0c;三级专科&#xff0c;种植体量在区域排前三。 听起来很牛吧&#xff1f;但老板跟我聊天的时候&#xff0c;愁得不行。他说&#xff0c;抖音投放成本飘高&#xff0c;线索到院率低&#xff0c;客服人手不足&#xff0c;加微后无差别群发&#xff…...

Switch视频播放完全指南:使用wiliwili实现离线媒体娱乐

Switch视频播放完全指南&#xff1a;使用wiliwili实现离线媒体娱乐 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端&#xff0c;目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili …...

实战演练:基于kimi与快马平台快速开发一个交互式销售数据可视化看板

今天想和大家分享一个实战项目&#xff1a;如何用Kimi和InsCode(快马)平台快速搭建一个销售数据可视化看板。整个过程比我预想的顺利很多&#xff0c;特别适合需要快速验证业务需求的场景。 项目背景与需求拆解 最近在帮朋友的小型电商团队优化运营流程&#xff0c;他们最头疼…...