DSP System Toolbox

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

多重チャネル FIR フィルターの HDL コードの生成

この例では、複数の入力データ ストリームをもつ離散 FIR フィルターの HDL コードを生成する方法を示します。

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

必要条件

この例を実行するには、HDL Coder™ ライセンスが必要です。

多重チャネル 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 ブロック プロパティ] メニューにもこれらの設定を指定できます。

シミュレーション結果

以下のコマンドを入力して、モデル例を実行します。

sim(modelname);

以下のコマンドを入力して、スコープを開きます。

open_system([modelname '/Scope']);

2 つの出力データ ストリームを比較します。

以下のコマンドを入力して、スコープを閉じます。

close_system([modelname '/Scope']);

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

生成されたファイル用に一意の一時ディレクトリ名を取得します。

workingdir = tempname;

以下のコマンドを入力して、"Multichannel FIR Filter" ブロックのパラメーター設定を検証します。

checkhdl(systemname,'TargetDirectory',workingdir);

以下のコマンドを入力して、HDL コードを生成します。

makehdl(systemname,'TargetDirectory',workingdir);
### Generating HDL for 'dspmultichannelhdl/Multichannel FIR Filter'.
### Starting HDL check.
### 'The code generation and optimization options you have chosen have introduced additional pipeline delays.
The delay balancing feature has automatically inserted matching delays for compensation.'
### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
### Output port 0: 2 cycles.
### Begin VHDL Code Generation for 'dspmultichannelhdl'.
### MESSAGE: The design requires 2 times faster clock with respect to the base rate = 0.0005.
### Working on Multichannel FIR Filter_tc as C:\TEMP\R2013bd_689_5180\tp94d6d347_aea8_4d69_bfc7_6f67a1bb8aab\dspmultichannelhdl\Multichannel_FIR_Filter_tc.vhd
### Working on dspmultichannelhdl/Multichannel FIR Filter as C:\TEMP\R2013bd_689_5180\tp94d6d347_aea8_4d69_bfc7_6f67a1bb8aab\dspmultichannelhdl\Multichannel_FIR_Filter.vhd
### Working on dspmultichannelhdl/Multichannel FIR Filter/Discrete FIR Filter as C:\TEMP\R2013bd_689_5180\tp94d6d347_aea8_4d69_bfc7_6f67a1bb8aab\dspmultichannelhdl\Discrete_FIR_Filter.vhd.
### Starting VHDL code generation process for filter: Discrete_FIR_Filter
### Generating: <a href="matlab:edit('C:\TEMP\R2013bd_689_5180\tp94d6d347_aea8_4d69_bfc7_6f67a1bb8aab\dspmultichannelhdl\Discrete_FIR_Filter.vhd')">C:\TEMP\R2013bd_689_5180\tp94d6d347_aea8_4d69_bfc7_6f67a1bb8aab\dspmultichannelhdl\Discrete_FIR_Filter.vhd</a>
### Starting generation of Discrete_FIR_Filter VHDL entity
### Starting generation of Discrete_FIR_Filter VHDL architecture
### HDL latency is 0 samples
### Successful completion of VHDL code generation process for filter: Discrete_FIR_Filter

### Generating package file C:\TEMP\R2013bd_689_5180\tp94d6d347_aea8_4d69_bfc7_6f67a1bb8aab\dspmultichannelhdl\Multichannel_FIR_Filter_pkg.vhd
### Generated HTML report file:///C:\TEMP\R2013bd_689_5180\tp94d6d347_aea8_4d69_bfc7_6f67a1bb8aab\dspmultichannelhdl\Multichannel_FIR_Filter_report.html
### HDL check for 'dspmultichannelhdl' complete with 0 errors, 0 warnings, and 0 messages.
### HDL code generation complete.

以下のコマンドを入力して、テスト ベンチを生成します。

makehdltb(systemname,'TargetDirectory',workingdir);
### Begin TestBench generation.
### Generating HDL TestBench for 'dspmultichannelhdl/Multichannel FIR Filter'.
### Begin simulation of the model 'gm_dspmultichannelhdl'...
### Collecting data...
### Generating test bench: C:\TEMP\R2013bd_689_5180\tp94d6d347_aea8_4d69_bfc7_6f67a1bb8aab\dspmultichannelhdl\Multichannel_FIR_Filter_tb.vhd
### Creating stimulus vectors...
### HDL TestBench generation complete.
 

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

以下のコマンドを入力して、チャネル間で共有しているリソースのレポートを表示できます。

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

チャネル間で共有していないリソースのレポートを表示するには、以下のコマンドを入力します。

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

2 つのレポートを比較することで異なるリソースの利用状況を確認できます。

これで、「多重チャネル FIR フィルターの HDL コードの生成」の例は終了です。