複素型の使用 - 2022.1 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2022-05-26
Version
2022.1 日本語

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()); }