このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
プログラミング可能な FPGA 用 FIR フィルター
この例では、プログラミング可能なハードウェア用 FIR フィルターの実装方法を示します。ホスト インターフェイスを使用して係数を内部レジスタに読み込むことで、このフィルターを目的の応答にプログラムすることができます。
この例では、1 つのチップ上にそれぞれ応答が異なる複数のフィルターで構成される列を実装します。これらのフィルターすべてに直接形式の FIR 構造があり、長さが同じ場合、必要に応じてホスト インターフェイスを使用して、各応答の係数をレジスタ ファイルに読み込むことができます。
この設計により、入力サンプルを読み込まれた係数で処理できるようになる前に、数サイクル分の遅延が追加されます。ただし、これには同じフィルター ハードウェアを新しい係数でプログラムして、別のフィルター応答を取得できるという利点があります。これにより、チップ領域が節約されます。そうでないと、チップ上に各フィルターを別々に実装することになります。
プログラミング可能 FIR フィルターのモデル化
2 つの FIR フィルターについて検討します。一方はローパス応答をもち、他方はハイパス応答をもちます。関数 InitFcn ([モデル プロパティ]、[コールバック]、[InitFcn]) を使用して係数を指定します。
Programmable FIR via Registers ブロックが、Host Behavioral Model からローパス係数を読み込み、入力チャープ サンプルを最初に処理します。次に、ハイパス係数を読み込み、同じチャープ サンプルを再度処理します。
write_enable
信号が高い場合、coeffs_registers ブロックが係数を内部レジスタに読み込みます。write_done
信号が高い場合、シャドウ レジスタが係数レジスタから更新されます。シャドウ レジスタにより、フィルター エンティティによるデータの同時読み込みと処理が可能になります。これらのブロックは、最後のいくつかの入力サンプルを処理するのと同時に、2 組目の係数を読み込みます。
このモデルは、完全に並列なアーキテクチャを Discrete FIR Filter ブロックに使用するように構成されています。また、[HDL Block Properties] メニューから直列アーキテクチャを選択することもできます。
Simulink のシミュレーション結果
テスト対象設計 (DUT) と参照フィルターを比較するには、スコープを開いてモデル例を実行します。
ロジック アナライザーの使用
信号はロジック アナライザーでも表示できます。ロジック アナライザーでは 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 結果を比較します。