Containers
Container类定义了参数化的数据结构,以实现比systemverilog更高效的数据共享:原因在于Container类之间的复制是基于reference的拷贝,而不是基于原始数据。
uvm_queue #(T)和systemverilog中的queue类似;
uvm_pool #(T)和systemverilog中的associative array类似
uvm_pool
class uvm_pool #(type KEY=int, T=uvm_void) extends uvm_object;
预定义
变量
const static string type_name="uvm_pool";
typedef uvm_pool #(KEY,T) this_type;
static protected this_type m_global_pool;
protected T pool[KEY];
function
1. static function this_type get_global_pool;
获取全局唯一的pool(资源池)
m_global_pool非null ,返回m_global_pool
2.static function T get_global(KEY key);
获取全局唯一的资源(T对象,即pool【key】)
3. virtual function T get (KEY key);
如果pool中无key,给pool[key] = default_value;
return ool[key];
4. virtual function add (KEY key,T item)
pool [key] = item
5. virtual function int num();
return pool.num
6. virtual function void delete(KEY key)
删除pool[key]
7. virtual function int exists(KEY key)
key有1,无0
8. virtual function int first(ref KEY key); // last/next/prev类似
key是第一个则1,否则0
9. virtual function uvm_object create(string name="");
10.virtual function string get_type_name;
11.virtual function do_copy/do_print
uvm_object_string_pool: 由string索引。
uvm_queue
class uvm_pool #(type T=int) extends uvm_object;
变量
const static string type_name="uvm_queue";
typedef uvm_queue #(T) this_type;
static protected this_type m_global_queue;
protected T queue[KEY];