【UVM理论】uvm环境中对uvm_config_db的理解
如有错误或疑问,欢迎留言,我将尽力回答!共同学习,共同进步!
一、uvm_config_db的用途大概有如下三种:
*(1) 传递virtual interface到环境中;**(2) 设置单一变量值,如int.string.enum等;**(3) 传递配置对象(config object)到环境中。*
二、在使用uvm_config_db的配置方法时,下面给出一些建议:
· 在使用set/get方法时,传递的参数类型应当上下保持一致。对于uvm_object等实例的传递,如果get类型与set类型不一致,应当首先通过$cast()完成类型转换,再对类型转换后的对象进行操作。
· set/get方法传递的参数可以使用通配符“*”来表示任意的层次,类似于正则表达式的用法。同时,用户需要懂得“*.comp1”与“*comp1”的区别,前者表示在目前层次之下所有名字为“comp1”的组件,而后者表示包括当前层次及当前层次以下的所有名为“comp1”的组件。
· 在module环境中如果要使用uvm_config_db::set,则传递的第一个参数uvm_component cntxt用来表示当前的层次,由于当前层次为最高层,所以用户可以设置为null,也可以设置为uvm_root::get()来表示uvm_root的全局实例。
· 在使用被配置变量时,应当确保先进行了uvm_config_db::get的操作,获得了正确的值以后再使用。
· 应当尽量确保uvm_config_db::set方法在其相关配置组件创建前调用。这是因为只有先进行了配置,其相关组件在例化时进入build phase,可以得到期望的值。
· 对于同一实例组件的同一个变量,如果有多个上层组件对该变量进行设置时,更上层组件的配置会覆盖低层的配置;但是如果是同一个层次组件对该变量进行多次配置时,应该遵循后面的配置会覆盖前面的配置。
· 用户应该在使用uvm_config_db::get()方法时,添加便于调试的语句,来通过UVM信息打印得知get方法的变量是否从uvm_config_db获取,如果没有获取,是否需要采取其它的措施。
三、接口的传递
接口的传递从硬件世界到UVM环境中的传递可以通过uvm_config_db来实现。在实现过程中需要注意几点:
1、接口的传递应该发生在run_test()之前。这保证了在进入build phase之前,virtual interface已经传递进入uvm_config_db中。
2、 用户应当把interface与virtual interface的声明区分开来。在传递过程中的类型应当为virtual interface,即实际接口的句柄。
3、在使用uvm_config_db API set/get时,实际发生了如下的后台操作 uvm_config_db::set通过层次和变量名,将这些信息放置到uvm_pkg唯一的全局变量uvm_pkg::uvm_resources。
全局变量uvm_resources用来存储和释放配置资源信息(resource information)。uvm_resources是uvm_resource_pool类的全局唯一实例,该实例中有两个resource数组用来存放配置信息,这两个数组中一个由层次名字索引,一个由类型索引,通过这两个关联数组可以存放任意个通过层次配置的信息。同时,底层的组件也可以通过层次或者类型来取得高层的配置信息。这种方式也完成了信息配置与信息获取的剥离,便于调试和复用。
在使用uvm_config_db::get方法时,通过传递的参数构成索引的层次,然后在uvm_resource已有的配置信息池中索引该配置,如果索引到,方法返回1,否则为0。
四、uvm_config_db如何使用?
uvm_config_db#(int)::set(this, “env.i_agt.drv”, “pre_num”, 100);
set寄信,get收信。
后面有四个参数:对于set而言:第一个和第二个参数联合起来组成目标路径,与此路径符合的目标才能收信。
第一个参数必须是一个uvm_component实例的指针,第二个参数是相对此实例的路径。
第三个参数表示一个记号,用以说明这个值是传给目标中的哪个成员的,第四个参数是要设置的值。
uvm_config_db#(int)::get(this, “”, “pre_num”, pre_num);
get而言:四个参数中,第一个参数,通常可以为 “this”, "null"等实例的指针。
第二个参数,可以为空“”, 也可以用通配符,如截图中的例子,”*yy_agent" “yy_agent.drv”
set 与get的第一个到第三个参数“寄信”与“收信”要符合两个条件:时间的匹配,一定是先寄信再收信,为了避免出错,一般get前最好加判断,2 标记一致,也就是邮件目的地是匹配的。
第四个参数,往往是具体要接收的参数,或者说句柄。
【UVM理论】uvm环境中对uvm_config_db的理解相关推荐
- UVM环境中reset复位的处理
文章目录 前言 一.单独处理reset复位信号 1.1 复位agent的实现 1.2 复位transaction和interface 1.3 environment 1.4 复位sequence 1. ...
- [UVM]UVM环境中的clock agent方案
UVM环境中的clock agent方案 摘要:在验证环境中,我们通常需要多个不同频率的时钟,为了能方便的产生所需时钟,我们可以开发一个clk_agent,通过config来指定频率,通过interf ...
- 验证环境中的program为什么必须是automatic
最近在项目中,发现验证环境中的顶层的program(一般将program作为验证环境的入口),都是automatic的. 其实Program默认是static的,那么为什么需要把验证环境做成autom ...
- 2-Entity RANSAC:在变化的环境中进行稳健的视觉定位
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 摘要 视觉定位由于其低成本和稳定的传感器而受到广泛关注, 这在许多 ...
- centos7 搭建本地git_本地服务调用K8S环境中的SpringCloud微服务实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:原创文章分类汇总及配套源码,涉及Java.Docker.K8S.Devops等 下图是典型的微 ...
- 生命如何在复杂环境中生存?信息、调控和几何结构的交织
来源:集智俱乐部 作者:Jürgen Jost 译者:十三维 编辑:邓一雪 导语 生物有机体生活在复杂的环境中,同时受到环境的促进和限制.比如在三维几何空间中,DNA一维的线性结构更有利于信息存 ...
- 理论与实践中的CNN模型结构,如何引领深度学习热潮
摘要: 深度学习是指多层神经网络上运用各种机器学习算法解决图像,文本等各种问题的算法集合.卷积神经网络(CNN)是深度学习框架中的一个重要算法,本文介绍了CNN主流模型结构的演进过程,从一切的开始Le ...
- 计算机技术在环境中的好处,浅谈计算机技术在德育现代化中的作用
文/黄小燕 计算机技术作为现代教育教学手段,作为各类教育的支持服务系统,由于它具有大规模.多样化.高效力.实践性和灵活性强的特点.具有区别于其他教育方法的独特优势,其在现代德育活动中有着十分不可或缺的 ...
- 交互式电子杂志_交互环境中电子杂志的生存发展探析
[摘要]自1995年3月我国第一份电子杂志--<电子信息与通讯网络杂志>在上海面世以来,我国的电子杂志已经发展了15年.在此期间,电子杂志经历了三代形态变化,即邮件列表形态.传统杂志数字化 ...
最新文章
- 知道为啥失败么?87%的机器学习项目都是这么栽了的……
- 关于C#应用的授权认证
- 让你的eclipse插件只下载一次
- cubase怎么添加midi设备_WIDI MASTER:5针无线蓝牙MIDI适配器
- Python Matplotlib 画图显示中文
- PMCAFF问答龙虎榜,大神云集,等你挑战
- LVS峰会 | 阿里云李刚:下一代低延时的直播CDN
- hdu 2196 叶子节点最长距离(树DP)
- Python 字符串操作基础
- 滑雪(信息学奥赛一本通-T1280)
- java如何排除多余的依赖_Maven依赖排除 禁止依赖传递 取消依赖的方法 去除jar包中的不想要的依赖关系...
- python operator.itemgetter
- ajax跨越html,ajax跨域的解决方案
- 使用matlab编写协方差矩阵计算矩阵
- 基于spring cloud + nacos + gateway + ssm+的学生管理系统
- 半透明导航栏css代码,纯CSS实现的紫罗兰风格导航条效果代码
- 解决maven打包 无法加载本地lib/下的jar包问题(程序包XXX不存在)
- Linux虚拟机无法联网问题解决
- 【数据库系统】第一部分 数据库基础(3) 关系数据库标准语言SQL(7) 视图
- STM32单片机蓝牙APP手势语音温控电风扇落地扇人体感应