我们看到uvm_config_db是从uvm_resource_db继承而来的。 这个uvm_resource是个什么数据类型? 进一步挖下去看看uvm_resource_base是什么。 可以看到只是一个从uvm_object继承而来的virtual类而已,uvm_resource继承后增加了个参数化,而uvm_resource_db中定义(typedef)了一个跟其参数一致的参数化的uvm_resource类型rsrc_t...
uvm_config_db的全称是configuration database,它是建立在 uvm_resource_db 之上的便利层,resource database储存的是与scope字符串相关联的name-value对(如下图所示) 。uvm_config_db可以将scope字符串与组件层次结构中的完整层次结构名称相关联,这样就可以通过组件层次来更加方便地访问数据库的条目(储存的信息)...
uvm_config_db #(int) :: set (this,"m_apb_agent","loopCount", i);endendtask endclass <5>. typedef 定义的一些宏 typedef uvm_config_db #(uvm_bitstream_t) uvm_config_int; typedef uvm_config_db #(string) uvm_config_string; typedef uvm_config_db #(uvm_object) uvm_config_object; t...
uvm_config_db的全称是configuration database,它是建立在 uvm_resource_db 之上的便利层,resource database储存的是与scope字符串相关联的name-value对(如下图所示) 。 uvm_config_db可以将scope字符串与组件层次结构中的完整层次结构名称相关联,这样就可以通过组件层次来更加方便地访问数据库的条目(储存的信息)。
回顾前几节,config_db::set需要获取component在UVM树中的路径,从而能准确传递参数。然而sequence是一个uvm_object,无法定位其在UVM树中的路径。通过使用get_full_name()查看sequence的路径,可以发现其路径大致为如下形式 uvm_test_top.env_.i_agt.sqr.case0_sequence ...
class A#(int width) extends uvm_object 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 3.1.5与uvm_component相关的宏, 通过将这些component注册到factory中,以及变量进行域的自动化。可以1)使得component获得object的拥有的compare、print函数,2)还可以自动调用:config_db::get来得到变量的值 ...
1.为什么在TOP里面uvm_config_db set的时候都需要用到uvm_test_top,它针对不同的case产生的实例名字是一样的吗? 是一样的。对于+UVM_TESTNAME=example_case_(0…n),UVM验证平台会创建一个example_case_(0…n)的实例,他们的实例有一个共同的名字:uvm_test_top,所以你在top中congig_db的时候都会自上而下...
(1) uvm_config_db::set与uvm_config_db::get函数一般都是成对出现,但是在某些情况下,可以只有set而没有get语句,即省略get语句. (2)所谓的特定情况指的是变量使用uvm_field_int注册,在build_phase中调用super.build_phase(),并且set函数的第三个参数必须要与get函数中变量的名字一致.这种情况下可以省略掉uvm...
对于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()参数...