AMD では、XSI 関数を間接的に呼び出すには、ダイナミック リンクを使用すること推奨します。この方法は XSI 関数を直接呼び出すよりも複雑ですが、ダイナミック リンクを使用すると、HDL デザインのコンパイルを C/C++ プログラムのコンパイルとは切り離して実行できます。C/C++ プログラムが実行中でも、HDL デザインをいつでもコンパイルし、読み込むことができます。
ダイナミック リンクを介して関数を呼び出すには、次の手順を実行する必要があります。
- 関数を含む共有ライブラリを開きます。
- 関数を名前で検索し、そのポインターを取得します。
- 関数ポインターを使用して関数を呼び出します。
- 共有ライブラリを閉じます (オプション)。
手順 1、2、4 では、次の表に示すように、OS 用のライブラリ呼び出しを使用する必要があります。これらの関数の詳細は、ご使用の OS の資料を参照してください。
機能 | Linux | Windows |
---|---|---|
ライブラリを開く |
|
|
関数を名前で検索 |
|
|
共有ライブラリを閉じる |
|
|
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");