简单说就是字符串的正则匹配,在UVM内部是通过uvm_glob_to_re()和uvm_re_match()这两个函数来实现的,它们是在uvm_config_db背后默默工作的功臣。 在TB调用uvm_config_db::set()的时候,set函数会将参数cntxt和inst_name拼接起来后,调用用uvm_glob_to_re()转换格式,再存到uvm_resource类里的scope字符串变量...
在test中set:class my_test extends uvm_test;my_config cfg;...function void bulid_phase(uvm_phase phase);...uvm_config_db#(my_config)::set(this,"env","cfg",cfg);...endfunctionendclass 在test.env中get:class my_env extends uvm_env;my_config cfg;...function void bulid_phase(uvm_pha...
uvm_config_db#(bit)::set(uvm_root::get(),"uvm_test_top.env0.scb","cmp_en",0); //可以set 到uvm_component中。 ... void'(uvm_config_db#(bit)::get(uvm_root::get(), get_full_name(), "first_start", first_start) if(first_start) `uvm_info("drv0_seq", "this is the firs...
3.解读uvm_config_db中的set和get方法2023-03-06 收起 一、uvm_config_db简介 uvm_config_db的全称是configuration database,它是建立在 uvm_resource_db 之上的便利层,resource database储存的是与scope字符串相关联的name-value对(如下图所示) 。 uvm_config_db可以将scope字符串与组件层次结构中的完整层次...
uvm_config_db#(bit)::set(uvm_root::get(),"uvm_test_top.env0_scb","cmp_en",0); 可见它是以uvm_root::get()加上后续路径组成一个component的完整路径的。 除了向component传递参数外,还可以在sequence中向sequence传递参数。需要注意的是,当使用virtual sequence时,get/set的第二个路径参数应为virtual...
一种是通过在my_case的build_phase使用uvm_config_db设置default_sequence给sequencer,另一种方式是西安实例化要启动的sequence,之后再通过default_sequence启动。两者的区别就在于config_db::set的第四个参数,即要设置的值的获取方式不同,前者通过type_id::get获取,后者则直接用实例化后的变量即可。
component派生类来说,field_automation 机制最重要的是可以在build_phase中自动获取uvm_config_db#():set()的数值(必须加(phase) -也就是不用写 uvm_config_db#():get()注意:field_automation 的macro的类型要和 uvm_config_db的参数类型一致:如下示例代码,field_int vs uvm_config_db#(bit47:0)这个时候(...
uvm_config_db#(bit)::set(uvm_root::get(), "uvm_test_top.v_sqr.*", "first_start", 0); (3)一个sequence是在task phase中运行的,当其设置一个参数的时候,起事件往往是不固定的。针对这种不固定的设置参数的方式,UVM提供了wait_modified任务。当它检测当第三个参数的值被更新过后,它就返回,否则一...
4.unpack_bytes:将byte 流逐一恢复到某个class的实例中。 5.pack 将所有字段打包成bit 流。 6.unpack将一个bit流逐一恢复到某个类的实例中。 7.pack_ints 将所有字段打包成int。 8.unpack_ints:把一个int流恢复到某个类的实例中。 9.print。 10.clone。 11.config_db::set。
uvm_config_db#(virtual my_if)::set(null, "uvm_test_top", "vif", input_if); end 1. 2. 3. my_driver如下: virtual function void build_phase(uvm_phase phase); super.build_phase(phase); `uvm_info("my_driver", "build_phase is called", UVM_LOW); ...