UVM集中资源数据库用于存储可配置(configurable)对象/object、变量/variables、虚拟接口/virtual interfaces、队列/queues、类句柄/class handles等,并从数据库中检索它们。这种可配置的测试平台为验证工程师提供了一定程度的自由度,以在测试平台的各个部分中使用所提供的信息。
资源数据库由多态资源容器组成,这些容器以查找表的形式存储每个资源,这是一个集中的资源数据库。?
如下所示的uvm_resource_base和uvm_resource是uvm源代码片段。
uvm_resource_base 类
virtual class uvm_resource_base extends uvm_object;
protected string scope;
int unsigned precedence;
static int unsigned default_precedence = 1000;
...
...
endclass
uvm_resource 类
class uvm_resource #(type T=int) extends uvm_resource_base;
typedef uvm_resource#(T) this_type;
static this_type my_type = get_type();
...
...
endclass
uvm_resource_base类是资源容器系列的公共基类,定义了一组函数。uvm_resource#(type T)
是一个参数化类,为资源操作提供附加函数,如read()和write() 。
每个资源都有一组范围。范围/作用域(scope)是一个上下文,类似于 uvm 测试平台层次结构中组件的实例化,它表示唯一的字符串(例如tb_top
.env.agent_o.mon?)。范围也可以使用uvm_object::get_full_name().
一组范围表示为正则表达式。为简单起见,一组字符串可以说是一组范围(例如,像tb_top\.env\.agent_o.*这样的正则表达式涉及字符串tb_top?.env.agent_o.mon和tb_top
.env.agent_o.drv等) 。测试平台层次结构中可以有“N”组字符串(范围)。
当在数据库中查找资源的范围和名称匹配时,优先级变量是资源相对于其他资源的关联优先级。变量default_precedence用于初始设置默认优先级值,即1000。允许更改优先级值。当两个资源具有相同优先级时,第一个找到的资源具有优先级。
?
?
资源数据库由一对关联数组名称组成,即“名称表”和“类型表”。“名称表”和“类型表”也称为“名称映射”和“类型映射”。资源按名称存储在“名称表”中,并按类型句柄存储在“类型表”中。名称和类型表都有一个与之关联的队列。如果多个资源具有相同的名称或类型,则将其存储在相应的队列中。
注:资源数据库也称为资源池/resource pool。