Main Content

MATLAB Function ブロックの分散型パイプライン挿入

この例では、分散型パイプライン方式の最適化を使用して MATLAB Function ブロックの生成される HDL コードを最適化する方法を示します。分散型パイプライン方式は、MATLAB Function ブロック、Simulink® モデル、Stateflow® チャートから生成される HDL コードを向上させる HDL Coder™ の最適化方式です。分散型パイプライン方式を使用することで、FPGA デバイスのクロック レートが高い設計を実現できます。

乗算器チェーン モデル

この例では、5 つの乗算のチェーンを実装する単純なモデルでパイプライン レジスタを分散する方法を示します。

open_system('hdlcoder_distpipe_multiplier_chain')
set_param('hdlcoder_distpipe_multiplier_chain','SimulationCommand','Update')

HDL_DUT サブシステムが HDL コードを生成する DUT です。このサブシステムで MATLAB Function ブロック mult_chain を駆動します。

open_system('hdlcoder_distpipe_multiplier_chain/HDL_DUT')

乗算のチェーンを確認するには、MATLAB Function ブロックを開きます。

open_system('hdlcoder_distpipe_multiplier_chain/HDL_DUT/mult_chain')

分散型パイプライン方式の最適化の適用

1. MATLAB Function ブロックのパイプライン ステージを 2 つ生成するように指定します。

ml_subsys = 'hdlcoder_distpipe_multiplier_chain/HDL_DUT/mult_chain';
hdlset_param(ml_subsys, 'OutputPipeline', 2)

2.MATLAB Datapath アーキテクチャを指定します。このアーキテクチャでは、MATLAB Function ブロックが通常のサブシステムと同様に扱われます。それを使用して、MATLAB Function ブロックを越えた Simulink® モデル内の他のブロックとの間でさまざまな最適化を適用できます。

hdlset_param(ml_subsys, 'architecture', 'MATLAB Datapath');

3.ブロックで分散型パイプライン方式の最適化を有効にします。最適化の結果を確認するには、最適化レポートの生成を有効にします。モデル内のすべての階層に最適化を適用するには、モデルで階層分散型パイプライン方式を有効にし、すべてのサブシステムで分散型パイプライン方式を有効にします。

hdlset_param('hdlcoder_distpipe_multiplier_chain', ...
                'HierarchicalDistPipe', 'on', 'OptimizationReport', 'on')
hdlset_param('hdlcoder_distpipe_multiplier_chain/HDL_DUT', 'DistributedPipelining', 'on');
hdlset_param(ml_subsys, 'DistributedPipelining', 'on');

また、MATLAB Datapath アーキテクチャの MATLAB Function ブロックに対して分散型パイプライン方式で合成タイミング推定を使用するオプションもあります。合成タイミング推定を使用すると、分散型パイプライン方式で、設計に含まれるコンポーネントの伝播遅延が計算されます。このオプションを使用すると、ハードウェアに対するコンポーネントの機能をより正確に反映することで、設計における分散型パイプラインの精度を高めて特定のターゲット デバイスのクロック周波数を最大化できます。詳細については、Distributed Pipelining Using Synthesis Timing Estimatesを参照してください。

分散型パイプライン方式で合成タイミング推定を有効にするには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成]、[最適化]、[パイプライン] タブにあるモデル パラメーター [分散型パイプラインに合成推定値を使用] を使用するか、hdlset_param を使用してこのパラメーターを設定します。

hdlset_param('hdlcoder_distpipe_multiplier_chain', 'UseSynthesisEstimatesForDistributedPipelining', 'on')

4.HDL_DUT サブシステムの HDL コードを生成します。

makehdl('hdlcoder_distpipe_multiplier_chain/HDL_DUT/mult_chain')

既定では、HDL Coder で hdlsrc フォルダーに VHDL コードが生成されます。

最適化の結果の解析

分散型パイプライン方式のレポートで、コード ジェネレーターによってパイプライン レジスタが移動されたことを確認できます。最適化の効果を確認するには、生成されたモデル gm_hdlcoder_distpipe_multiplier_chain を開き、HDL_DUT サブシステムに移動します。

MATLAB Datapath アーキテクチャでは、MATLAB Function ブロックの代わりにサブシステムが作成されます。そのサブシステム内で追加したパイプライン レジスタと単位遅延を最適化で分散することで、乗算器チェーンを最適化してタイミングを改善できます。mult_chain サブシステムを開きます。

参考

関連するトピック