Je ne reçois pas la sortie correcte pour le morceau de code suivant en utilisant DPI-C dans VCS dans EDA Playground. J'attends 6 comme réponse mais j'obtiens 248 à chaque fois, indépendamment des valeurs a et b. J'ai essayé d'utiliser svLogic, int et unsigned char pour le type de données pour a_int dans helloFromC.c.En DPI-C, quels types de données utiliser pour les variables internes?
module automatic test;
import "DPI-C" function void helloFromC(logic [2:0] a, logic [2:0] b);
initial run();
task run();
logic [2:0] a;
logic [2:0] b;
logic [2:0] c;
a = 3'b100;
b = 3'b010;
c = a+b;
$display("Output from SV is %0d", c);
helloFromC(a,b);
endtask
endmodule
Ceci est mon programme C
#include <stdio.h>
#include <svdpi.h>
extern "C" int helloFromC(svLogic a, svLogic b) {
svLogic a_int = a+b;
printf("Output from C is %d", a_int);
return 0;
}
je reçois comme sortie
Output from SV is 6
Output from C is 248
De l'en-tête 'svdpi.h', il semble que' svLogic' soit un 'uint8_t'. Si tel est le cas, cela ne correspond pas à la chaîne de format "% d" dans C. –
'logic' est une variable à 4 états. Essayez «bit». De plus, puisque vous utilisez des vars 3 bits, masquez le m dans 'c'/ – Serge
@Serge Je n'ai pas compris ce que vous vouliez dire par "masquer le m dans 'c'" –