如何在多维系统verilog uvm_queue中迭代项目



我正在尝试创建一个由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_queueget()方法来访问内部队列元素

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

最新更新