UVM(十)之config机制续1

UVM(十)之config机制续1

1. 省略get的config

config总是set和get成对出现的。在build_phase中,要写上如下的两句话才能把pre_num_max和pre_num_min的值更新为case的设置值:

uvm_config_db#(int)::get(this,””,”pre_num_max”,pre_num_max);

uvm_config_db#(int)::get(this,””,”pre_num_max”,pre_num_min);

这里只有两个变量,尚且还能忍受,如果是有100个变量,那么写上这么100行古怪的语法,那将会是相当痛苦的一件事情。

其实在一些特定的情况下,get是可以省略。super.build_phase(phase);

只有把mac_driver注册到factory时,顺便使用field_automation机制把要get的变量注册,那么当UVM执行到driver的super.build_phase(phase)这句话时,就会自动执行那两个get的语句。这是相当便利的,在前面介绍field_automation机制时,一直是以一个transaction为例子进行介绍的,其实对于派生自uvm_object的类(如transaction)和uvm_component的类(如uvm_driver)中,是都可以使用field_automation机制的。

不过,这里存在一个问题,那就是如果要让super.build_phase(phase)能够自动get到设置的值的话,那么在set的时候,set的第三个参数必须与要get的变量的名字相一致。

2. 跨层次的多重set

前面一直强调的一个概念就是set和get成对出现的,但是加入set多次,而get一次,那么最终get到的是哪一个set值呢? 假设uvm_test_top和env中都对driver的值进行了set,在uvm_test_top中的set语句如下:

uvm_config_db#(int)::set(this,”env.agent.driver”,”pre_num_max”,100);

在enc的set语句如下:

uvm_config_db#(int)::set(this,”agent.driver”,”pre_num_max”,99);

那么driver中get到的值是100还是99呢?答案是100.UVM规定层次越高,那么他set的优先级越高。在整个UVM树中,uvm_test_top的位置是高于env的,所以uvm_test_top的set的优先级高。

看起来UVM似乎很势利,狗眼看人低,见到高层次的就点头哈腰,马上就从了。UVM这样设置是有其内在道理的。对于用户来说,是uvm_test_top更接近用户还是env更接近用户呢?答案肯定是前者。我们会在uvm_test_top中写不同的sequence,从而衍生出很多不同的case来。而对于env,它在uvm_test_top中实例化。有时候,这个env根本就不是用户自己开发的,很可能是别人已经开发好一个非常成熟的可重用的模块。对于这种成熟的模块,如果觉得其中某些参数不合要求,那么难道要修改到env中相关set参数吗?显然这是不合理的。比较合理的就是在uvm_test_top的build_phase中通过set的方式修改,所以说,UVM这种看似势利的行为其实极大的方便了用户的使用。

3. 统一层次的多重set

当跨层次来看待问题时,是高层次的set优先,当处于同一层次时,则是时间优先。

当上面两句胡同时出现在test的build_phase中时,driver最终get到的值将会是99。

原文发布于微信公众号 - 瓜大三哥(xiguazai_tortoise)

原文发表时间:2017-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

编写高质量代码的思考

最近在看《代码大全》,可以说是一本软件开发的百科全书,特别厚,但是干货也很多。平时写代码,代码规范是一个最低的要求(很多老代码连最低要求都达不到),为什么要这样...

942
来自专栏JAVA高级架构

Java设计模式-责任链模式

作者:Jet啟思 链接:https://juejin.im/post/5a126b146fb9a0450c490201 今天来说说程序员小猿和产品就关于需求发生...

38611
来自专栏企鹅号快讯

Python 相较于Java 而言,有什么优势?

最近在后台,有很多的同学私聊我说,Python和Java.,哪个具有前景呢?今天我们就来简单的讲一下这两者的区别: 我认为C, Java跟Python都是非常成...

2406
来自专栏iOS技术

何为代码质量?——用脑子写代码引言正文总结

为什么项目维护困难、BUG 反复?实际上很多时候就是代码质量的问题。代码架构就像是建筑的钢筋结构,代码细节就像是建筑的内部装修,建筑的抗震等级、简装或豪装完全取...

642
来自专栏编程

编写高质量代码的思考

前言 最近在看《代码大全》,可以说是一本软件开发的百科全书,特别厚,但是干货也很多。平时写代码,代码规范是一个最低的要求(很多老代码连最低要求都达不到),为什么...

2376
来自专栏java一日一条

编写高质量代码的思考

最近在看《代码大全》,可以说是一本软件开发的百科全书,特别厚,但是干货也很多。平时写代码,代码规范是一个最低的要求(很多老代码连最低要求都达不到),为什么要这样...

902
来自专栏从流域到海域

Python 条件判断

Python if语句 格式:注意不要漏写:这是容易犯错的地方。 if语句包含两部分,判断部分和执行部分,只有在判断部分得到的布尔值为True时,才会执行执...

23210
来自专栏AndroidTraveler

责任链模式妙用

除了应用场景比较多的单例模式你能够信手拈来,其他的可能会觉得有点难以掌握。也许压根都没用过。

1213
来自专栏阮一峰的网络日志

Javascript的10个设计缺陷

前几篇文章,我经常说Javascript的设计不够严谨,有很多失误。 今天的这一篇,前半部分就谈为什么会这样,后半部分将列举Javascript的10个设计缺陷...

3587
来自专栏Java学习网

Java虚拟机工作原理之JVM用到的3大计算机核心功能,重点是方法调用

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模...

1693

扫码关注云+社区