Main Content

合成実行なしのクリティカル パスの推定

クリティカル パスとは、タイミング遅延が最大になる入力と出力との間を組み合わせたパスです。設計内のクリティカル パスを見つけるには、HDL Coder™ を使用します。クリティカル パスのタイミングを設計で達成すべきターゲット周波数に一致させるには、遅延を追加してクリティカル パスを分割します。追加の遅延により、ターゲット FPGA 上のレイテンシとレジスタ使用数は増加します。

クリティカル パスの可能性が最も高いパスを設計内で簡単に特定するには、クリティカル パスの推定を使用します。合成を実行したり、HDL コードを生成したりする必要はありません。クリティカル パスの推定は、クリティカル パスを検出する反復的プロセスを高速化します。必要とするターゲット周波数と設計のタイミングが一致するまでクリティカル パスが最適化されます。

クリティカル パスの推定は、設計反復プロセスを高速化します。クリティカル パスの推定は、HDL ワークフロー アドバイザーで [FPGA 合成および分析] を実行して、クリティカル パスに注釈付けすることの代替方法です。

クリティカル パスの推定プロセス

HDL Coder は、ターゲット固有のタイミング データベースのタイミング データを使用して静的タイミング解析を実行することにより、推定クリティカル パスを見つけます。関数 genhdltdb を使用して、指定したターゲット デバイス ファミリ、ターゲット デバイス スピード グレード、およびターゲット ツールのタイミング データベースを生成します。既定では、HDL Coder には、以下のターゲット デバイスのタイミング データベースがあります。

  • Altera® Cyclone V

  • Intel® Stratix V

  • Xilinx® Artix®-7、スピード グレード -1

  • Xilinx Kintex®-7、スピード グレード -1

  • Xilinx KintexUltraScale™、スピード グレード -1

  • Xilinx Virtex®-4、スピード グレード -10

  • Xilinx Virtex-7、スピード グレード -1

  • Xilinx Zynq®、スピード グレード -1

  • Xilinx ZynqUltraScale+™、スピード グレード -1

タイミング データベースを作成するため、HDL Coder では、Simulink® ブロック、ブロック アーキテクチャおよびこれらのブロックのサブコンポーネントなどの基本的な設計コンポーネントを特定のターゲット デバイスに対して特徴付けます。

コード ジェネレーターがモデル設計を解析して、タイミング データベース内のブロックとサブコンポーネントに分解します。設計がタイミング データベース内のブロックまたはサブコンポーネントで構成されている場合、コード ジェネレーターはタイミングのクリティカル パスをより正確に推定できます。設計がタイミング データベース以外のコンポーネントを使用する場合は、個別の強調表示スクリプトが生成されて、特徴付けられていないブロックを示します。タイミング データが設計の一部に対して不完全な場合、推定クリティカル パスが実際のクリティカル パスと一致しない可能性があります。

ターゲットのハードウェアがクリティカル パスの推定でサポートされているいずれかのターゲット デバイスである場合、タイミングの数と推定クリティカル パスの精度はより高くなります。ターゲットのハードウェアがサポートされているデバイスではない場合や、同じデバイス ファミリにはない場合でも、クリティカル パスを推定することはできますが、タイミングの数は正確ではなくなる可能性があります。

クリティカル パスの推定の使用

設計のクリティカル パスは、[コンフィギュレーション パラメーター] ダイアログ ボックスまたはコマンド ラインで推定できます。[コンフィギュレーション パラメーター] ダイアログ ボックスでクリティカル パスを推定するには、以下を行います。

  1. クリティカル パスの推定レポートの生成を有効にします。

    1. [アプリ] タブで、[HDL Coder] を選択します。

    2. [HDL コード] タブで、[設定][レポート オプション] を選択し、[高位のタイミング クリティカル パス レポートを生成] を選択します。

  2. モデルの HDL コード生成を無効にします。[HDL コード生成][グローバル設定][詳細設定] タブで、[HDL コードを生成] チェック ボックスをオフにします。

    設計のクリティカル パスを推定するために、完全なコード生成プロセスを実行する必要はありません。HDL コード生成を無効にすると、HDL Coder が生成されたモデルを作成し、クリティカル パスの推定スクリプトを表示するまでの間、プロセスを実行します。コード生成プロセスの大部分の実行が回避されるため、特に大規模なモデルにおいて、クリティカル パスの推定にかかる時間が節約されます。

  3. 設計に浮動小数点データ型が含まれている場合、Native Floating Point モードを有効にします。[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成][浮動小数点] ペインで、[浮動小数点の使用] を選択します。

  4. ターゲット デバイスに対して生成されたタイミング データベースのパスを設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成][レポート] ペインで [高位のタイミング クリティカル パス レポートを生成] パラメーターを選択してから、[参照] をクリックしてターゲット フォルダーを選択することで、生成されたタイミング データベースのパスを設定します。

    既定では、ターゲット フォルダーには、保存されたタイミング データベースのフォルダーの一部がターゲット構成に基づいて表示されます。[カスタム タイミング データベースのディレクトリ] ボックスが空であるか、ターゲット構成にタイミング データベースがない場合、既定では、HDL Coder は Xilinx Virtex-7、スピード グレード -1 のデバイスのタイミング データベースを使用して、クリティカル パスの推定レポートを生成します。

    関数 genhdltdb を使用して、指定したターゲット デバイス ファミリ、ターゲット デバイス スピード グレード、およびターゲット ツールのタイミング データベースを生成することもできます。

  5. クリティカル パスの推定レポートを生成します。[HDL コード生成] ペインで、[適用] をクリックして、[生成] をクリックします。

HDL Coder は、クリティカル パスの推定レポートを生成し、MATLAB® コマンド ウィンドウに強調表示するスクリプトと強調表示を解除するスクリプトへのリンクを含むメッセージを表示します。

レポートをコマンド ラインで生成するには、以下のコードを使用します。クリティカル パスの推定を行う設計に基づき、変数 modelname および dutname を指定します。関数 hdlset_param を使用して、ターゲット デバイスに対して生成されたタイミング データベースのパスを設定します。クリティカル パスの推定レポートの生成を有効にしているときに、ターゲット デバイスのタイミング データベースのパスを設定しない場合、HDL Coder は、指定されたターゲット デバイス ファミリおよびターゲット デバイス スピード グレードの既定のタイミング データベースを検索します。指定されたターゲット デバイスのタイミング データベースを利用できない場合、既定では、HDL Coder は Xilinx Virtex-7、スピード グレード -1 のデバイスのタイミング データベースを使用して、クリティカル パスの推定レポートを生成します。この例では、sfir_single モデルを使用します。

% Specify model and subsystem names
modelname = 'sfir_single';
dutname = 'sfir_single/symmetric_fir';
open_system(modelname)

% Disable HDL code generation for faster generation 
% of critical path estimation report
hdlset_param(modelname,'CriticalPathEstimation','on');
hdlset_param(modelname,'GenerateHDLCode','off');

% If design contains single data types, 
% enable native floating-point support
fpconfig = hdlcoder.createFloatingPointTargetConfig('NativeFloatingPoint');
hdlset_param(modelname,'FloatingPointTargetConfig',fpconfig);

% Set path of generated timing databases for target device
hdlset_param(modelname,'TimingDatabaseDirectory','C:\Work\Database'); 

% Generate report
makehdl(dutname)

criticalpathestimated スクリプトへのリンクをクリックすると、コード ジェネレーターは生成されたモデル内でクリティカル パスを強調表示します。生成されたモデル内に、クリティカル パスのタイミング情報と、そのパス上にあるブロックが表示されます。この図は、Simulink モデルのクリティカル パスに注釈が付けられた部分を示しています。ネイティブの浮動小数点演算子は薄い青で強調表示され、遅延はオレンジで強調表示されます。クリティカル パスの一部であるブロックは濃い青で強調表示され、ブロックの横に注釈としてクリティカル パスの値が示されます。詳細については、生成されたモデルと検証モデルを参照してください。

強調表示をオフにするには、clearhighlighting スクリプトへのリンクをクリックします。

クリティカル パスを最適化するには、パイプライン レジスタを追加して、クリティカル パスを分割します。[浮動小数点の使用] を選択してネイティブ浮動小数点を使用する場合は、[LatencyStrategy][Max] に設定してタイミングを改善します。クリティカル パスの推定レポートと、設計のクリティカル パスを強調表示するスクリプトを再生成します。このプロセスを、設計のタイミングが必要とするターゲット周波数に一致するまで繰り返します。

特徴付けられるブロック

以下の表は、固定小数点と単精度ネイティブ浮動小数点の型で特徴付けられるブロックを示しています。これらのブロックは、サポートされる各ターゲット デバイスのタイミング データベースの一部です。

Math Operations

Simulink ブロック固定小数点型単精度 (ネイティブ浮動小数点)
Abs
Add✓ (ブロックは 2 つを超える入力をもつことができない)
Subtract
Product
Gain
Gain to power of two該当なし
Divide該当なし
Rounding Function該当なし
Unary Minus
Sign
Reshape該当なし
Complex to Real-Imag該当なし

数学関数

Simulink ブロック固定小数点型単精度型 (ネイティブ浮動小数点)
Reciprocal
Hypot
Rem
Mod
Sqrt
Reciprocal Sqrt
Exp該当なし
Log該当なし
Log10該当なし
10^u該当なし
Magnitude Square
Square
Pow該当なし
Conj該当なし該当なし
Transpose該当なし該当なし
Hermitian該当なし該当なし

三角関数

Simulink ブロック固定小数点型単精度型 (ネイティブ浮動小数点)
Sin該当なし
Cos該当なし
Tan該当なし
Sincos該当なし
Asin該当なし
Acos該当なし
Atan該当なし
Atan2該当なし
Sinh該当なし
Cosh該当なし
Tanh該当なし
Atanh該当なし

変換と比較

Simulink ブロック固定小数点型単精度型 (ネイティブ浮動小数点)
Data Type Conversion
Float Typecast該当なし
Relational Operator
Compare To Constant
MinMax

Logic and Bit Operations

Simulink ブロック固定小数点型単精度型 (ネイティブ浮動小数点)
Bit Concat該当なし
Extract Bits該当なし
Bit Shift該当なし
Bit Slice該当なし
Bitwise Operator該当なし
Logical Operator該当なし
Detect Change該当なし
Detect Decrease該当なし
Detect Increase該当なし
Detect Fall Negative該当なし
Detect Fall Nonpositive該当なし
Detect Rise Positive該当なし
Detect Rise Nonnegative該当なし
Interval Test該当なし
Interval Test Dynamic該当なし

離散と信号の経路指定

Simulink ブロック固定小数点型単精度型 (ネイティブ浮動小数点)
Unit Delay
Delay
Bus Creator
Bus Selector
Demux
Multiport Switch
Selector
Switch
Multiport Switch該当なし
Bus Assignment該当なし
Index Vector該当なし
Vector Concatenate該当なし
Resettable Delay該当なし
Tapped Delay該当なし
Unit Delay Enabled Synchronous該当なし
Unit Delay Resettable Synchronous該当なし
Unit Delay Enabled Resettable Synchronous該当なし
Discrete FIR Filter該当なし
Discrete Transfer Fcn該当なし
Zero-Order Hold該当なし
Memory該当なし

HDL Operations と HDL RAMs

Simulink ブロック固定小数点型単精度型 (ネイティブ浮動小数点)
Counter Free-Running
Counter Limited
HDL Counter
Dual Port RAM
Dual Rate Dual Port RAM
Simple Dual Port RAM
Single Port RAM
Deserializer1D
Serializer1D

Signal Attributes および Lookup Tables

Simulink ブロック固定小数点型単精度型 (ネイティブ浮動小数点)
Constant
1-D Lookup Table
2-D Lookup Table
n-D Lookup Table
Rate Transition
Signal Conversion
Signal Specification

User-Defined Functions

Simulink ブロック固定小数点型単精度型 (ネイティブ浮動小数点)
MATLAB Function該当なし

設計に MATLAB function ブロックがあり、HDL ブロック プロパティ [アーキテクチャ][MATLAB Function] に設定されている場合、クリティカル パスの推定時や HDL コードの生成時に、MATLAB function ブロックが特徴付けられていないブロックとしてコード生成レポートに表示されることがあります。MATLAB function ブロックを特徴付けるには、[アーキテクチャ][MATLAB Datapath] に設定します。

MATLAB Function ブロックを使用し、[MATLAB Datapath] アーキテクチャを使用してコードを生成するときに、HDL Coder は MATLAB アルゴリズムを生成されたモデルで Simulink ブロック線図に変換します。生成されたモデルでは、クリティカル パスの推定によって MATLAB Function ブロック内、および MATLAB Function ブロック境界を越えた他の Simulink ブロックとの間のクリティカル パスに注釈を付けることができます。MATLAB Datapath アーキテクチャを使用した、MATLAB Function ブロック境界を越えた HDL 最適化も参照してください。

考慮事項

マルチレート モデルのクリティカル パスの推定

クリティカル パスの推定は、設計内の異なるシーケンシャル要素へのクロックゲーティング情報を考慮しません。

モデルに複数のサンプルレートが含まれている場合またはパイプライン レジスタを挿入する速度と面積の最適化を使用している場合、設計はマルチレートになり、設計にマルチサイクル パスが含まれる可能性があります。マルチレート モデルの場合、クリティカル パスの推定では遅いデータ パスと速いデータ パスを同じレートで実行するものとして扱います。設計内の別のデータ パスのクロック レートがより遅い場合、レートがより速いデータ パスがクリティカル パスとして強調表示される場合があります。この問題により、不正確なタイミング結果を報告するクリティカル パスの推定が生じる可能性があります。

推定クリティカル パス情報を検証するには、HDL ワークフロー アドバイザーを開き、ターゲット デバイスの [Generic ASIC/FPGA] ワークフローを [合成結果をもつモデルに注釈を付ける] タスクに対して実行します。

ネイティブ浮動小数点モードでのクリティカル パスの推定

設計に single データ型が含まれており、[浮動小数点の使用] を選択して Native Floating Point モードを使用する場合、クリティカル パスの推定スクリプトは、生成されたモデル内の single 浮動小数点演算子を強調表示することがあります。コード ジェネレーターが single ブロックを強調表示するのは、浮動小数点アルゴリズムには膨大な計算量が必要であるためです。浮動小数点演算子内部のレジスタ間パスがクリティカル パスになることがあります。

その場合、クリティカル パスのタイミングを最適化するには、その演算子に対応する Simulink ブロックで、[LatencyStrategy][最大値] に設定します。

半精度データ型を使用する Simulink ブロックはクリティカル パスの推定に使用されません。これらのブロックは 0 ns のタイミング遅延を使用して強調表示されます。

HDL コード生成の動作

クリティカル パスの推定を有効にすると、生成される HDL コードが外部リセットまたはイネーブル端子をもつ Delay ブロックのレポートとは異なる可能性があります。MinMax などのブロックの場合、クリティカル パスの推定を有効にすると、生成される HDL ファイルの数が異なる可能性があります。この変更は、この最適化を有効にするとコード ジェネレーターが実行する特定の最適化に起因して発生します。最適化によって変更されるのはコードの外観のみで、機能には影響しません。

以下は、生成される HDL コードが異なる可能性がある Simulink ブロックです。

  • 外部リセットまたはイネーブル端子をもつ Delay ブロック

  • MinMax

  • Unit Delay Enabled Synchronous

  • Unit Delay Resettable Synchronous

  • Unit Delay Enabled Resettable Synchronous

  • Enabled Delay

  • Resettable Delay

  • Tapped Delay

  • Discrete FIR Filter

  • Biquad Filter

  • MATLAB Function

クリティカル パスの推定の不正確性

  • クリティカル パスの推定は、推定係数を使用して経路による遅延を考慮しようとします。配置配線を実行しないと、経路による遅延を正確に考慮するのは困難です。

  • HDL Coder は、組み合わせの性質を持つ特徴付けられないブロックを、ゼロ遅延の組み合わせブロックとして推測します。コード ジェネレーターはその他のブロックをレジスタとして扱います。

  • サポートされているいずれかのターゲット デバイスと同様のタイミング特性がターゲット デバイスにない場合、クリティカル パスの推定は正確にクリティカル パスを計算できません。

カスタム ツールおよびデバイス用のカスタム タイミング データベースの生成

R2024a 以降

ツールやデバイス用のカスタム タイミング データベースを生成するために、HDL Coder は特定のターゲット デバイスの Simulink ブロック、ブロック アーキテクチャ、それらのブロックのサブコンポーネントなどの基本設計コンポーネントの特性を使用し、その情報を hdlcoder.TimingGenerator オブジェクトに渡します。hdlcoder.TimingGenerator オブジェクトでは、静的なタイミング情報を含むタイミング情報ファイルが生成されます。関数 genhdltdb はタイミング情報ファイルを使用してカスタム タイミング データベースを生成します。

hdlcoder.TimingGenerator ハンドル クラスを使用して、タイミング ジェネレーター オブジェクトを生成できます。HDL Coder には、ツールまたはデバイス用のカスタム タイミング ジェネレーターの作成に使用できる、Intel Quartus® および Xilinx Vivado® 用のタイミング ジェネレーター オブジェクトが含まれています。詳細については、hdlcoder.TimingGenerator を参照してください。

タイミング ジェネレーター オブジェクトは、ナノ秒 (ns) 単位の伝播遅延を含むコンマ区切り値 (CSV) テキスト ファイルを出力します。たとえば、次のイメージのモデルを使用するとします。

タイミング ジェネレーターは、次の CSV テキスト ファイルを出力します。

ファイルには、DelayInfo, source_type, destination_type, propagation delay (ns) という形式の情報が含まれています。

source_type または destination_type フィールドのタイプは次のとおりです。

  • mw_internal_registers — 特徴付けられるブロックを含むサブシステム内の任意の内部レジスタ。

  • mw_inport_# — インデックス 0 から始まる、演算子への番号付き入力。たとえば、mw_inport_0mw_inport_1 などです。

  • mw_outport_# — インデックス 0 から始まる、演算子からの番号付き出力。たとえば、mw_outport_0mw_outport_1 などです。

  • propagation delay (ns) — 内部から内部、入力から内部、内部から出力、または入力から出力へのいずれかの伝播遅延の値 (ナノ秒単位)。タイミング パスが存在しない場合、この値は inf になります。このフィールドには、すべてのパスのタイミング情報が含まれます。

参考

| | |

関連するトピック