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字符串与组件层次结构中的完整层次结构名称相关联,这样就可以通过组件层次来更加方便地访问数据库的条目(储存的信息)。
我们已知的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...
// 在top_tb中 - 寄信 uvm_config_db#(virtual my_if)::set(null, "uvm_test_top", "vif", input_if); 2. 收信(Get): 在`my_driver`或其他UVM组件中,他们在开始工作之前会通过`uvm_config_db#(...)::get(...)`来“收信” - 即查找并获取接口实例的地址。 // 在my_driver中 - 收信 ...
UVM:10.6.1 换一个phase 使用config_db 1.config_db::set 的第二个参数是字符串,经常出错,可以通过get_full_name 来获得。对driver 进行设置: 对sequence 某个参数设置,可以: 2.但在build_phase 时,整棵UVM 树还为形成,会引起空指针错误。要想这么做有两种方法:...
UVM:3.5.7 config_db 机制对通配符的支持,config_db::set时,第二个参数都是完整的路径。还可以用通配符*:之前:可以把前两个set合并为一个set:可以进一步简化为:不推荐使用通配符,容易产生交互问题。
// Method2: using default sequence uvm_config_db#(uvm_sequence_base)::set(this,”agent....
uvm_config_db#(uvm_object_wrapper)::set(this, “env.axi_master_agent_obj.sequencer.main_phase”, “default_sequence”, null); 这很重要,因为如果有任何default_sequence集,那么我们的非虚拟序列器将同时运行虚拟序列中的default_sequence和序列。要仅从虚拟序列器控制非虚拟序列器,我们需要将非虚拟序列器的...
3. 当执行到main_phase()时,会执行uvm_sequencer_base中的start_phase_sequence()函数,uvm_config_db#() get::()获得case0_sequence的type_id, 然后调用factory的create_object_by_type创建case0_sequence的实例。(参考上一节工厂模式) $cast中的seq是uvm_sequence_base类型,多态。
*查看源码可知,get_config实际上调用的是uvm_component中的get_config_object函数;而该函数最终调用的是uvm_config_db的get方法。 –uvm_object uvm_object类是所有UVM数据和层次化类的基类。它主要的角色是为像create/copy/compare/print/record这样的通用操作来定义一系列method。从uvm_object派生出来的类必须执行像...