jimnan
Newbie level 2
How to pass pass arrays of type byte to C function in Systemverilog DPI ?
Below are my test code, VCS seem convert char to int.
Why a[1]~ a[3] become 0 ?
They should be 3/5/7 respectively.
(LRM 3.1 spec. said SV could pass datatype byte as argument )
Can anyone try this code in modelsim or ncverilog ?
///// C code
int arr_read( char *a)
{
int i;
for(i=0; i<5; i++) {
printf("in c code , a[%d] =%d\n",i, a); }
}
///// system verilog codeimport "DPI-C" function arr_read(byte a[5]);
module test ();
byte array_src[5] = {2,3,5,7,9};
initial begin : t1_label
$display("array_src[0] is %h", array_src[0]);
$display("array_src[1] is %h", array_src[1]);
$display("array_src[2] is %h", array_src[2]);
arr_read(array_src, array_src2, error);
end : t1_labelendmodule
// output display
> array_src[0] is 02
> array_src[1] is 03
> array_src[2] is 05
> in c code , a[0] =2
> in c code , a[1] =0
> in c code , a[2] =0
> in c code , a[3] =0
> in c code , a[4] =3
Below are my test code, VCS seem convert char to int.
Why a[1]~ a[3] become 0 ?
They should be 3/5/7 respectively.
(LRM 3.1 spec. said SV could pass datatype byte as argument )
Can anyone try this code in modelsim or ncverilog ?
///// C code
int arr_read( char *a)
{
int i;
for(i=0; i<5; i++) {
printf("in c code , a[%d] =%d\n",i, a); }
}
///// system verilog codeimport "DPI-C" function arr_read(byte a[5]);
module test ();
byte array_src[5] = {2,3,5,7,9};
initial begin : t1_label
$display("array_src[0] is %h", array_src[0]);
$display("array_src[1] is %h", array_src[1]);
$display("array_src[2] is %h", array_src[2]);
arr_read(array_src, array_src2, error);
end : t1_labelendmodule
// output display
> array_src[0] is 02
> array_src[1] is 03
> array_src[2] is 05
> in c code , a[0] =2
> in c code , a[1] =0
> in c code , a[2] =0
> in c code , a[3] =0
> in c code , a[4] =3