uvm_top.find("*.seqr") - 按照逻辑名字查找组件 uvm_top.find("*.drv_?",comps) - 使用通配符查找组件,查找到之后,将其放到队列comps中 查询组件的层次关系 使用逻辑层次配置组件 type - 可以填变量或者是类型 context - 上下文环境,一般就是this string instance_name - 填入full_name string field_name...
config_db 是参数化的,它的类型可以是标量、类句柄、队列、列表,甚至是虚拟接口。通过uvm_config_db::set 和 uvm_config_db::get 函数进行全局存储和检索数据库中的信息。二、set和get函数 1、set函数 set函数的原型为 static function void set(uvm_component cntxt,string inst_name,string field_name,T ...
get_global_queue() 静态函数,只能通过uvm_queue静态调用,完成实例化。 get_global(index) 静态函数,只能通过uvm_queue静态调用,返回队列中的元素值,index的范围是[0,size()-1]。 get(index) 虚函数,通过句柄调用,返回队列中的元素值,index的范围是[0,size()-1]。 size() 虚函数,通过句柄调用,返回队列的...
uvm_config_db可以将scope字符串与组件层次结构中的完整层次结构名称相关联,这样就可以通过组件层次来更加方便地访问数据库的条目(储存的信息)。 config_db 是参数化的,它的类型可以是标量、类句柄、队列、列表,甚至是虚拟接口。通过uvm_config_db::set 和 uvm_config_db::get 函数进行全局存储和检索数据库中的信...
void uvm_config_db #( type T = int )::set( uvm_component cntxt , string inst_name , ...
值得一提的是,很多EDA工具在mailbox传递信息时,在约定 function的返回类型时,都不支持动态数组和队列,这个时候同样是typedef大显身手的时刻。除了这些办法,还有别的方案么?当然,还有一种万能方法。 3. class wrapper 这就是把array或者queue做成一个类,然后使用这个类进行操作。这也是为什么明明有queue这种类型了,UVM...
config_db比set/get_config强大的地方在于,它设置的参数类型并不局限于以上三种。常见的枚举类型、virtual interface、bit类型、队列等都可以成为config_db设置的数据类型 UVM提供命令行参数来对它们进行设置 <sim command> +uvm_set_config_int=<comp>,<field>,<value> ...
rtab/ttab是联合数组,索引的类型分别是string(name)和uvm_reousece_base(type),内容为uvm_queue#(uvm_resource_base)的队列,这个是两个全局存在的,用于存储set进来的resource,和get查找resource的地方。 get()表明是全局唯一性。 其实就是将set的内容按照name/type进行存放在globle的rtab和ttab中去。
UVM中的database涉及到两个容器类(container class): uvm_pool#(KEY, T)和uvm_queue#(T).这两个容器类其实就是参数化的关联数组和队列,对应systemverilog中的: uvm_pool#(KEY, T)--associative array uvm_queue#(T)--Queue 每一个resource的句柄都被保存到了两个uvm_resource_base类型的uvm_queue中(uvm...
在上图中,如果请求检索字符串类型的item,则会从前到后遍历queue,并且将返回字符串类型首次出现的对象。现在,考虑队列中的item 2(red)和 3(blue)具有相同scope的情况,并且对该特定scope调用get_by_type( )。然后返回item 2(red),因为它位于队列的较早位置。