私の目的は、C から SV に配列を渡し、配列の内容を SV に出力することです。次の C プログラムを試して、いくつかのテキスト ファイル (data_file.txt) (以下のリンクにある完全なソースを参照) を配列に変換して試してみました。 SystemVeilog(SV) で DPI 呼び出しを使用して配列を読み戻すには、「C」で配列値をメイン関数内にある関数 (mydisplay) に渡しました (ここで間違っている場合は修正してください)。配列の値が SV 環境に読み戻されていないようです。その理由は何でしょうか。SV で配列を効率的に取得する方法はありますか?
cコード:
void mydisplay(svOpenArrayHandle h) {
int *a;
a =(int*)svGetArrayPtr(h);
for( i=0;i<idx;i++) {
io_printf("C: values[%2zu]=0x%02x\n",i,values[i]);
a[i] = values[i];
}
}
SVコード:
program automatic top;
int a[32000];
import "DPI-C" function void mydisplay(inout int h[]);
initial begin
mydisplay(a);
foreach(a[i]) $display("SV after DPI: a[%0d]=%0d",i,a[i]);
end
endprogram
EDAplaygroundのソース