ic验证 -秋招

config db

用法:

  • 传递virtual interface到环境中
  • 配置单一变量值,例如int、string、enum等;
  • 传递配置对象(config_object)到环境
uvm_config_db #(type)::get(                         //type类型可以是int、string等类型,也可以是接口interface、对象object等类型uvm_component      context,         //组件中的目标,常设置为this(针对类),或者null(非类,如module模块)string             instance_name,   //路径索引,相对于第一个参数的相对路径string             field_name,      inout  T           variable         //2. **底层获取变量值,即variable = field_name,**如果不设置,变量保持原始值       
);uvm_config_db #(type)::set(                         //set()与get()中的类型type应该保持一致uvm_component      context,          //组件中的目标,常设置为this(针对类),或者null(非类,如module模块)string             instance_name,    //路径索引(set操作的目标组件实例名)string             field_name,T                  value            //1. **顶层设置变量值,即field_name = value**
);

  • 在使用set()/get()方法时,传递的参数类型应当保持一致。对于uvm_object等实例的传递,如果get类型和set类型不一致,应当首先通过$cast()完成类型转换,再对类型转换后的对象进行操作。
  • 在参数传递时,“”表示默认当前层次,也可以使用通配符 * 来表示任意层次。需要注意“*.comp”与“*comp”的区别,前者表示在当前层次下所有名称为“comp”的组件,而后者表示包括当前层次以及当前层次以下所有名为“comp”的组件。
  • 在module环境中使用uvm_config_db::set(),则传递的第一个参数一般用来表示当前的层次(用this表示),此时第二个参数为相对路径;如果当前层次为最高层,用户可以设置为null(module模块,非类不可以用this),此时第二个参数为绝对路径(uvm_test_top.xxx);也可以设置为uvm_root::get()来表示uvm_root的全局顶层实例。
  • 在set()方法第一个参数使用当前层次的前提下,对于同一组件的同一变量,如果有多个高层组件对该变量进行配置,那么较高层组件的配置会覆盖较低层的配置;但是如果是同一层次组件对该变量进行配置时,应当遵循后面的配置覆盖前面的配置

注意⚠️

  • 接口传递应发生在run_test()之前。这保证了在进入build_phase之前,virtual interface已经被传递到uvm_config_db中。
  • 用户应当把interface与virtual interface区分开来,在传递过程中的类型应当为virtual interface,即实际接口的句柄。

      

function void build_phase(uvm_phase phase);if(!uvm_config_db #(virtual intf1)::get(this,"","vif",vif)) begin     //**3. 获取配置接口vif = intf**`uvm_error("GETVIF","no virtual interface is assigned")end`uvm_info("SETVAL",$sformatf("vif.enable is %b before set",vif.enable),UVM_LOW)vif.enable = 1;`uvm_info("SETVAL",$sformatf("vif.enable is %b after set",vif.enable),UVM_LOW)       endfunction

其中关于config object 对象传递

我们可以整合各个组件中的变量,将其放置在一个uvm_object中,再对中心化的配置对象进行传递,将有利于整体环境的修改维护,体改代码的复用性

class  config1  extends  uvm_object;         
//**1. 创建一个配置类,将需要配置的变量放于其中**`uvm_object_utils(config1)int   val1 = 1;int   str1 = "null";...
endclassclass  comp1  extends  uvm_component;      //组件`uvm_component_utils(comp1)config1      cfg ;                 //声明配置类句柄...function void build_phase(uvm_phase phase);uvm_object    tmp;         //声明类句柄uvm_config_db #(uvm_object)::get(this,"","cfg",tmp);     //**3. 获取变量配置**void`($cast(cfg,tmp));         //类型转韩,将传到tmp中的值赋给cfg`uvm_info("SETVAL",$sformatf("cfg.val1 is %d after get",cfg.val1),UVM_LOW)       `uvm_info("SETVAL",$sformatf("cfg.str1 is %d after get",cfg.str1),UVM_LOW)  endfunction
endclassclass  test1  extends  uvm_test;       //测试用例层, 启动配置`uvm_component_utils(test1)comp1    c1, c2;config1  cfg1, cfg2;...function void build_phase(uvm_phase phase);cfg1 = config1::type_id::create("cfg1");cfg2 = config1::type_id::create("cfg2");c1 = comp1::type_id::create("c1");      c2 = comp1::type_id::create("c2");       //创建对象cfg1.val1 = 30;cfg1.str1 = "c1";cfg2.val1 = 50;cfg2.str1 = "c2";uvm_config_db #(uvm_object)::set(this,"c1","cfg",cfg1);     //**2. 启动变量配置**       uvm_config_db #(uvm_object)::set(this,"c2","cfg",cfg2);     //启动变量配置 endfunction 
endclass

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MQ-2烟雾传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 mq2.h文件 mq2.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 MQ-2气体传感器是一种常用的气体传感器,用于检测空气中的烟雾浓度。工作原理是基于半导…

Java项目: 基于SpringBoot+mybatis+maven+mysql图书馆管理系统(含源码+数据库+任务书+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenmysql图书馆管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操…

网络安全应急响应技术原理与应用

网络安全应急响应概述 概念 为应对网络安全事件,相关人员或组织机构对网络安全事件进行监测、预警、分析、响应和恢复等工作 网络安全应急响应组织建立与工作机制 网络安全应急响应预案内容与类型 常见网络安全应急事件场景与处理流程 应急演练:对假定…

一台手机一个ip地址吗?手机ip地址泄露了怎么办

在数字化时代,‌手机作为我们日常生活中不可或缺的一部分,‌其网络安全性也日益受到关注。‌其中一个常见的疑问便是:‌“一台手机是否对应一个固定的IP地址?‌”实际上,‌情况并非如此简单。‌本文首先解答这一问题&a…

游卡,三七互娱,得物,顺丰,快手,oppo,康冠科技,途游游戏,埃科光电25秋招内推

游卡,三七互娱,得物,顺丰,快手,oppo,康冠科技,途游游戏,埃科光电25秋招内推 ①顺丰 【招聘岗位】研发、算法、大数据、产品、项管、设计、人资等 【官方内推码】4FOLXH 【投递方式】…

Web3社交新经济,与 SOEX 实现无缝交易的高级安全性

出于充分的理由,安全性是交易中至关重要的考虑因素。每个人都应该确保自己的资金在交易时是安全的。由于 SOEX 充当您与交易所的最佳连接,因此必须强调的是,该系统不会引发任何安全问题。 &a…

最优化方法Python计算:求解约束优化问题的拉格朗日乘子算法

从仅有等式约束的问题入手。设优化问题(7.8) { minimize f ( x ) s.t. h ( x ) o ( 1 ) \begin{cases} \text{minimize}\quad\quad f(\boldsymbol{x})\\ \text{s.t.}\quad\quad\quad \boldsymbol{h}(\boldsymbol{x})\boldsymbol{o} \end{cases}\quad\quad(1) {minimizef(x)s.…

Jenkins+docker+springboot 一键自动部署项目步骤

Jenkins+docker+springboot 一键自动部署项目步骤 部署环境:centos+gitee+docker+springboot 实现步骤: docker 安装 jenkins配置 jenkins利用 Dockerfile 和 shell 脚本实现项目打包运行安装 docker docker 安装社区版本 CE 安装需要的软件包yum install -y yum-utils de…

模型 涌现思想

系列文章 分享 模型,了解更多👉 模型_思维模型目录。整体产生新特性,超越部分之和。 1 涌现思想的应用 1.1 蚁群算法中的涌现思想 蚁群算法(Ant Colony Optimization, ACO)是一种模拟蚂蚁觅食行为的计算模型&#xf…

QT项目实战之音乐播放器2.0版本

该版本相较于1.0版本最主要的不同在于连接数据库实现类似于歌曲收藏和取消收藏的功能。 详细情况看我的这篇文章http://t.csdnimg.cn/WS5s8。 效果展示 VSMyMusicShow2.0 define.h UseMySQL.h musicInfo.h VSMyMusicPlayer.h

PMP–一、二、三模–分类–14.敏捷–技巧–帮助团队交付价值的执行实践迭代和增量如何帮助交付工作产品

文章目录 技巧一模14.敏捷--实践--帮助团队交付价值的执行实践--持续集成--在不同层面测试、验收测试驱动开发 (ATDD) 、测试驱动开发和行为驱动开发、刺探 。90、 [单选] 敏捷项目的第一次迭代即将开始。发起人召集团队、Scrum主管、产品负责人和其他项目干系人参加启动会议。…

木舟0基础学习Java的第二十六天(JavaWeb)

设置响应头 resp.setHeader("key","nihao");//推荐使用英文 中文会乱码 案例:模拟登录 jdbc.properties driverClasscom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/test?verifyServerCertificatefalse&useSSLfalse nameroot p…

第十三届山东省ICPC

vp链接&#xff1a;https://codeforces.com/gym/104417 A. Orders 根据题意模拟&#xff0c;分别按照 a&#xff0c;b 排序&#xff0c;排序后再判断该订单是否能完成。 #include <bits/stdc.h> using namespace std;#define int long longconst int N 105; int n, k…

pikachu文件包含漏洞靶场

本地文件包含 1、先随意进行提交 可以得出是GET传参 可以在filename参数进行文件包含 2、准备一个2.jpg文件 内容为<?php phpinfo();?> 3、上传2.jpg文件 4、访问文件保存的路径uploads/2.jpg 5、将我们上传的文件包含进来 使用../返回上级目录 来进行包含木马文件 …

备战秋招60天算法挑战,Day33

题目链接&#xff1a; https://leetcode.cn/problems/longest-increasing-subsequence/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1RRvheFEog/ LeetCode 300. 最长递增子序列 题目描述 给你一个整数数组nums &#xff0c;找到其中最长严格递增子序列的长度。 …

自幂数判断c++

题目描述 样例输入 3 152 111 153样例输出 F F T 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; long long m,a; int main(){cin>>m;for(int i1;i<m;i){cin>>a;long long ta,n[10],cc0,s0;while(t!0){//求位数与拆位n[cc]t%10;tt/…

多线程篇(并发相关类- 原子操作类)(持续更新迭代)

目录 前言 一、原子变量操作类&#xff08;AtomicLong为例&#xff09; 1. 前言 2. 实例 二、JDK 8新增的原子操作类LongAdder 三、LongAccumulator类原理探究 前言 JUC包提供了一系列的原子性操作类&#xff0c;这些类都是使用非阻塞算法CAS实现的&#xff0c;相比使用…

PowerShell脚本编写:自动化Windows开发工作流程实例介绍

PowerShell脚本编写&#xff1a;自动化Windows开发工作流程 大家好&#xff0c;我是吃点李子&#xff0c;今天我想和大家分享一下如何利用PowerShell脚本编写来自动化我们的日常工作流程。作为一名开发者&#xff0c;我们经常会遇到一些重复性的工作&#xff0c;比如部署环境、…

一起学习LeetCode热题100道(72/100)

72.每日温度(学习) 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例…

【每日一题】LeetCode 2379.得到K个黑块的最少涂色次数(字符串、滑动窗口)

【每日一题】LeetCode 2379.得到K个黑块的最少涂色次数&#xff08;字符串、滑动窗口&#xff09; 题目描述 给定一个字符串 blocks&#xff0c;其中每个字符代表一个颜色块&#xff0c;可以是 ‘W’&#xff08;白色&#xff09;或 ‘B’&#xff08;黑色&#xff09;。你需…