-sv_lib、-sv_liblist、および -sv_root を使用したインポート例 - 2022.1 日本語

Vivado Design Suite ユーザー ガイド: ロジック シミュレーション (UG900)

Document ID
UG900
Release Date
2022-04-21
Version
2022.1 日本語

コード

次のファイルがあるとします。

  • C 関数を含むファイル 2 つ
  • 次の関数を使用する SystenVerilog ファイル:
    • function1.c
    • function2.c
    • file.sv

function1.c

#include "svdpi.h"
DPI_DLLESPEC
int myFunction1()
{
    return 5;
}

function2.c

#include <svdpi.h>
DPI_DLLESPEC
int myFunction2()
{
    return 10;
}

file.sv

module m();
import "DPI-C" pure function int myFunction1 (); 
import "DPI-C" pure function int myFunction2 ();
integer i, j;
initial
begin
#1;
  i = myFunction1();
  j = myFunction2();
  $display(i, j);
  if( i == 5 && j == 10)
    $display("PASSED");
  else
    $display("FAILED");
end
endmodule

使用法

次に、C ファイルをコンパイルして Vivado シミュレータにリンクする方法を示します。

1 段階フロー (最も簡単なフロー)

xsc function1.c function2.c
xelab -svlog file.sv -sv_lib dpi

フローの説明:

xsc コンパイラで C コードをコンパイルしてリンクし、共有ライブラリ (xsim.dir/xsc/dpi.so) を作成して、xelab でこの共有ライブラリを -sv_lib オプションを使用して参照します。

2 段階フロー

xsc -compile function1.c function2.c -work abc
xsc -shared/-shared_systemc abc/function1.lnx64.o abc/function2.lnx64.o -work abc 
xelab -svlog file.sv -sv_root abc -sv_lib dpi -R

フローの説明:

  • 2 つの C ファイルを作業ディレクトリ (abc) で該当するオブジェクト コードにコンパイルします。
  • これらの 2 つのファイルをリンクして共有ライブラリ (dpi.so) を作成します。
  • -sv_root オプションを使用して、このライブラリが作業ディレクトリ (abc) から検索されるようにします。
    ヒント: -sv_root には、-sv_lib オプションで指定された共有ライブラリを検索するディレクトリを指定します。Linux では、-sv_root が指定されておらず、DPI ライブラリの名前に接頭辞 lib と接尾辞 .so が付いている場合、共有ライブラリのディレクトリ パスには LD_LIBRARY_PATH 環境変数が使用されます。

2 段階フロー (上記よりもさらにオプションを追加)

xsc -compile function1.c function2.c -work "abc" -v 1
xsc -shared/-shared_systemc "abc/function1.lnx64.o" "abc/function2.lnx64.o" -work "abc" -o final -v 1 
xelab -svlog file.sv -sv_root "abc" -sv_lib final -R

フローの説明:

ユーザーがコンパイルおよびリンクを実行する場合は、-verbose オプションを使用すると、コンパイラが起動されたパスおよびオプションを確認できます。これらはこの後必要に合わせて調整できます。上記の例の場合、final という共有ライブラリが作成されます。この例では、ファイル パスのスペースがどのように処理されるかも示しています。