resource有三个参数 uvm_resource_db#(int)::set("scope","name资源",value) uvm_resource_db#(int)::read_by_name("scope","name资源",value) 会把资源存储到一个queue中,然后按顺序read_by_name。发布于 2023-11-01 11:22・IP 属地上海
uvm_config_db的全称是configuration database,它是建立在 uvm_resource_db 之上的便利层,resource database储存的是与scope字符串相关联的name-value对(如下图所示) 。uvm_config_db可以将scope字符串与组件层次结构中的完整层次结构名称相关联,这样就可以通过组件层次来更加方便地访问数据库的条目(储存的信息)...
从这两个函数的定义中,你就能发现read_by_type比read_by_name少了一个参数,这是因为当我们声明一个uvm_resource_db的时候,这个resource的Type,Scope/Regex和Value会被UVM保存到resource中,而name域的字符串只是作为一个Name Table的一个entry,也就是uvm_queue的index。每次我们取回我们想要的data的时候都需要通过比...
1class uvm_resource_pool;23static local uvm_resource_pool rp =get();45uvm_resource_types::rsrc_q_t rtab [string];6uvm_resource_types::rsrc_q_t ttab [uvm_resource_base];7...89//Function: set10//11//Add a new resource to the resource pool. The resource is inserted12//into both ...
uvm_config_db#(type T):继承于uvm_resource_db#(type T),进行了一些功能扩展。内部都是static function。 接下来重点看一下uvm_config_db传入的4个参数: cntxt:uvm_component类型,context上下文的含义,由cntxt可以确定资源的优先级,对同一个资源set,从UVM树顶层往下,优先级依次降低。cntxt = null时,为uvm_...
综上,uvm_config_db::set()和uvm_resource_db::set()是没有任何继承继承关系的。 从user的角度来讲,uvm_config_db::set/get是经常用到的。 第一个参数是uvm_component,所以一定要特别留心在sequence中参数设定的时候,这里不能是this,必须要是一个uvm_component的类型。
if(!uvm_config_db#(mcdf_rgm)::get(this, "", "rgm", rgm)) begin `uvm_info("GETRGM", "no top-down RGM handle is assigned", UVM_LOW) rgm = mcdf_rgm::create("rgm", this); `uvm_info("NEWRGM", "created rgm instance locally", UVM_LOW) ...
进一步探究,uvm_resource_base是一个虚拟类,继承自uvm_object,并且uvm_resource_db通过typedef定义了一个参数化的uvm_resource类型rsrc_t。因此,无论uvm_config_db使用哪个具体方法,其返回值或中间数据都是rsrc_t类型,本质上都是uvm_resource。回到问题的核心,当我们调用set函数时,所设置的变量存储...
在使用uvm_config_db::get方法时,通过传递的参数构成索引的层次,然后在uvm_resource已有的配置信息池中索引该配置,如果索引到,方法返回1,否则为0。 在使用uvm_config_db的配置方法时,下面给出一些建议: 在使用set/get方法时,传递的参数类型应当上下保持一致。对于uvm_object等实例的传递,如果get类型与set类型不一致...