Main Content

FPGA 用のプログラム可能な FIR フィルター

この例では、ハードウェア用のプログラム可能な FIR フィルターを実装する方法を示します。ホスト インターフェイスを使用して内部レジスタに係数を読み込むことで、目的の応答に対するフィルターをプログラムできます。

この例では、それぞれが異なる応答をもつ一連のフィルターをチップに実装します。すべてのフィルターが直接型 FIR 構造で長さが同じであれば、各応答の係数を必要なときにホスト インターフェイスを使用してレジスタ ファイルに読み込むことができます。

この設計では、読み込んだ係数で入力サンプルを処理できるようになるまでに数サイクルのレイテンシが発生します。一方で、同じフィルター ハードウェアを新しい係数でプログラムすれば別のフィルター応答を取得できるという利点があります。チップに各フィルターを個別に実装する場合に比べ、チップ面積の節約になります。

プログラム可能な FIR フィルターのモデル化

一方はローパス応答をもち、もう一方はハイパス応答をもつ、2 つの FIR フィルターについて考えてみます。係数は、[モデル プロパティ]、[コールバック]、[InitFcn] 関数を使用して指定されます。

"Programmable FIR via Registers" ブロックは、まずローパス係数を "Host Behavioral Model" から読み込み、入力チャープ サンプルを処理します。次に、ブロックはハイパス係数を読み込み、同じチャープ サンプルを再度処理します。

"coeffs_registers" ブロックは、write_enable 信号が High になると内部レジスタに係数を読み込みます。シャドウ レジスタは、write_done 信号が High になると係数レジスタから更新されます。シャドウ レジスタにより、フィルター エンティティでデータの読み込みと処理を同時に実行できます。ブロックは、最後のいくつかの入力サンプルを処理している間に、同時に 2 番目の係数のセットを読み込みます。

このモデルは、Discrete FIR Filter ブロックに完全なパラレル アーキテクチャを使用するように構成されています。[HDL ブロック プロパティ] のメニューからシリアル アーキテクチャも選択できます。

Simulink のシミュレーション結果

テスト対象設計 (DUT) を参照フィルターと比較するには、スコープを開いてモデル例を実行します。

ロジック アナライザーの使用

ロジック アナライザーで信号を表示することもできます。ロジック アナライザーでは、複数の信号を 1 つのウィンドウで表示できます。信号の遷移も見つけやすくなります。

モデルのツールストリップからロジック アナライザーを起動します。

対象の信号 (入力係数、書き込みアドレス、書き込みイネーブル、書き込み完了、フィルター入力、フィルター出力、参照出力、およびエラー) が観測用にロジック アナライザーに追加されます。

ロジック アナライザーの表示を波形単位またはデバイダー単位で制御することもできます。個々の波形またはデバイダーを変更するには、波形またはデバイダーを選択し、[波形] タブをクリックします。ロジック アナライザーの可視化モードのアナログ形式が便利です。

ロジック アナライザーの詳細については、ロジック アナライザー (DSP System Toolbox)のドキュメンテーションを参照してください。

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

このモデル例の HDL コードを生成するには、HDL Coder™ のライセンスが必要です。HDL コードを生成するには、次のコマンドを使用します。

systemname = [modelname '/Programmable FIR via Registers'];
makehdl(systemname);

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

ModelSim のシミュレーション結果

次の図は、生成された .do ファイル スクリプトをテスト ベンチに対して実行した後の ModelSim® HDL シミュレーターを示しています。ModelSim の結果を前にプロットした Simulink の結果と比較します。