FFT IP ライブラリ - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

AMD FFT ブロックは、hls_fft.h ライブラリを使用すると C++ デザイン内で呼び出すことができます。このセクションでは、FFT を C++ コードで設定する方法を説明します。FFT アプリケーションの例は、GitHub の Vitis-HLS-Introductory-Examples/Misc を参照してください。

C++ コードで FFT を使用するには、次の手順に従います。

  1. コードに hls_fft.h ライブラリを含めます。
  2. 定義済み構造体 hls::ip_fft::params_t を使用してデフォルト パラメーターを設定します。
  3. ランタイム コンフィギュレーションを定義します。
  4. FFT 関数を呼び出します。
    ヒント: DATAFLOW プラグマまたは指示子を使用するため、FFT のパイプライン実行は、パイプライン ループではなく、データフロー ループ内に含める必要があります。
  5. (オプション) ランタイム ステータスをチェックします。

次のコード例に、これらの各手順の実行方法を示します。各手順の詳細は、次のとおりです。

まず、ソース コードに FFT ライブラリを含めます。このヘッダー ファイルは、Vitis HLS のインストール ディレクトリの include ディレクトリに含まれています。このディレクトリは、Vitis HLS が実行されると自動的に検索されます。

#include "hls_fft.h"

FFT のスタティック パラメーターを定義します。これには、動的に変化しない入力幅、チャネル数、アーキテクチャ タイプなどが含まれます。FFT ライブラリにはパラメーター指定構造体 hls::ip_fft::params_t が含まれ、すべてのスタティック パラメーターをデフォルト値で初期化できます。

この例では、出力順序、コンフィギュレーション ポートとステータス ポートの幅のデフォルト値を、定義済み構造体に基づくユーザー定義の構造体 param1 を使用して変更しています。

struct param1 : hls::ip_fft::params_t {
    static const unsigned ordering_opt = hls::ip_fft::natural_order;
    static const unsigned config_width = FFT_CONFIG_WIDTH;
    static const unsigned status_width = FFT_STATUS_WIDTH;
};

ランタイム コンフィギュレーションとランタイム ステータスのデータ型と変数を定義します。これらの値は動的に変化する可能性があるので、変更可能で API からアクセス可能な C コードの変数として定義します。

typedef hls::ip_fft::config_t<param1> config_t;
typedef hls::ip_fft::status_t<param1> status_t;
config_t fft_config1;
status_t fft_status1;

次に、ランタイム コンフィギュレーションを設定します。この例では、direction 変数の値に基づいて FFT の方向 (前方向または逆方向) を設定し、スケーリング スケジュールの値も設定しています。

fft_config1.setDir(direction);
fft_config1.setSch(0x2AB);

HLS 名前空間と定義済みスタティック コンフィギュレーション (この例では param1) を使用して FFT 関数を呼び出します。関数のパラメーターは、順に入力データ、出力データ、出力ステータス、入力コンフィギュレーションを示します。

hls::fft<param1> (xn1, xk1, &fft_status1, &fft_config1);

最後に出力ステータスをチェックします。この例では、オーバーフロー フラグがチェックされて、結果が ovflo 変数に格納されます。

    *ovflo = fft_status1->getOvflo();
ヒント: 上の例はスカラー値と配列の使用を示していますが、FFT 関数には引数に hls::stream を使用できます。詳細は、ストリーミング インターフェイス使用した FFT 関数 を参照してください。