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插入元素a
- q.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_name
- do_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