我正在尝试创建一个由uvm_queue数组构造的对象。其思想是,数组中的每个项目本身就是一个uvm_queue(即项目列表(。Queue类型是一个类。
问题是我无法迭代单个"内存ID"列表中的项。
当我编译时,我得到以下错误:
如果(ml_mem_array[mem_id][ii].m_addr==a_addr(
xmelab:*E,CUVNAA(./utils.sv,47|45(:索引已应用于不合适的类型。
代码如下:
// ====================
class mem_entry extends uvm_object;
int m_addr;
int m_data;
endclass
// ====================
class memory extends uvm_object;
uvm_queue#(mem_entry) ml_mem_array[2];
function mem_entry get_mem_entry(int a_addr, int mem_id);
int v_size;
int ii;
v_size = ml_mem_array[mem_id].size();
if ((mem_id >= 2) || (v_size == 0))
return null;
for (ii=0 ; ii<=(v_size-1) ; ii=ii+1)
begin
if (ml_mem_array[mem_id][ii].m_addr == a_addr)
return ml_mem_array[mem_id][ii];
end
return null;
endfunction
endclass
您需要使用uvm_queue
的get()
方法来访问内部队列元素
for (int ii=0 ; ii<=(v_size-1) ; ii=ii+1)
begin
mem_entry entry = ml_mem_array[mem_id].get(ii);
if (entry.m_addr == a_addr)
return entry;
end