System verilog systemverilog从函数返回动态数组

System verilog systemverilog从函数返回动态数组,system-verilog,System Verilog,我试图从函数返回动态数组, 我做了dome的工作,但我不知道如何做到完全动态, 这意味着没有声明“数据” 谢谢你的帮助 module test1(); typedef integer dyn_arr[]; function dyn_arr get_register_name(); int data_len = 3; get_register_name = new [data_len] ; get_register_name[0] = 5; get_regist

我试图从函数返回动态数组, 我做了dome的工作,但我不知道如何做到完全动态, 这意味着没有声明“数据” 谢谢你的帮助

module test1();

typedef integer dyn_arr[];

function dyn_arr get_register_name();
    int data_len = 3;
    get_register_name = new [data_len] ;
    get_register_name[0] = 5;
    get_register_name[1] = 2;

endfunction

 dyn_arr my_q;

  initial begin
       my_q = get_register_name();
      $display("%d",my_q[1]);
      $display("%d",my_q[0]);
  end

endmodule

您可以根据需要在函数中通过引用传递动态数组

下面是它的示例代码

module tp();
  integer a[];

  initial
  begin
    return_x(a);
    $display("a - %p", a);
  end
endmodule

function automatic void return_x(ref integer x[]);
  x = new [3];
  x = '{3,3,3};
endfunction

// Output - 
// a - '{3, 3, 3}

如果要在函数中使用return返回动态数组,则需要一个typedef

当您希望函数返回未打包的类型时,需要使用Typedef

e、 g


你是说函数中没有变量声明吗?您可以将动态数组的大小作为参数传递给函数check您所说的“完全动态”是什么意思数组是固定的,还是动态大小的。没有中间项。可能需要队列或关联数组?
typedef int registerdynamic_t[];
function automatic  registerdynamic_t return_dyn_arr get_register_name(int data_len=2);       
    return_dyn_arr = new [data_len] ;
    //you can use a for loop to put values in your dynamic array
    return_dyn_arr [0] = 5;
    return_dyn_arr [1] = 2;
    return return_dyn_arr ;
endfunction