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