Vitis HLS の C++ コードでは、std::complex<T>
または hls::x_complex<T>
を使用して xmcImportFunction ブロックの複素信号をモデル化できます。
Model Composer で生成されるコードは、std::complex
を使用して複素信号を記述します。インポートした C/C++ ブロック関数が hls::x_complex
を使用して記述されている場合、出力コードを生成すると、std::complex
-to-hls::x_complex
アダプターが自動的に挿入され、ブロック ポートの複素型が変換されます。
C++ コードには、複素型の宣言に必要なヘッダー ファイルも含める必要があります。hls::x_complex
型の場合、xmcImportFunction
コマンドに hls_x_complex.h
ヘッダー ファイルの検索パス ‘$XILINX_VIVADO/include’ も含める必要があります。次に、complex_mult
関数をインポートして必要なインクルード パスを指定する例を示します。
xmcImportFunction('my_lib',{'complex_mult'}, 'complex_mult.h', {}, {'$XILINX_VIVADO/include'});
複素型を使用した関数の例
#include "hls_x_complex.h"
hls::x_complex<double>
complex_mult(hls::x_complex<double> in1, hls::x_complex<double> in2)
{ return in1 * in2; }
#include <complex>
std::complex<double>
complex_mult2(std::complex<double> in1, std::complex<double> in2)
{ return in1 * in2; }
#include <complex>
void
complex_mult3(std::complex<double> in1, std::complex<double> in2, std::complex<double> &out1)
{ out1.real(in1.real() * in2.real() - in1.imag() * in2.imag());
out1.imag(in1.real() * in2.imag() + in1.imag() * in2.real()); }