2016-03-19 1 views
1

私が知っているように、systemverilogでは、char型と文字列はありません。 Cで自然な対応がない、パックドタイプ(配列、構造体、共用体)、2状態または4状態を含むSystemVerilog固有の型。SystemVerilog固有の型をC言語で扱うにはどうしたらいいですか?

cでcharまたはstringを使用する場合は、処理方法SystemVerilog固有の型はCで、その逆も可能です。

答えて

1

入力(Cへ)は、const char *です。 SV string出力またはinout(Cから)はconst char **です。ご想像の通り

、4状態の種類は、より複雑である:

   SV TYPE - C TYPE 
       logic - svLogic 
packed array of logic - svLogicVecVal * 
     unpacked array - svOpenArrayHandle 

svLogicsvLogicVecValsvOpenArrayHandlesvdpi.hでタイプです。 svLogicunsigned charのtypedefであり、値sv_0,sv_1,sv_x、およびsv_zのマクロをsvdpi.hで定義します。 svLogicVecValavalbvalの2つのフィールドを持つstructです。 avalおよびbvalは、32ビットのint(標準形式)です。 (IUSは、avalbvalabと呼ばれる。)

svOpenArrayHandleを使用してアンパック配列を渡すは、はるかに複雑です。

structまたはunionを渡す方法がわかりません。 (Cにそのようなことを渡すことはできますが、あなたはビットストリームのキャストを行うことができますが、それは乱雑になるでしょう)。

2

「DPI-C」をお使いの方には、4状態値にアクセスする必要がない限り、引数をC互換にすることをお勧めします。これは、intbyte(char)、ints/bytesのアンパックされた配列/構造体、または文字列(char *)のみを使用することを意味します。

Modelsim/Questaにはスイッチ-dpiheader filenameがあります。これは、DPI-Cルーチン用の適切なCの引数型を生成するコードをコンパイルする際に使用する必要があります。あなたのCコードは、あなたのCコードが必要なプロトタイプと一致することを確認するためにこのファイルをインクルードすべきです。ガベージにアクセスするか、データを破損するのではなく、そうしないとコンパイラエラーが発生します。

+0

確かにお勧めですが、私は言ったでしょう。 –

関連する問題