前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UVM(十)之config机制续1

UVM(十)之config机制续1

作者头像
瓜大三哥
发布2018-02-26 11:49:29
1.5K0
发布2018-02-26 11:49:29
举报
文章被收录于专栏:瓜大三哥瓜大三哥

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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜大三哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UVM(十)之config机制续1
  • 2. 跨层次的多重set
  • 3. 统一层次的多重set
  • 当跨层次来看待问题时,是高层次的set优先,当处于同一层次时,则是时间优先。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档