はじめに
本記事では、複数のFFT コアを並列に実装することにより、クロックレートを超えるサンプルレートのデータを処理する方法を紹介します。
半導体技術の向上により GHz オーダーのサンプリング周波数をもつデジタル・データストリームが、通信や測定分野を中心に扱われる様になっています。これを処理する際、デジタルデバイス全体で GHz クロック動作を行う代わりに、複数の数百 MHz データストリームに分割して並列に転送や計算を行うことが可能です。この方式は Super Sampling (Super Sample Rate) 方式と呼ばれています。
デザインの構成
デザインの構成について、原理的な説明も含めて説明します。
-
Super Sampling 方式
- 複数の FFT IP を並列に実装することで、クロックレートを超えるサンプルレートのデータを処理する方式です
- 下記に 2.4G sample/s のサンプル・データストリームを 300MHz クロックで処理する場合の概念図を示します
- 8個の FFT IP を並列に実装します
- データについて、①並列化、②各 IP で並列処理、③直列化(統合)、と処理を行います
- 並列化 FFT と統合回路が必要です
- 本方式は Super Sampling 方式と呼ばれています
-
並列化
- 並列化 FFT コア部分は、必要な数の FFT IP を並列にインスタンスした部分と、各 FFT の出力を統合する回路で構成されます
-
統合回路
- 複数の FFT を統合して1つの FFT 計算結果を得る部分です
- 2並列構成の場合、1段のバタフライ演算(後述)に相当します
- IP の出力は直列 のため、バタフライ回路1組で逐次計算します
- 並列度が2より大きい場合、 基数、段数、並列数を調節して構成したバタフライ回路を設計する必要があります。
- 2並列構成の場合、1段のバタフライ演算(後述)に相当します
- 複数の FFT を統合して1つの FFT 計算結果を得る部分です
-
FFT 結果の統合
- 複数の FFT IP の結果の統合は、バタフライ演算回路を使用します。これにより1つの FFT 処理の結果と同等の結果を得ることができます
- FFT が原理的に多段のバタフライ演算回路で構成されることに則っています
- 例:8 点 FFT は 3 段構成ですが前半 2 段は 4 点 FFT 2つで構成できます
- 例:2048 点 FFT IP の結果を2つ統合して 4096 点 FFT を構成できます
- 複数の FFT IP の結果の統合は、バタフライ演算回路を使用します。これにより1つの FFT 処理の結果と同等の結果を得ることができます
-
バタフライ演算回路
- 各 FFT 出力を統合するバタフライ演算回路は下記の様に構成しています
- 回転因子の乗算回路、バタフライ構成の加減算回路(複素演算)が必要です
- ビット数の増大を抑制するための丸め回路(図示せず、乗算出力)があります
- FFT IP の入出力は直列に行われる為、タイミングに応じた回転因子の値を使用します
- 回転因子は ROM で実装しています
- 乗算や ROM 読み出しの遅延時間で生じる時間差を調整しています
- 回転因子の乗算回路、バタフライ構成の加減算回路(複素演算)が必要です
- 各 FFT 出力を統合するバタフライ演算回路は下記の様に構成しています
事例:インテル® Arria 10® での実装
-
デザイン仕様
- 今回、ターゲット・デバイスを インテル® Arria® 10 FPGA (10AX115R4F40I3SG)とし、下記の仕様で 実装し確認しました
- 動作クロック周波数:300MHz
- 使用ツール:Quartus® Prime Standard Edition v18.1
- FFT IP 設定(共通):
Data Flow type : Variable Streaming
FFT ポイント数 : 4096 点、または 2048 点 2並列 を想定
Direction : Bi-directional (Forward=通常の FFT を想定)
Input/Output Order : Natural
Data/Twiddle Data type & Precision : Fixed Point, Data 16bit, Twiddle 16bit, Output 29 bit (または 28 bit 2 並列)
- 今回、ターゲット・デバイスを インテル® Arria® 10 FPGA (10AX115R4F40I3SG)とし、下記の仕様で 実装し確認しました
-
動作確認結果(シミュレーション)
- 4096点 FFT IP の Example Design (シミュレーション用、Appendix 参照)を利用して、単一の IP の出力と 2048点 FFT IP 2並列を統合した出力を比較するシミュレーションを行い、期待動作することを確認できました
- 正弦波実数入力に対し、虚数部に線スペクトルが現れます。単一の IP も並列化 FFT デザインも量子化誤差がある程度生じますが、誤差の現れ方が構成の違いにより異なります
- 4096点 FFT IP の Example Design (シミュレーション用、Appendix 参照)を利用して、単一の IP の出力と 2048点 FFT IP 2並列を統合した出力を比較するシミュレーションを行い、期待動作することを確認できました
<動作確認用シミュレーション波形>
-
リソース確認
- 今回作成したデザインの性能、リソースとして、下記の値が得られました
- ポイント数の同じ FFT IP に比べて2倍前後のリソース消費となっています
- サンプルデザイン(2048点 FFT 2並列)
- Fmax = 301.48MHz
- 使用リソース(コア部分)
- ALM(Logic Utilization) :9,044 / 427,200 ( 3 % )
- block memory bits : 490,872 / 55,562,240 ( 1 % )
- RAM Blocks : 48 / 2,713 ( 2 % )
- DSP Blocks : 38 / 1,518 ( 3 % )
- 単一 IP(比較用、4096点 FFT)
- 使用リソース
- ALM(Logic Utilization) :4,760 / 427,200 ( 1 % )
- block memory bits : 426,552 / 55,562,240 ( 1 % )
- RAM Blocks : 35 / 2,713 ( 1 % )
- DSP Blocks : 15 / 1,518 ( 1 % )
- 使用リソース
- 今回作成したデザインの性能、リソースとして、下記の値が得られました
まとめ
- 複数の FFT IP を並列に実装することにより、数 Gsample/s の高速データに数百 MHz クロックのデバイスで FFT 処理をほどこしたり、並列化を行って処理時間を短縮することが可能です
-
インテル® Arria 10® をターゲットとしてサンプル回路を実装し、 2並列 FFT (2048点 x 2) 、 300MHz 動作の構成で、 FFT 単体より 2倍前後のリソース消費でおよそ2倍の時間短縮(スループット2倍)を行う回路を構成できました。
Appendix : 作成デザイン
今回作成した2並列デザインの動作確認は、等価となる 4096点 FFT IP の出力と比較する方法で行いました。
添付ファイル:サンプルデザイン
この記事で説明した FFT のサンプルデザイン、テストベンチは、添付の圧縮ファイルに含まれています。詳細については、圧縮ファイルに含まれている”サンプルデザインの説明と確認手順.pdf” をご覧ください。