Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

クロックレート パイプライン

パイプライン レジスタの挿入を伴う速度および面積の最適化を有効にするときは、クロックレート パイプライン最適化を使用して、設計に含まれるマルチサイクル パスを特定してください。クロックレート パイプラインは、パイプライン レジスタをより高速なクロック レートで挿入するため、追加のレイテンシを導入したり、最小レイテンシを追加したりすることなく、クロック周波数を上げることができます。

クロックレート パイプラインの根拠

コード ジェネレーターは、特定のブロック実装を指定した場合、もしくは、以下のような最適化をモデルで有効にしたときに、パイプラインを導入します。

  • マルチサイクル ブロックの実装

  • 入力および出力パイプライン

  • 分散型パイプライン方式

  • 浮動小数点ライブラリのマッピング

  • ネイティブ浮動小数点 HDL コード生成

  • リソース共有

  • ストリーミング

既定では、遅いパスでは、これらのパイプライン レジスタは低速なデータ速度で動作します。クロックレート パイプラインを有効にすると、パイプライン レジスタはより高速なクロック レートで動作します。クロックレート パイプラインは、ご使用のモデルに含まれる既存の設計遅延には影響を与えません。合成ツールのマルチサイクル パスの使用による制約への代替方法です。

クロックレート パイプラインの仕組み

クロックレート パイプライン最適化は、ブロックのサンプル時間を解析することでモデル内の遅いパスまたは領域を特定します。サンプル時間が DUT の基本サンプル時間を超えるブロックは、遅いパスに含まれ、クロックレート パイプラインの候補となります。これらの遅いパスでは、コード ジェネレーターは最適化を有効にして、クロック レートでパイプライン遅延を発生させます。

オーバーサンプリング係数を 1 より大きい値に指定した場合、DUT サンプル時間は実際のクロック レートよりも遅くなります。挿入可能なクロックレート パイプラインの最大数は、ブロックと DUT のサンプル時間の比と、オーバーサンプリング係数に基づいて、コード ジェネレーターによって決定されます。

クロックレートの遅延の最大数 = (block_rate ÷ DUT_base_rate) × Oversampling

クロックレート パイプラインは、モデルの中で低速な同一のデータ速度を持つ領域を特定し、Delay ブロックまたはレート変換が発生するブロックのいずれかによって区切られます。コード ジェネレーターは、これらの領域の入力に Repeat ブロックを、出力に Rate Transition ブロックを導入することで、その領域をより高速なクロック レートに変換します。あるクロック レート領域の出力が、そのデータ レートの Delay ブロックの場合、HDL Coder™ はその Delay ブロックを吸収します。遅延に対応するため、コード ジェネレーターは、データ レートとクロック レートの比に対応するいくつかのクロックレート パイプラインを導入します。

HDL Coder は、クロックレート パイプラインの障害となるブロックがモデル内で強調表示されるスクリプトと、その強調表示をオフにするスクリプトを生成します。場合によっては、コード ジェネレーターがリソース共有またはストリーミングをクロック レートで実装できないときに、Oversampling 値の変更に関する推奨事項を含むコード ジェネレーター生成エラーが表示されます。強調表示を解除するには、MATLAB® コマンド ウィンドウで、clearhighlighting スクリプトをクリックします。

クロックレート パイプラインと階層のフラット化

クロックレート パイプラインは、サブシステム階層がフラットにされているかどうかを問わず使用できます。設計におけるリソース共有の機会を最大限に高める場合は、サブシステム階層をフラットにします。サブシステム階層をフラットにするには、最上位のサブシステムで [FlattenHierarchy] を有効にします。既定では、最上位のサブシステム内のすべての Subsystem ブロックは、この [FlattenHierarchy] 設定を継承しています。階層をフラットにすることで、複数のクロック レート領域が階層内の同じレベルとして結合されるため、クロックレート パイプラインを適用できる機会が増えます。しかし、設計のモジュール性が損なわれ、生成された HDL コードの可読性に影響を与えます。階層のフラット化も参照してください。

階層をフラット化せずにクロックレート パイプラインを適用するには、モデルの最上位のサブシステムで [FlattenHierarchy] を無効にします。設計に固定小数点データ型が使用されている場合、配下のサブシステムでいくつかの最適化を有効にしてください。その場合、コード ジェネレーターは、サブシステムの階層を保ちながら、設計にクロックレート パイプラインを導入します。これには、次のような特徴があります。

  • 設計のモジュール性が向上し、特に、複雑な階層を持つ大規模な設計において、生成されたモデルが見やすくなる。

  • 設計に含まれるさまざまな Subsystem ブロックに複数の Verilog または VHDL ファイルを作成するため、生成された HDL コードの可読性が高まる。

DUT 出力端子のクロックレート パイプライン

DUT 出力端子のパイプライン レジスタをデータ速度ではなくクロック レートで挿入するには、[DUT 出力端子のクロック レート パイプラインを許可] オプションを選択するか、ClockRatePipelineOutputPorts プロパティを使用します。このオプションによって、DUT インターフェイスのタイミングが変わります。その理由は、DUT 出力端子のサンプル時間が遅いレートからクロック レートに変わるためです。タイミングの差を調整するため、HDL Coder は各出力端子の位相オフセットを示すメッセージを生成します。たとえば、次のメッセージは portname からの出力データが 31 クロック サイクル後に有効になることを意味します。出力端子 portname の位相: 31 クロック サイクル。

検証モデルは、DUT 出力に Rate Transition ブロックを挿入して、Rate Transition の出力と元の出力を比較することで、タイミングの差を調整します。RTL テスト ベンチは Rate Transition の入力時の出力データをログに記録して、それと RTL シミュレーションの DUT 出力を比較します。

クロックレート パイプラインのベストプラクティス

  • 設計に Rate Transition ブロックが使用されている場合、Rate Transition ブロックを非ゼロの [Sample offset] をもつ Downsample ブロックに差し替えてください。クロックレート パイプラインは、Rate Transition ブロックによって追加的に発生するレイテンシを回避し、面積とタイミングを節約することで、Downsample ブロックを最適化します。

  • DUT をあるレートで設計して [オーバーサンプリング係数] を指定します。Rate TransitionUpsampleDownsample またはその他のレート変更ブロックを使用しないようにします。

クロックレート パイプラインの指定

クロックレート パイプラインは、モデルに対して設定することも、最上位 DUT サブシステム内のサブシステムに設定して細かく制御することもできます。既定では、クロックレート パイプラインがモデルで有効になっています。クロックレート パイプラインを UI から無効化するには、次を行います。

  1. [アプリ] タブで、[HDL Coder] を選択します。[HDL コード] タブが表示されます。

  2. [設定] をクリックします。[HDL コード生成][最適化][パイプライン] タブで、[クロックレート パイプライン] をオフにして [OK] をクリックします。

コマンド ラインで関数 makehdl または hdlset_param を使用して、ClockRatePipelining プロパティを off に設定します。

最上位 DUT サブシステム内のサブシステムのクロックレート パイプラインを使用できます。設計内のコントロール パスをクロック レートではなくデータ レートでモデル化するには、コントロール パスをサブシステムに配置して、そのサブシステムのクロックレート パイプラインを無効にします。最上位 DUT サブシステム内のサブシステムでクロックレート パイプラインを無効にするには、そのサブシステムの [ClockRatePipelining][off] に設定します。サブシステムのクロックレート パイプラインの設定も参照してください。

クロックレート パイプラインの制限

次のブロックはクロックレート パイプラインを抑制するので、クロックレート パイプライン領域が区切られます。

  • Counter Free-Running

  • Counter Limited

  • Deserializer1D

  • Discrete PID Controller

  • Dual Port RAM

  • Dual Rate Dual Port RAM

  • FFT HDL Optimized

  • HDL Cosimulation

  • HDL FIFO

  • HDL Counter

  • Hit Crossing

  • HDL Minimum Resource FFT

  • HDL Streaming FFT

  • 永続変数を使用する場合の MATLAB System

  • Rate Transition

  • Serializer1D

  • Simple Dual Port RAM

  • Single Port RAM

  • Subsystem (FlattenHierarchy を有効にしていない場合)

コード ジェネレーターでは、次のものに対するクロックレート パイプラインはサポートされていません。

  • ブラック ボックス サブシステム、あるいはブラック ボックス モデル参照ブロック。

  • クロックレート パイプラインをサポートしていないブロックを含むサブシステム。

  • Altera DSP Builder subsystems

  • Xilinx System Generator subsystems

  • Communications Toolbox™ ブロック。

  • Delay および Discrete FIR Filter 以外の DSP System Toolbox™ ブロック。

  • Stateflow® ブロック。

クロックレート パイプラインの最適化を使用する場合、コード ジェネレーターは、同じリソースでストリーミングと共有両方の最適化を適用できません。クロックレート パイプラインが有効な場合は、クロックレート パイプラインを無効にするか、同じリソースでストリーミングの最適化または共有の最適化を使用します。

参考

Simulink コンフィギュレーション パラメーター

関連する例

詳細