このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
クロックレート パイプライン
クロックレート パイプラインは、他の速度と面積の最適化でクロック レートでのレイテンシを導入できるようにする HDL Coder™ の最適化フレームワークです。クロック レートよりも遅いレートでモデル化する場合、クロックレート パイプラインにより、該当する遅い領域が自動的にアップサンプリングされ、他の最適化で生じたレイテンシがデータ レート遅延によって最小化または相殺されます。クロックレート パイプラインでは、他の速度と面積の最適化リクエストがなければ、設計の最適化は試行されません。クロックレート パイプラインは、Simulink® モデルまたは MATLAB® 関数で使用できます。
クロックレート パイプラインの根拠
HDL Coder は、特定のブロック実装を指定した場合、もしくは、以下のような最適化を Simulink モデルまたは MATLAB 関数で有効にしたときに、パイプラインを導入します。
マルチサイクル ブロックの実装
入力および出力パイプライン
分散型パイプライン方式 (HDL ブロック プロパティ [ConstrainedOutputPipeline] の設定を含む)
適応パイプライン
浮動小数点ライブラリのマッピング
ネイティブ浮動小数点 HDL コード生成
リソース共有
ストリーミング
RAM へのルックアップ テーブル (LUT) のマッピング
コード生成時にレイテンシを自動的に追加するブロック (たとえば、HDL アーキテクチャが
[ShiftAdd]
Sqrt に設定されている Product、Divide、および Math Function ブロック)
既定では、遅いパスでは、これらのパイプライン レジスタは低速なデータ速度で動作します。クロックレート パイプラインを有効にすると、パイプライン レジスタはより高速なクロック レートで動作します。クロックレート パイプラインは、ご使用のモデルに含まれる既存の設計遅延には影響を与えません。合成ツールのマルチサイクル パスの使用による制約への代替方法です。
Simulink モデルにおけるクロックレート パイプラインの仕組み
クロックレート パイプライン最適化は、ブロックのサンプル時間を解析することでモデル内の遅いパスまたは領域を特定します。サンプル時間がテスト対象デバイス (DUT) の基本サンプル時間を超えるブロックは、遅いパスに含まれ、クロックレート パイプラインの候補となります。これらの遅いパスでは、HDL Coder は最適化を有効にして、クロック レートでパイプライン遅延を発生させます。
[オーバーサンプリング係数] コンフィギュレーション パラメーターを 1
より大きい値に設定した場合、または [Simulink のレートを実際のハードウェアのレートとして扱う] コンフィギュレーション パラメーターを有効にした場合は、DUT サンプル時間は実際のクロック レートよりも遅くなります。挿入可能なクロックレート パイプラインの最大数は、ブロックと DUT のサンプル時間の比と、オーバーサンプリング値に基づいて、HDL Coder によって決定されます。
クロックレートの遅延の最大数 = (block_rate ÷ DUT_base_rate) × Oversampling
実際のハードウェアのレートを使用してモデル化する場合は、[Simulink のレートを実際のハードウェアのレートとして扱う] パラメーターを有効にして、モデルのオーバーサンプリング値を自動的に設定します。Simulink の相対的なレートを使用してモデル化する場合は、[オーバーサンプリング係数] パラメーターを 1
より大きい値に設定して、モデルのオーバーサンプリング値を設定します。[Simulink のレートを実際のハードウェアのレートとして扱う] パラメーターを有効にした場合、Simulink レートまたはターゲット周波数が変化したときに、[オーバーサンプリング係数] を手動で更新しなくても、HDL Coder がモデルのオーバーサンプリング値を自動的に調整できます。
クロックレート パイプラインは、モデルの中で低速な同一のデータ速度をもつ領域を特定し、Delay ブロックまたはレート変換が発生するブロックのいずれかによって区切られます。HDL Coder は、これらの領域の入力に Repeat ブロックを、出力に Rate Transition ブロックを導入することで、その領域をより高速なクロック レートに変換します。あるクロック レート領域の出力が、そのデータ レートの Delay ブロックの場合、HDL Coder はその Delay ブロックを吸収します。遅延に対応するため、HDL Coder は、データ レートとクロック レートの比に対応するいくつかのクロックレート パイプラインを導入します。
MATLAB 関数におけるクロックレート パイプラインの仕組み
MATLAB から HDL コードを生成する際の DUT である MATLAB 関数は、シングル データ レートで実行されます。このデータ レートより速いクロック レートが必要な場合、クロックレート パイプラインを使用できます。オーバーサンプリング係数に 1 より大きい値を指定することで、DUT のデータ レートよりどれくらい速いクロック レートにするかを指定します。HDL Coder が挿入できるクロックレート遅延の最大数は、オーバーサンプリング係数に等しくなります。
永続変数やネイティブ浮動小数点の使用など、フィードバック ループにレイテンシを発生させるその他のコード生成オプションがある場合、クロックレート パイプラインを使用して速度を最適化することもできます。
クロックレート パイプラインと階層のフラット化
クロックレート パイプラインは、サブシステム階層がフラットにされているかどうかを問わず使用できます。設計におけるリソース共有の機会を最大限に高める場合は、サブシステム階層をフラットにします。サブシステム階層をフラットにするには、最上位のサブシステムで [FlattenHierarchy] を有効にします。既定では、最上位のサブシステム内のすべての Subsystem ブロックは、この [FlattenHierarchy] 設定を継承しています。階層をフラットにすることで、複数のクロック レート領域が階層内の同じレベルとして結合されるため、クロックレート パイプラインを適用できる機会が増えます。しかし、設計のモジュール性が損なわれ、生成された HDL コードの可読性に影響を与えます。階層のフラット化も参照してください。
階層をフラット化せずにクロックレート パイプラインを適用するには、モデルの最上位のサブシステムで [FlattenHierarchy] を無効にします。設計に固定小数点データ型が使用されている場合、配下のサブシステムでいくつかの最適化を有効にしてください。その場合、HDL Coder は、サブシステムの階層を保ちながら、設計にクロックレート パイプラインを導入します。これには、次のような特徴があります。
設計のモジュール性が向上し、特に、複雑な階層を持つ大規模な設計において、生成されたモデルが見やすくなる。
設計に含まれるさまざまな Subsystem ブロックに複数の Verilog、SystemVerilog、または VHDL ファイルを作成するため、生成された HDL コードの可読性が高まる。
DUT 出力端子のクロックレート パイプライン
データ レートではなくクロック レートで DUT から出力を渡し、可能な限り速やかに DUT 出力を生成するには、[DUT 出力端子のクロック レート パイプラインを許可] コンフィギュレーション パラメーターを選択するか、ClockRatePipelineOutputPorts
プロパティを使用します。このプロパティは、DUT 出力端子のサンプル時間を遅いデータ レートからクロック レートに変更することにより、DUT インターフェイスのタイミングを変えます。タイミングの差を調整するため、HDL Coder は各出力端子の位相オフセットを示すメッセージを生成します。たとえば、次のメッセージは portname
からの出力データが 31 クロック サイクル後に有効になることを意味します。出力端子
このパラメーターを設定するには、Allow clock-rate pipelining of DUT output portsを参照してください。portname
の位相: 31 クロック サイクル。
検証モデルは、DUT 出力に Rate Transition ブロックを挿入して、Rate Transition ブロックの出力と元の出力を比較することで、タイミングの差を調整します。RTL テスト ベンチは Rate Transition ブロックの入力時の出力データをログに記録して、それと RTL シミュレーションの DUT 出力を比較します。
DUT 出力をクロック レートで生成する場合、出力が準備できるタイミングにばらつきが出たとしても、可能な限り早く出力が準備されます。これは、たとえば、制御システムでハードウェアインザループ シミュレーションを実行する場合に、プラント モデルが遅いレートで実行されており、DUT 内の制御信号などの離散ロジックを速いレートまたは短い応答遅延時間で実行する必要がある場合に役立ちます。出力の最大レイテンシ要件を満たしながら出力間を同期するには、[クロック レート パイプライン DUT 出力端子の均衡化] コンフィギュレーション パラメーターを選択するか、BalanceClockRateOutputPorts
プロパティを使用することで、クロックレート パイプライン DUT 出力端子を均衡化できます。ロジックを有効な信号インターフェイスと連動させるときに、ロジック パスの出力と Valid 信号のパスの出力を一致させる場合は、このプロパティを適用できます。このパラメーターを設定するには、Balance clock-rate pipelined DUT output portsを参照してください。
クロックレート パイプラインの指定
Simulink モデルまたは MATLAB 関数からクロックレート パイプライン最適化を行った HDL コードを生成できます。
Simulink モデルに対するクロックレート パイプラインの指定
クロックレート パイプラインは、モデルに対して設定することも、最上位 DUT サブシステム内のサブシステムに設定して細かく制御することもできます。既定では、クロックレート パイプラインがモデルで有効になっています。クロックレート パイプラインを UI から無効化するには、次を行います。
[アプリ] タブで、[HDL Coder] を選択します。[HDL コード] タブが表示されます。
[設定] をクリックします。[HDL コード生成] 、 [最適化] 、 [パイプライン] タブで、[クロックレート パイプライン] をオフにして [OK] をクリックします。
コマンド ラインで関数 makehdl
または hdlset_param
を使用して、ClockRatePipelining
プロパティを off
に設定します。
最上位 DUT サブシステム内のサブシステムのクロックレート パイプラインを使用できます。設計内のコントロール パスをクロック レートではなくデータ レートでモデル化するには、コントロール パスをサブシステムに配置して、そのサブシステムのクロックレート パイプラインを無効にします。最上位 DUT サブシステム内のサブシステムでクロックレート パイプラインを無効にするには、そのサブシステムの [ClockRatePipelining] を [off]
に設定します。サブシステムのクロックレート パイプラインの設定も参照してください。
MATLAB 関数に対するクロックレート パイプラインの指定
MATLAB 関数に対してクロックレート パイプラインを有効化するには、次のようにします。
MATLAB HDL ワークフロー アドバイザーを開きます。MATLAB HDL ワークフロー アドバイザーの使用を開始するには、MATLAB からの基本の HDL コード生成と FPGA 合成を参照してください。
左側のペインで、[HDL コード生成] タスクをクリックします。右側のペインで、[最適化] タブに移動し、[クロック レート パイプライン] を選択します。
[クロックと端子] タブをクリックし、[オーバーサンプリング係数] を 1 よりも大きい値に設定します。
クロックレート パイプライン レポート
クロックレート パイプライン情報をレポートで見るには、各サブシステムまたはモデル参照のコードを生成する前に、最適化レポートを有効にします。[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成] 、 [レポート] セクションで [最適化レポートを生成] を選択します。
最適化レポートを生成すると、レポートの [クロック レート パイプライン] セクションを使用して、クロックレート パイプライン最適化がモデルでどのように実行されたのかを確認できます。[クロック レート パイプライン] セクションには以下が含まれています。
クロックレート パイプラインおよびその関連最適化がモデルで正常に実行されたかどうか
モデルで使用されたオーバーサンプリング係数
クロックレート パイプラインで使用されたクロック レート
クロックレート パイプラインの障害のリスト、および元のモデルと生成されたモデルにおける障害を強調表示したリンク
推奨されるオーバーサンプリング係数 (可能な場合)
ループのレイテンシの割り当て (可能な場合)
コード生成レポートを作成して使用する方法の詳細については、コード生成レポートの作成と使用を参照してください。
クロックレート パイプラインの制限
次のブロックではクロックレート パイプラインがサポートされていないため、クロックレート パイプライン領域が区切られます。
Deserializer1D
Serializer1D
Dual Port RAM
Dual Rate Dual Port RAM
Simple Dual Port RAM
Single Port RAM
HDL FIFO
HDL Cosimulation
Hit Crossing
永続変数を使用する場合の MATLAB System
再利用可能な Subsystem (CodeReuseSubsystem) (
FlattenHierarchy
を有効にしていない場合)Model.代わりに Subsystem Reference を使用してください。
HDL Coder では、次のものに対するクロックレート パイプラインはサポートされていません。
HDLArchitecture
が[BlackBox]
に設定された Subsystem または Model ブロック。ブラック ボックス サブシステム、あるいはブラック ボックス モデル参照ブロック。
クロックレート パイプラインをサポートしていないブロックを含むサブシステム。
DSP Builder for Intel® FPGAs サブシステム。
System Generator for DSP サブシステム。
Communications Toolbox™ ブロック。
Delay および Discrete FIR Filter 以外の DSP System Toolbox™ ブロック。
Wireless HDL Toolbox™ ブロック。
Vision HDL Toolbox™ ブロック。
Stateflow® ブロック。
クロックレート パイプラインの最適化を使用する場合、HDL Coder は、同じリソースでストリーミングと共有両方の最適化を適用できません。クロックレート パイプラインが有効な場合は、クロックレート パイプラインを無効にするか、同じリソースでストリーミングの最適化または共有の最適化を使用します。
HDL Coder では、[クロックの入力] が [複数]
に設定されている場合、クロックレート パイプラインはサポートされません。
参考
モデル設定
関連する例
- クロックレート パイプラインを使用したクロック周波数の向上
- Optimize Feedback Loop Design and Maintain High Data Precision for HDL Code Generation