5

私の目標は、開いている配列を C++ で埋めることです。ステージは以下の通り。1. SV: サイズのアンパックされた配列を定義し、インポート関数でオープン配列を介して送信します。2. C++: 開いている配列を埋めます。3. SV: アレイを使用します。

サイズのアンパックされた配列の場合、問題はありません。しかし実際の状況では、配列のサイズは頻繁に変更され、コンパイルされた C++ 関数は毎回再コンパイルする必要があります。この状況を回避するには、オープン配列を使用して、C 関数がサイズをチェックし、それに応じてデータを埋める必要があります。

以下では、ソースを簡略化し、重要な部分のみを示します。インポート関数 svcpp は SV で呼び出され、C++ で実行されます。引数はオープン配列 i[] で、そのハンドルは C++ 側では h です。C++ ソースをコンパイルすると、"error LNK1120: unresolved externals" というエラーが発生します。

何が問題ですか?

SV側:

module
    import "DPI-C" context function void svcpp (inout byte unsigned i[]);
    byte myarray[2];

    initial
        svcpp(myarray);
endmodule

C++ 側:

#include "svdpi.h"
#include "dpiheader.h"// This includes the data structure for the open array

void svcpp(const svOpenArrayHandle h){
    //*(uchar *) x = *(uchar *) svGetArrElemPtr(h,0);
    *(uchar *) svGetArrElemPtr(h,1) = 10; //I really want this operation.
}
4

1 に答える 1