systemverilog return 来自函数的动态数组
systemverilog return dynamic array from function
我正在尝试从函数中 return 动态数组,
我做了圆顶工作,但我不知道如何做到完全动态,
这意味着没有声明 "data_len"
感谢您的帮助,
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 在您的函数中使用 return 动态数组,那么您需要一个 typedef.
Typedef 当你想要一个函数到 return 解压类型时需要。
例如
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
我正在尝试从函数中 return 动态数组, 我做了圆顶工作,但我不知道如何做到完全动态, 这意味着没有声明 "data_len" 感谢您的帮助,
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 在您的函数中使用 return 动态数组,那么您需要一个 typedef.
Typedef 当你想要一个函数到 return 解压类型时需要。
例如
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