如何从SystemVerilog中的函数返回动态结构数组

时间:2017-06-14 21:54:40

标签: verilog system-verilog

我在解决从函数返回动态结构数组的语法时遇到了问题。我有以下小例子:

`timescale 1ns/10ps

 typedef struct{
    string     Name;
    int        Age;
 } PersonType;

function  PersonType A []  getPeopleInfo();
   automatic string Name [50];//Max of 50 people
   automatic int Age [50];
   PersonType A [];
   /*Turns out we only have 3 people->this may change at runtime*/
   Name[0]="Jon";Age[0]=25;
   Name[1]="Ana";Age[1]=32;
   Name[2]="Ali";Age[2]=19;

  A=new[3];/*This size may change at runtime*/
   for(int idx=0;idx<3;idx++)
     begin
        A[idx].Name=Name[idx];
        A[idx].Age=Age[idx];
     end
   return A;
endfunction // getPeopleInfo

module Test();
   PersonType A [];
initial begin
   A=getPeopleInfo();
   for(int idx=0;idx<A.size();idx++)
     begin
        $display(A[idx].Name);
        $display(A[idx].Age);
     end

end
endmodule // Test

当我修改函数以便它将动态struct数组作为参数传递时,即:

void getPeopleInfo(output PersonType A []);

然后它工作正常。是否可以从函数?返回动态结构数组?如果是,那么正确的语法是什么?。

1 个答案:

答案 0 :(得分:2)

如果希望函数返回解压缩类型,则需要typedef

typedef PersonType PersonType_da_t[];

function automatic PersonType_da_t getPeopleInfo();