J
jimnan
Guest
How to pass pass arrays af typen byte til C-funktionen i Systemverilog DPI?
Nedenfor er min test-kode, VCS synes konvertere char til int.
Hvorfor en [1] ~ a [3] blive 0?
De bør 3/5/7 hhv.
(LRM 3,1 spec. Sagde SV kunne passere datatype byte som argument)
Kan nogen prøve denne kode i modelsim eller ncverilog?///// C kode
int arr_read (char * a)
(
int i;
for (i = 0; i <5; i ) (
printf ( "i C-kode, en [% d] =% d \ n", i, a )![Wink ;) ;)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
)///// System verilog codeimport "DPI-C"-funktionen arr_read (byte a [5]);
modul test ();
byte array_src [5] = (2,3,5,7,9);
indledende begynde: t1_label
$ display ( "array_src [0]% h", array_src [0]);
$ display ( "array_src [1] er% h", array_src [1]);
$ display ( "array_src [2] er% h", array_src [2]);
arr_read (array_src, array_src2, error);
ende: t1_labelendmodule
/ / Output-display
> Array_src [0] er 02
> Array_src [1] er 03
> Array_src [2] er 05
> I C-kode, en [0] = 2
> I C-kode, en [1] = 0
> I C-kode, en [2] = 0
> I C-kode, en [3] = 0
> I C-kode, en [4] = 3
Nedenfor er min test-kode, VCS synes konvertere char til int.
Hvorfor en [1] ~ a [3] blive 0?
De bør 3/5/7 hhv.
(LRM 3,1 spec. Sagde SV kunne passere datatype byte som argument)
Kan nogen prøve denne kode i modelsim eller ncverilog?///// C kode
int arr_read (char * a)
(
int i;
for (i = 0; i <5; i ) (
printf ( "i C-kode, en [% d] =% d \ n", i, a )
)///// System verilog codeimport "DPI-C"-funktionen arr_read (byte a [5]);
modul test ();
byte array_src [5] = (2,3,5,7,9);
indledende begynde: t1_label
$ display ( "array_src [0]% h", array_src [0]);
$ display ( "array_src [1] er% h", array_src [1]);
$ display ( "array_src [2] er% h", array_src [2]);
arr_read (array_src, array_src2, error);
ende: t1_labelendmodule
/ / Output-display
> Array_src [0] er 02
> Array_src [1] er 03
> Array_src [2] er 05
> I C-kode, en [0] = 2
> I C-kode, en [1] = 0
> I C-kode, en [2] = 0
> I C-kode, en [3] = 0
> I C-kode, en [4] = 3