Main Content

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

プログラミング可能な FPGA 用 FIR フィルター

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

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

この設計により、入力サンプルを読み込まれた係数で処理できるようになる前に、数サイクル分の遅延が追加されます。ただし、これには同じフィルター ハードウェアを新しい係数でプログラムして、別のフィルター応答を取得できるという利点があります。これにより、チップ領域が節約されます。そうでないと、チップ上に各フィルターを別々に実装することになります。

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

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

modelname = 'dspprogfirhdl';
open_system(modelname);

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

open_system([modelname '/Programmable FIR via Registers']);

write_enable 信号が高い場合、coeffs_registers ブロックが係数を内部レジスタに読み込みます。write_done 信号が高い場合、シャドウ レジスタが係数レジスタから更新されます。シャドウ レジスタにより、フィルター エンティティによるデータの同時読み込みと処理が可能になります。これらのブロックは、最後のいくつかの入力サンプルを処理するのと同時に、2 組目の係数を読み込みます。

このモデルは、完全に並列なアーキテクチャを Discrete FIR Filter ブロックに使用するように構成されています。また、[HDL Block Properties] メニューから直列アーキテクチャを選択することもできます。

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

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

open_system([modelname '/Scope']);
sim(modelname);

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

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

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

対象の信号 input coefficients、write address、write enable、write done、filter in、filter out、reference out および error が、観測のためにロジック アナライザーに追加されています。

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

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

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

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

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

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

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