når brugen DPI, flyt arrays af typen byte til C-funktion

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 );)
)///// 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

 
Jeg kunne ikke køre din kode på grund af forskellige syntaksfejl og udefinerede variabler.Prøv dette:
Kode:

import "DPI-C"-funktion void 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);

ende: t1_label

endmodule
 
Hi echo47,
Tak for din test!
Jeg thnink VCS har problemet, når passerer datatype byte array.
Og jeg venter på deres svar.

SV co-arbejde med C er kraftfulde ~
^ _ ^

 
Sure, SV co-arbejde med C / C er meget kraftfuld ...
Men i øjeblikket, i simuleringen ENV, det er meget svært at fejlsøge C / C ...

 

Welcome to EDABoard.com

Sponsor

Back
Top