このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
分散型パイプライン方式
分散型パイプライン方式とは
分散型パイプライン方式、つまりレジスタのリタイミングとは、設計の既存の遅延を移動して、機能的動作を維持しながらクリティカル パスを低減する速度の最適化です。この最適化によって、階層を維持しながらサブシステム内で遅延を移動します。
HDL Coder™ ソフトウェアでは、Leiserson-Saxe リタイミング アルゴリズムを変更したものを使用しています。
たとえば、このモデルでは、出力に 2 の遅延があります。
次のブロック線図は、分散型パイプライン方式によって遅延が再分散されてクリティカル パスが削減された後に生成されたモデルを示しています。
分散型パイプライン方式の利点とコスト
分散型パイプライン方式では設計のクリティカル パスを減らし、クロック速度とスループットを向上させることができます。
しかし、分散型パイプライン方式では設計にいくつかの遅延が必要となります。分散型パイプライン方式を利用するために設計に遅延を追加しなければならない場合は、設計の占める面積と初期のレイテンシが増加します。
分散型パイプライン方式の仕組み
HDL Coder は分散型パイプライン方式を他の最適化オプションとともに適用して、設計内の既存の遅延を移動してクリティカル パスを削減します。設計内の既存の遅延は設計上の遅延またはパイプライン遅延のいずれかです。設計上の遅延は、Delay ブロックや状態をもつ他のブロック (Queue、HDL FIFO、Buffer ブロックなど) を使用して手動で設計に挿入する遅延です。パイプライン遅延は、最適化設定 (入出力パイプライン オプションなど) またはブロック実装設定 (Divide ブロックの ShiftAdd
実装や Trigonometric Function ブロックの CORDIC
近似など) によって生成される遅延です。InputPipelineおよびOutputPipelineを参照してください。
コードを生成すると、分散型パイプライン方式の実行前に、指定した入力パイプラインと出力パイプラインが設計内の入力端子と出力端子に挿入されます。HDL Coder は、これらのパイプラインを使用して、レイテンシ要件と設計に最適なパイプラインの概要を特定します。
HDL Coder による分散型パイプライン方式では、まず、設計内の各コンポーネントに等しい重みを割り当ててコンポーネントの伝播遅延を計算します。ただし、Selector ブロックや Bit Concat ブロックなどのワイヤ コンポーネントにはゼロの伝播遅延が割り当てられます。分散型パイプライン方式では、次に、設計内の各コンポーネントに割り当てられた重みに基づいて設計上の遅延とパイプライン遅延が再分散されます。分散型パイプライン方式ではすべてのパイプライン ステージが考慮され、最短のクリティカル パスを得るためにできるだけ均等に分散されます。挿入されたパイプラインは、当初要求した場所に表示されない場合があります。分散型パイプライン方式を使用すると、クリティカル パスを改善するためにこれらのパイプラインが移動する可能性があるためです。
ブロックの後の特定のポイントにパイプラインが必要な場合は、指定したポイントにあるブロックの HDL ブロック プロパティ [ConstrainedOutputPipeline] を、そのブロックの後の出力パイプラインとして保持するパイプラインの数に設定できます。制約付き出力パイプラインでは追加のパイプラインは挿入されませんが、代わりに、設計内のその特定のポイントに移動したか残ったパイプラインを最優先するための情報が分散型パイプライン方式に提供されます。このオプションは、分散型パイプライン方式によって指定したパイプラインが移動するのを防ぐ場合、または分散型パイプライン方式によってパイプラインをその指定したポイントに移動する必要がある場合にのみ使用します。詳細については、制約付き出力パイプラインを参照してください。
メモ
分散型パイプライン方式がサブシステムで実行されないようにする場合、設計内のブロックで制約付き出力パイプラインを設定しているときは、サブシステムに対して分散型パイプライン方式を無効にして、ブロックの [ConstrainedOutputPipeline] プロパティをゼロにリセットします。
設計内にある設計上の遅延が分散型パイプライン方式によって移動されないようにするには、[設計上の遅延分散を許可] を無効にします。Allow design delay distributionを参照してください。
分散型パイプライン方式の要件
分散型パイプライン方式では、再分散可能な遅延やレジスタが設計に含まれていなければなりません。入力パイプラインや出力パイプラインを使用して、追加のレジスタを挿入できます。このような遅延は手動で挿入するか、分散型パイプライン方式を設定する予定のサブシステムまたはブロックの HDL ブロック プロパティ [InputPipeline] または [OutputPipeline] を設定して挿入できます。詳細については、InputPipelineおよびOutputPipelineを参照してください。
まず設計がタイミングの要件を満たさない場合は、結果を向上させるために遅延やレジスタを追加してみてください。
分散型パイプライン方式の指定
分散型パイプライン方式は、モデルまたは最上位 DUT サブシステムで設定できます。細かく制御するために、最上位 DUT サブシステム内のサブシステム、Stateflow® チャート、および MATLAB Function ブロックで分散型パイプライン方式を設定できます。Use Distributed Pipelining Optimization in Models with MATLAB Function Blocksを参照してください。
UI からモデルで分散型パイプライン方式を有効にするには、次のようにします。
[アプリ] タブで、[HDL Coder] を選択します。[HDL コード] タブが表示されます。
[設定] をクリックします。[HDL コード生成] 、 [最適化] ペインの [パイプライン] タブで [分散型パイプライン] を選択して [OK] をクリックします。
コマンド ラインからモデルで分散型パイプライン方式を有効にするには、次のように入力します。
hdlset_param('modelname', 'DistributedPipelining', 'on')
下位レベルのサブシステムなどのサブシステム階層構造を含む最上位のテスト対象デバイス (DUT) があり、DUT および下位レベルのサブシステム全体で分散型パイプライン方式を実行する場合は、モデル コンフィギュレーション パラメーター [分散パイプライン] を有効にし、DUT および下位レベルのすべてのサブシステムに対して HDL ブロックのプロパティ [DistributedPipelining] を [継承]
のままにします。
DUT 内の特定の下位レベルのサブシステムで分散型パイプライン方式が実行されないようにするには、そのサブシステムの HDL ブロック プロパティ [DistributedPipelining] を [オフ]
に設定します。
メモ
パイプライン レジスタを挿入した場合、最初は出力データが無効状態になることがあります。初期の無効なサンプルによってテスト ベンチでエラーが発生しないように、これらのサンプルに対して出力チェックを無効にします。詳細については、出力データのチェックを無視 (サンプル数)を参照してください。
分散型パイプライン方式のレポート
分散型パイプライン情報をレポートで見るには、各サブシステムまたはモデル参照のコードを生成する前に、最適化レポートを有効にします。[HDL コード] タブで、[レポート オプション] を選択して、[最適化レポートを生成] を選択します。
最適化レポートを生成すると、[分散型パイプライン] セクションにおいて、生成されたモデルおよび [分散型パイプライン方式の概要] で分散型パイプライン方式が有効になっているサブシステムにおける分散型パイプライン方式最適化の効果が分かります。分散型パイプライン方式に失敗した場合、診断メッセージと、分散型パイプライン方式が失敗する原因となったブロックがレポートに示されます。
分散型パイプライン方式で障壁が生じると、HDL Coder は highlightDistributedPipeliningBarriers.m
という名前の強調表示スクリプトを生成します。このスクリプトは、モデル内に存在するすべての障壁を強調表示します。
設計内のブロックの HDL ブロック プロパティ [ConstrainedOutputPipeline] を設定した場合は、[制約付き出力パイプラインの概要] に、要求された制約付き出力パイプラインが表示されます (コード生成時にそれらの要求が満たされている場合)。
分散型パイプライン方式に成功した場合、[分散型パイプライン] セクションの [詳細レポート] に、分散型パイプライン方式の変換を適用する前後のレジスタを比較する表が示されます。
分散型パイプライン方式の制限
分散型パイプライン方式の最適化には以下の制限があります。
ターゲット ハードウェアにおける演算子のレイテンシが分散型パイプライン方式のアルゴリズムで使用されている推定の演算子のレイテンシとは異なる場合があるため、パイプラインの結果がハードウェアで最適ではないことがあります。
次の場合、HDL Coder がパイプライン レジスタを出力位置に生成します。クリティカル パスを低減するためにレジスタが分散されることはありません。
状態、ローカル変数、または静的に解決不能なインデックスをもつ行列が含まれている Stateflow チャート。
HDL Coder は、次のブロックの内部ではなく周囲に、パイプライン レジスタを分散します。
Model
Sum (
[カスケード]
実装)Divide
Reciprocal
Sqrt
Sine HDL Optimized and Cosine HDL Optimized
Product (
[カスケード]
実装)MinMax
Upsample
Downsample
Rate Transition
Zero-Order Hold
Reciprocal Sqrt (
[RecipSqrtNewton]
実装)Trigonometric Function (
[CORDIC]
近似)Single Port RAM
Dual Port RAM
Simple Dual Port RAM
浮動小数点 IP (ネイティブ浮動小数点) をもつブロック
これらのブロックを含むサブシステムに対して分散型パイプライン方式を有効にすると、HDL Coder はコード生成時に HDL コード生成チェック レポートに警告メッセージを生成します。このメッセージによって、サブシステムで分散型パイプライン方式にとって障壁となるブロックを把握できます。HDL Coder は入れ子にされたサブシステムの周囲にパイプライン レジスタを分散します。
M-PSK Demodulator Baseband
M-PSK Modulator Baseband
QPSK Demodulator Baseband
QPSK Modulator Baseband
BPSK Demodulator Baseband
BPSK Modulator Baseband
PN Sequence Generator
Repeat
HDL Counter
LMS Filter
Sine Wave
Viterbi Decoder
Triggered Subsystem
Counter Limited
Counter Free-Running
参考文献
Leiserson, C.E, and James B. Saxe."Retiming Synchronous Circuitry."Algorithmica.Vol. 6, Number 1, 1991, pp. 5-35.
参考
プロパティ
モデル設定
関連する例
- 分散型パイプライン方式: 速度の最適化
- Use Distributed Pipelining Optimization in Models with MATLAB Function Blocks
- Iteratively Maximize Clock Frequency by Using Speed Optimizations