uvm_queue
从uvm_object
扩展而来,是对sv queue的扩展。
sv中,队列queue有以下几种方法(假设已定义int q[$]):
q.push_back(a)
,元素a压入队尾q.push_front(a)
,元素a压入队首q.pop_front()
,弹出队首元素q.pop_back()
,弹出队列元素q.insert(n,a)
,队列q位置n插入元素aq.delete(n)
,删除队列q第n个元素q.size()
,获取队列q的长度
uvm_queue实现了基于类的动态队列,在sv 队列基础上,主要更改/新加了以下方法:
get_global_queue()
,获取全局队列,没有全局队列的话,新建全局队列;get_global(int index)
,获取全局队列并返回第index个元素;get(int index)
,返回队列第index个元素,index超出范围会报warning;size()
,返回队列的长度;insert(int index, q item)
,队列index位置插入元素item,index超出范围会报warning;delete(int index)
,删除队列第index个元素,超出范围会报warning,index=-1删除整个队列;get_type_name()
,返回队列type_namedo_copy(uvm_object rhs)
,调用uvm_object的do_copy并做类型转换$cast(this_type, rhs),然后copy队列;covert2string()
,吧队列转换为字符串pop_front()
,pop_back()
,push_front()
,push_back()
与sv队列的相关方法相同
uvm库中有如下几个地方用到uvm_queue
uvm_component
,用uvm_queue存储unused_resources、scope等;uvm_callback_base
uvm_resource
uvm_config_db
uvm_reg
uvm_req_array
uvm_req_block
uvm_reg_file
uvm_mem