uvm_config_db的全称是configuration database,它是建立在 uvm_resource_db 之上的便利层,resource database储存的是与scope字符串相关联的name-value对(如下图所示) 。uvm_config_db可以将scope字符串与组件层次结构中的完整层次结构名称相关联,这样就可以通过组件层次来更加方便地访问数据库的条目(储存的信息)...
uvm_config_db的全称是configuration database,它是建立在 uvm_resource_db 之上的便利层,resource database储存的是与scope字符串相关联的name-value对(如下图所示) 。 uvm_config_db可以将scope字符串与组件层次结构中的完整层次结构名称相关联,这样就可以通过组件层次来更加方便地访问数据库的条目(储存的信息)。
config_db机制用于在UVM验证平台间传递参数。它们通常都是成对出现的。set函数是寄信,而get函数是收信。 【在哪里用】 build_phase中使用cfg_db机制 【set 寄信】 uvm_config_db#(int)::set(this,"env.i_agt.drv","pre_num",100); int:需要填写要送的东西的类型 【get 收信】 uvm_config_db#(int):...
我们已知的uvm_config_db有4个静态方法(所以调用方法是uvm_config_db::): set get exists wait_modified 今天我们就通过这四个method来一点点揭开uvm_config_db神秘的面纱。 首先我们最先有的疑惑就是,当我们调用set这个function的时候,我们所set的变量被存在了何处? 我们看到uvm_config_db是从uvm_resource_db...
1.config机制成对出现 1.1 简单示例 如在某个case(派生自uvm_test)的build_phase中可以做如下设置: 1uvm_config_db#(int)::set(this,"env.agent.driver","pre_num_max",100); 那么在driver的build_phase中需要: 1uvm_config_db#(int)::get(this,"","pre_num_max",pre_num_max); ...
对于uvm_config_db来说,在调用get()函数检索数据库的时候,get()函数传递的{cntxt,”.”, inst_name}会作为uvm_re_match()的str的实参,set()函数设置的{cntxt,”.”, inst_name}在经过uvm_glob_to_re()处理后作为uvm_re_match()的实参,这也就是为什么set()参数的inst_name支持正则格式,而get()参数...
一、调试config_db机制问题 UVM库内实现了一个资源库,它用于存储配置信息,TB里各个组件可以根据情况使用config_db往里面存或者取各种类型数据。config_db存(set())和取(get())的关键在于字符串匹配,为此UVM库提供了一些功能来帮助调试这些字符串匹配。
综上,uvm_config_db::set()和uvm_resource_db::set()是没有任何继承继承关系的。 从user的角度来讲,uvm_config_db::set/get是经常用到的。 第一个参数是uvm_component,所以一定要特别留心在sequence中参数设定的时候,这里不能是this,必须要是一个uvm_component的类型。
UVM:10.6.1 换一个phase 使用config_db 1.config_db::set 的第二个参数是字符串,经常出错,可以通过get_full_name 来获得。对driver 进行设置: 对sequence 某个参数设置,可以: 2.但在build_phase 时,整棵UVM 树还为形成,会引起空指针错误。要想这么做有两种方法:...
回到问题的核心,当我们调用set函数时,所设置的变量存储在哪里?答案在于uvm_config_db内部的m_rsc数组。这是一个由string作为键,uvm_resource#(T)作为值的静态键值对数组,以uvm_component为索引。这意味着,m_rsc数组实际上是一个以uvm_component为键,联合数组为值的结构,其中联合数组内部包含了...