ダイナミック リンク用に XSI 関数を準備 - 2023.2 日本語

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

Document ID
UG900
Release Date
2023-10-18
Version
2023.2 日本語

AMD では、XSI 関数を間接的に呼び出すには、ダイナミック リンクを使用すること推奨します。この方法は XSI 関数を直接呼び出すよりも複雑ですが、ダイナミック リンクを使用すると、HDL デザインのコンパイルを C/C++ プログラムのコンパイルとは切り離して実行できます。C/C++ プログラムが実行中でも、HDL デザインをいつでもコンパイルし、読み込むことができます。

ダイナミック リンクを介して関数を呼び出すには、次の手順を実行する必要があります。

  1. 関数を含む共有ライブラリを開きます。
  2. 関数を名前で検索し、そのポインターを取得します。
  3. 関数ポインターを使用して関数を呼び出します。
  4. 共有ライブラリを閉じます (オプション)。

手順 1、2、4 では、次の表に示すように、OS 用のライブラリ呼び出しを使用する必要があります。これらの関数の詳細は、ご使用の OS の資料を参照してください。

表 1. OS 別ライブラリ コール
機能 Linux Windows
ライブラリを開く
void *dlopen(const char 
*filename, int flag);
HMODULE WINAPI 
LoadLibrary(_In_ LPCTSTR 
lpFileName
);
関数を名前で検索
void *dlsym(void 
*handle, const char 
*symbol);
FARPROC WINAPI 
GetProcAddress(_In_ 
HMODULE hModule,_In_ 
LPCSTR lpProcName
);
共有ライブラリを閉じる
int dlclose(void 
*handle);
BOOL WINAPI 
FreeLibrary(_In_ HMODULE 
hModule
);

XSI では、カーネル共有ライブラリとデザイン共有ライブラリの 2 つの共有ライブラリから関数を呼び出す必要があります。カーネル共有ライブラリは Vivado シミュレータに含まれており、librdi_simulator_kernel.so (Linux) または librdi_simulator_kernel.dll (Windows) という名前です。このライブラリは次のディレクトリにあります。

<Vivado Installation Root>/lib/<platform>

<platform> は、lnx64.o または win64.o です。プログラムの実行中は、ライブラリ パスにこのディレクトリを必ず含めてください。Linux では LD_LIBRARY_PATH 環境変数に、Windows では PATH 環境変数に含めます。

デザイン共有ライブラリは、Vivado シミュレータにより HDL デザインのコンパイル中に作成され (デザイン共有ライブラリの準備 を参照)、xsimk.so (Linux) または xsimk.dll (Windows) と呼ばれ、通常は次のディレクトリにあります。

<HDL design directory>/xsim.dir/<snapshot name>

<HDL design directory> はデザイン共有ライブラリが作成されたディレクトリ、<snapshot name> はライブラリ作成中に指定するスナップショット名です。

C/C++ プログラムは、デザイン共有ライブラリにある xsi_open() という XSI 関数と、カーネル共有ライブラリのその他すべての XSI 関数を呼び出します。

Vivado シミュレータに含まれている XSI コード例では、XSI 関数が Xsi::Loader と呼ばれる C/C++ クラスにまとめられています。このクラスは、2 つの共有ライブラリの名前を受け入れて、必要なダイナミック リンク手順を内部で実行し、すべての XSI 関数をクラスのメンバー関数として使用できるようにします。このように XSI 関数をラップすると、ダイナミック リンクの OS 関数を直接呼び出す必要がなくなります。このクラスのソース コードは、Vivado インストール ディレクトリの次のディレクトリにあり、ユーザーのプログラムにコピーできます。

<Vivado Installation Root>/examples/xsim/verilog/xsi/counter/xsi_loader.h
<Vivado Installation Root>/examples/xsim/verilog/xsi/counter/xsi_loader.cpp

Xsi::Loader を使用するには、次の例に示すように、2 つの共有ライブラリの名前を渡してインスタンシエートします。

#include "xsi_loader.h"
...
Xsi::Loader loader("xsim.dir/mySnapshot/xsimk.so", "librdi_simulator_kernel.so");