(1)uvm_config_db是从uvm_resource_db派生而来的,它对uvm_resource_db的一些功能进行了扩展,这种扩展主要体现在对资源的写入和读取上. (1.1) 在资源的写入操作上,它重载了uvm_resource_db的set函数; (1.2) 在资源的读取操作上,它新建了一个称为get的函数; (2) uvm_resource_db虽然也是一种用来共享数据的类...
这个是uvm_resource_db::set和uvm_config_db::set在UVM中的定义:uvm_resource_db::set uvm_config_db::set 从这两个函数的定义中我们就能发现,uvm_resource_db相交于uvm_config_db并不需要一个uvm_oject类型的参数,取而代之的是一个string类型的参数。从这里就能看出,uvm_config_db对于参数的约束要更大一些。
从这两个函数的定义中,你就能发现read_by_type比read_by_name少了一个参数,这是因为当我们声明一个uvm_resource_db的时候,这个resource的Type,Scope/Regex和Value会被UVM保存到resource中,而name域的字符串只是作为一个Name Table的一个entry,也就是uvm_queue的index。每次我们取回我们想要的data的时候都需要通过比...
uvm_config_db是一个参数化类,用于将不同类型的参数配置到uvm数据库中,使得它可以被任何较低级别层次结构中的组件使用,在仿真中通过变量设置修改环境。 uvm_resource_db虽然也是一种用来共享数据的类,但是层次关系在其类中没有作用。与uvm_config_db相比,尽管uvm_resource_db也有内建的数据库通过字符串或者类型来...
大家使用uvm_config_db::set()和uvm_config_db::get()时,要牢记set()的参数inst_name是支持正则匹配的,而get()的参数inst_name是不支持正则匹配的也就是get()的参数inst_name里就算包含*/?/+等特殊字符,也是会当作普通字符而已,而不会被处理成正则匹配里的元字符。
(2.2) uvm_config_db采用的是”parent wins + last write wins”(假设在env中已经有配置,而test的级别高于env). (3) uvm_config_db与uvm_resource_db共享同一套database; 因此可能会出现通过uvm_config_db::set()往database中存入信息,但用uvm_resource_db::read_by_name()从database中读取信息; uvm_re...
uvm_resource_db支持debug trace功能,在命令行仿真选项中+UVM_RESOURCE_DB_TRACE,每一次调用uvm_resource_db进行resource读写访问是都会打印相关信息。uvm_resource_db.svh中同时提供了一个基类uvm_resource_db_options,可以对tracing信号进行访问与控制,+ UVM_RESOURCE_DB_TRACE会隐性调用该class,将tracing信号置一。Ma...
为什么芯片验证工程师应该使用uvm_resource_db而不是uvm_config_db(二)? 长点芯 IC初级打工人,微信公众号-“长点芯” “不长久的,多将终以悲剧。” -- 《蝇王》 上一篇文章主要讲述了uvm_config_db和uvm_resource_db的区别,并阐述了uvm中resource database的数… ...
uvm_resource_db#(T)是⼀个独⽴的类,⾥边调⽤了resource_pool,根据不同的资源类型有不同的uvm_resource_db#(T),所以在资源池中可以根据类型把他们区分开来。相当于把uvm_resource #(T)通过 uvm_resource_db#(T)这个独⽴的类型进⾏封装⼀次,然后注册到pool中 1.typedef uvm_resource #(T) ...