AMD FIR ブロックは、hls_fir.h ライブラリを使用すると C++ デザイン内で呼び出すことができます。このセクションでは、FIR を C++ コードで設定する方法を説明します。
C++ コードで FIR を使用するには、次の手順に従います。
- コードに hls_fir.h ライブラリを含めます。
- 定義済み構造体
hls::ip_fir::params_t
を使用してスタティック パラメーターを設定します。 - FIR 関数を呼び出します。
- ランタイム入力コンフィギュレーションを定義してパラメーターの一部を動的に変更します (オプション)。
次のコード例に、これらの各手順の実行方法を示します。各手順の詳細は、次のとおりです。
まず、ソース コードに FIR ライブラリを含めます。このヘッダー ファイルは、Vitis HLS インストール ディレクトリの include ディレクトリにあります。このファイルは、Vitis HLS を実行すると自動的に検索されます。Vitis HLS 内でコンパイルする場合は、このディレクトリへのパスを指定する必要はありません。
#include "hls_fir.h"
FIR のスタティック パラメーターを定義します。これには、入力幅、係数、フィルター レート (single
、decimation
、hilbert
) などのスタティック属性が含まれます。FIR ライブラリにはパラメーター指定構造体 hls::ip_fir::params_t
が含まれ、すべてのスタティック パラメーターをデフォルト値で初期化できます。
次の例では、係数を配列 coeff_vec
として定義し、定義済み構造体に基づくユーザー定義構造体 myconfig
を使用して、係数値、入力幅、および量子化モードのデフォルト値を変更しています。
struct myconfig : hls::ip_fir::params_t {
static const double coeff_vec[sg_fir_srrc_coeffs_len];
static const unsigned num_coeffs = sg_fir_srrc_coeffs_len;
static const unsigned input_width = INPUT_WIDTH;
static const unsigned quantization = hls::ip_fir::quantize_only;
};
HLS 名前空間と定義済みスタティック パラメーター (この例では myconfig
) を使用して FIR 関数のインスタンスを作成し、run
メソッドで関数を呼び出して関数を実行します。関数引数は、順に入力データ、出力データです。
static hls::FIR<param1> fir1;
fir1.run(fir_in, fir_out);
オプションで、ランタイム入力コンフィギュレーションを使用できます。FIR のモードには、インターリーブされたチャネルで係数がどのように使用されるか、または係数の再読み込みがいつ必要かが、この入力のデータによって決定されるものがあります。これは動的に設定できるので、変数として定義されます。この入力コンフィギュレーションが必要なモードの詳細は、 『FIR Compiler LogiCORE IP 製品ガイド』 (PG149) を参照してください。
ランタイム入力コンフィギュレーションを使用する場合、FIR 関数を入力データ、出力データ、および入力コンフィギュレーションの 3 つの引数を使用して呼び出します。
// Define the configuration type
typedef ap_uint<8> config_t;
// Define the configuration variable
config_t fir_config = 8;
// Use the configuration in the FFT
static hls::FIR<param1> fir1;
fir1.run(fir_in, fir_out, &fir_config);
hls::stream
を使用できます。詳細は、
Vitis HLS Introductory Examples を参照してください。