从systemverilog中的函数返回队列

时间:2012-12-20 01:28:51

标签: system-verilog

我无法编译此代码:

      function integer[$] get_register_name;
                integer ret[$];
                ret.push_back(1);
                ret.push_back(2);
                return ret;
      endfunction

是否可以从函数返回队列?

2 个答案:

答案 0 :(得分:17)

是的,您可以从函数返回队列。但要这样做,您必须使用typedef定义一个新类型并返回该类型。

typedef integer queue_of_int[$];

function queue_of_int get_register_name();
   queue_of_int ret;
   ret.push_back(1);
   ret.push_back(2);
   return ret;
endfunction

请注意,在typedef中,[$]位于类型名称之后,而队列元素类型位于类型名称之前。

答案 1 :(得分:1)

下来有代码的例子对我有用....

typedef bit[31:0] bitQueue[$];

//合并第一个和第二个队列,   //将第二个队列添加到第一个

的末尾
function bitQueue   mergeEnd(bit[31:0] queue_1[$], bit[31:0] queue_2[$]);
  foreach (queue_2[i]) queue_1.push_back(queue_2[i]);
  return queue_1;
endfunction