Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

FPGA 用マルチチャネル FIR フィルター

この例では、ハードウェア用の複数の入力データ ストリームをもつ離散 FIR フィルターを実装する方法を示します。

多くの DSP アプリケーションでは、複数のデータ ストリームが同じフィルターによってフィルター処理されます。簡単なソリューションは、各チャネルに対して別々のフィルターを実装することです。複数のチャネルで 1 つのフィルターの実装を共有することで、より面積効率の高い構造を作成できます。結果として得られるハードウェアでは、単一チャネル フィルターに使用されるクロック レートと比較して、より高速なクロック レートが必要になります。

マルチチャネル FIR フィルターのモデル化

modelname = 'dspmultichannelhdl';
open_system(modelname);

モデルには、2 チャネルの FIR フィルターが含まれています。入力データ ベクトルには、異なる周波数をもつ正弦波信号の 2 つのストリームが含まれています。入力データ ストリームはローパス フィルターで処理されます。このフィルターの係数は [モデル プロパティ] のコールバック関数 InitFcn で指定されています。

完全なパラレル アーキテクチャを Discrete FIR Filter ブロックに選択し、複数チャネルでのリソース共有を有効にします。

systemname = [modelname '/Multichannel FIR Filter'];
blockname = [systemname '/Discrete FIR Filter'];
set_param(blockname,'FilterStructure','Direct form symmetric');
hdlset_param(blockname,'Architecture','Fully Parallel');
hdlset_param(blockname,'ChannelSharing','On');

あるいは、これらの設定を [HDL ブロック プロパティ] メニューで指定できます。これには、ブロックを右クリックして [HDL コード][HDL ブロック プロパティ] を選択してアクセスします。

シミュレーション結果

モデル例を実行し、スコープを開いて 2 つのデータ ストリームを比較します。

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

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

このモデル例の HDL コードを生成するには、HDL Coder™ のライセンスが必要です。次のコマンドを使用して、Multichannel FIR Filter サブシステムの HDL コードを生成します。リソース利用レポートを有効にします。

makehdl(systemname,'resource','on');

次のコマンドを使用して、HDL シミュレーションの結果と Simulink モデルの結果を比較するテスト ベンチを生成します。

makehdltb(systemname);

リソースの利用状況の比較

共有ありの場合と共有なしの場合のリソース使用を比較するには、チャネル間でのリソースの共有を無効にし、HDL コードを再度生成してから、リソース利用レポートを比較します。

hdlset_param(blockname,'ChannelSharing','Off');
makehdl(systemname,'resource','on');