专栏首页瓜大三哥UVM(十)之config机制续1

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),作者:xiguazaitortoise

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HLS Lesson20-实例分析

    1.改善吞吐率:本质是通过改善并行度实现的 ? 当pipeline作用于函数的时候,从IO角度来看数据是没有空隙的,而作用于循环时候,则相邻的两个循环之间会有一...

    瓜大三哥
  • IO约束(上)

    IO约束的语法 XDC中可以用于IO约束的命令包括: set_input_delay set_output_delay set_max_delay set_mi...

    瓜大三哥
  • XDC设计之时钟篇

    XDC 与UCF 的最主要区别: XDC 可以像UCF 一样作为一个整体文件被工具读入也可以在实现过程中被当做一个单独的命令直接执行。这就决定了XDC也具有T...

    瓜大三哥
  • Vim杂记:Sublime的配色方案

    一、前言                                       爱美之心人皆有之,sublime的配色实在好看,于是希望Vim也能这样。 ...

    ^_^肥仔John
  • vim基本配置 原

     set nu    set  showmode    set   ruler    set autoindent    set ts=4   set...

    双面人
  • Vim 配置入门

    Vim 的配置不太容易,它有自己的语法,许许多多的命令。我总是记不清楚,所以就整理了下面这篇文章,列出主要配置项的含义。

    ruanyf
  • linux下vim的配置

    二狗不要跑
  • 常用vim设置

        \ if line("'\"")>0&&line("'\"")<=line("$") |

    一见
  • 我的MacVim的配置

    剑行者
  • 零基础学习 Python 之集合

    大家好,这里是零基础学习 Python 系列,在这里我将从最基本的Python 写起,然后再慢慢涉及到高阶以及具体应用方面。我是完全自学的 Python,所以很...

    Rocky0429

扫码关注云+社区

领取腾讯云代金券