このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

FPGA 用高スループット チャネライザー

この例では、ポリフェーズ フィルター バンクを使用して、ハードウェア用高スループット (毎秒ギガサンプル、GSPS) チャネライザーを実装する方法を説明します。

高速信号処理は、レーダー、ブロードバンド無線、バックホールなどの用途に必要です。

最新の ADC では、最大で毎秒数ギガサンプルというサンプルレートで信号をサンプリングできます。ただし、最速の FPGA のクロック速度はこのサンプルレートに遠く及びません。通常、FPGA は数百 MHz で実行されます。FPGA で GSPS 処理を実行するには、スカラー処理からベクトル処理に移行し、複数のサンプルをはるかに低いクロック レートで同時に処理します。多くの最新の FPGA では、GHz のクロック レートでスカラー入力を受け入れて低クロック レートでサンプル ベクトルを生成する、JESD204B 標準インターフェイスがサポートされています。

この例では、Simulink で GSPS スループット用の信号処理アプリケーションを設計する方法を示します。入力データは JESD204B インターフェイスを介してベクトル化され、FPGA において低クロック レートで使用できます。モデルは、一度に 16 サンプルを処理する FFT とフィルターで構成されるポリフェーズ フィルター バンクです。ポリフェーズ フィルター バンク手法は、漏れやスカロッピング損失による FFT の精度の低下を最小限に抑えるために使用されます。ポリフェーズ フィルター バンクの詳細については、高分解能スペクトル解析を参照してください。

例の最初の部分では、4 タップ フィルターを備えたポリフェーズ フィルター バンクを実装します。

例の 2 番目の部分では、12 タップ フィルター用に構成された Channelizer HDL Optimized ブロックを使用します。Channelizer HDL Optimized ブロックでは、ポリフェーズ フィルター バンク手法を使用しています。

ポリフェーズ フィルター バンク

modelname = 'PolyphaseFilterBankHDLExample_4tap';
open_system(modelname);

InitFcn コールバック ([モデル プロパティ]、[コールバック]、[InitFcn]) でモデルを設定します。このモデルでは、512 の点から成る FFT を使用し、帯域あたりのフィルターのタップ数は 4 です。dsp.HDLChannelizer System object™ を使用して係数を生成します。Channelizer オブジェクトの polyphase メソッドによって 512 行 4 列の行列が生成されます。各行は各帯域の係数を表します。係数は、入力信号と同じ語長で固定小数点にキャストされます。

FFTLength  = 512;
h = dsp.Channelizer;
h.NumTapsPerBand = 4;
h.NumFrequencyBands = FFTLength;
h.StopbandAttenuation = 60;
coef =fi(polyphase(h),1,15,14,'RoundingMethod','Convergent');

このアルゴリズムは 512 のフィルター (帯域ごとに 1 つのフィルター) を必要とします。16 サンプルのベクトル入力の場合は、16 のフィルターを 32 回再利用できます。

InVect      = 16;
ReuseFactor = FFTLength/InVect;

フィルターをより高いクロック レートに合成するには、乗算器と係数バンクをパイプライン化します。これらの値については、「最適化されたハードウェアに関する考慮事項」の節を参照してください。

Multiplication_PipeLine = 2;
CoefBank_PipeLine       = 1;

データ ソース

入力データは、200 KHz と 250 KHz の 2 つの正弦波で構成されています。

シミュレーション結果

スペクトルの結果を可視化するには、スペクトル ビューアーを開いてモデルを実行します。

open_system('PolyphaseFilterBankHDLExample_4tap/FFT Spectrum Viewer/Power Spectrum viewer (FFT)');
open_system('PolyphaseFilterBankHDLExample_4tap/PFB Spectrum Viewer/Power Spectrum viewer (PFB)');
sim(modelname);

ポリフェーズ フィルター バンクの Power Spectrum Viewer から、FFT だけを使用したときと比べてパワー スペクトルが向上し、周波数漏れおよびスカロッピングが最小限に抑えられていることがわかります。2 つのスペクトルを比較し、100 KHz から 300 KHz の間にズーム インすると、従来の FFT よりもポリフェーズ フィルター バンクの方が -40 dB を超えるピークが少ないことがわかります。

最適化されたハードウェアに関する考慮事項

  • データ型: データの語長は、結果の精度とハードウェアで使用されるリソースの両方に影響します。この例では、フィルターを完全精度で設計します。入力データ型が fixdt(1,15,13) の場合、出力は fixdt(1,18,17) です。フィルター係数の絶対値はすべて 1 より小さいため、データは乗算ごとに大きくならず、加算ごとに 1 ビットを追加する必要があります。FFT で精度を維持するには、段階ごとに 1 ビット増やす必要があります。これにより、回転因子の乗算が段階ごとに大きくなります。多くの FPGA では、乗算のサイズを 18x18 より小さく保つことが望まれます。512 の点から成る FFT には 9 つの段階があるため、FFT の入力を 11 ビットより大きくすることはできません。フィルター係数を調べると、最大係数の 2 進表記の最初の 8 桁はゼロであるため、係数を fixdt(1,15,14) ではなく fixdt(1,7,14) にキャストできることがわかります。また、ポリフェーズ フィルター バンク内の Datatype ブロック出力の最大値は、2 進小数点の後に先行する 7 つのゼロをもつため、フィルター出力を代わりに fixdt(1,11,17) にキャストすることがわかります。これにより、FFT 内の乗算器のサイズが 18X18 より小さく保たれ、ハードウェア リソースが節約されます。

  • 高速化のための設計:

  1. State control ブロック: State Control (HDL Coder) ブロックを同期モードで使用して、イネーブル端子をもつ Delay ブロックについてハードウェア親和型コードを生成します。

  2. クロック イネーブルの最小化: モデルは、[クロック イネーブルの最小化] オプションをオンにして ([コンフィギュレーション パラメーター] で [HDL コード生成]、[グローバル設定]、[端子]、[クロック イネーブルの最小化] を選択) HDL コードを生成するように設定します。このオプションは、モデルがシングルレートの場合にサポートされます。クロック イネーブルは、高速設計には推奨されないグローバル信号です。

  3. FPGA での DSP ブロックの使用: FPGA で乗算器を DSP ブロックにマップするには、乗算器をパイプライン化しなければなりません。この例では、Multiplication_PipeLine = 2 を設定して乗算器をパイプライン化します (前後の遅延がそれぞれ 2)。これらのパイプライン レジスタにはリセットを指定しないようにします。各パイプラインでリセット タイプをなしに設定します (Delay ブロックを右クリックし、[HDL コード]、[HDL ブロック プロパティ]、[Reset Type] で [None] を選択します)。

  4. FPGA での ROM の使用: 係数バンク内の Coefficient ブロックは組み合わせブロックです。このブロックを ROM にマップするには、ブロックの後にレジスタを追加します。遅延長は CoefBank_PipeLine で設定します。この遅延のリセット タイプをなしに設定します (Delay ブロックを右クリックし、[HDL コード]、[HDL ブロック プロパティ]、[Reset Type] で [None] を選択します)。

HDL コードとテスト ベンチの生成

このモデル例の HDL コードを生成するには、HDL Coder™ のライセンスが必要です。このコマンドを使用して HDL コードを生成します。systemname = 'PolyphaseFilterBankHDLExample_4tap/PolyPhaseFilterBank'; makehdl(systemname);

このコマンドを使用して HDL シミュレーションの結果と Simulink シミュレーションの動作を比較するテスト ベンチを生成します。makehdltb(systemname);

合成結果

設計は、ISE を使用して Xilinx Virtex 7 (xc7vx550t-ffg1158、スピード グレード 3) 用に合成されました。設計はクロック周波数 499.525 MHz (配置および配線前) を実現しています。1 クロックあたり 16 サンプルでは、これは 8 GSPS のスループットになります。このサブシステムには多数の I/O 端子があるため、FPGA を対象としたスタンドアロン設計としては適していないことに注意してください。

HDL 最適化チャネライザー

周波数応答を改善するには、フィルターのタップ数を増やします。次のモデルでは、Channelizer HDL Optimized ブロックを使用してフィルターのタップ数を 12 に設定しており、スペクトルが向上しています。組み込みの Channelizer HDL Optimized ブロックを使用すると、設計パラメーターを簡単に変更できます。

modelname = 'PolyphaseFilterBankHDLExample_HDLChannelizer';
open_system(modelname);

このモデルでは、ワークスペース変数を使用して FFT およびフィルターを設定します。この場合、モデルは各帯域に 512 の点から成る FFT および 12 タップ フィルターを使用します。チャネライザーの係数の数は、周波数帯域数 512 に周波数帯域あたりのタップ数 12 を掛けた数になります。tf(h) メソッドですべての係数が生成されます。

InVect     = 16;
FFTLength  = 512;
h = dsp.Channelizer;
h.NumTapsPerBand = 12;
h.NumFrequencyBands = FFTLength;
h.StopbandAttenuation = 60;
coef12Tap = tf(h);

データ ソース

入力データは、200 KHz と 206.5 KHz の 2 つの正弦波で構成されています。最初の例よりも周波数が互いに近くなっており、スペクトル分解能におけるチャネライザーと 4 タップ フィルターの違いがわかります。

シミュレーション結果

スペクトルの結果を可視化するには、スペクトル ビューアーを開いてモデルを実行します。

open_system('PolyphaseFilterBankHDLExample_HDLChannelizer/PFB_4tap Spectrum Viewer/Power Spectrum viewer (PFB_4tap)');
open_system('PolyphaseFilterBankHDLExample_HDLChannelizer/Channelizer Spectrum Viewer/Power Spectrum viewer (Channelizer_12tap)');
sim(modelname);

Channelizer_12tap モデルの Power Spectrum Viewer から、12 タップ フィルターのポリフェーズ フィルター バンクのパワー スペクトルが前のモデルの 4 タップ フィルターに比べて向上していることがわかります。チャネライザーと 4 タップのポリフェーズ フィルター バンクのスペクトル結果を比較します。100 KHz から 300 KHz の間にズーム インすると、チャネライザーで検出されるピークが 2 つだけであるのに対し、4 タップ フィルターのポリフェーズ フィルター バンクで検出されるピークが 2 よりも多いことがわかります。入力信号が 2 つの周波数成分のみで構成されているため、予想される結果は 2 つのピークです。