フォルス パス - 2022.1 日本語

Vivado Design Suite ユーザー ガイド: 制約の使用 (UG903)

Document ID
UG903
Release Date
2022-06-01
Version
2022.1 日本語

フォルス パスは、デザインには存在するが、機能はなく、タイミング解析する必要のないパスです。そのため、フォルス パスはタイミング解析で無視する必要があります。

ビデオ: フォルス パスなどの高度なタイミング例外については、Vivado Design Suite QuickTake ビデオ: 高度なタイミング例外 - フォルス パス、最小/最大遅延、ケース解析を参照してください。

次に、フォルス パスの例を示します。

  • ダブル シンクロナイザー ロジックが追加されたクロック ドメインをまたがるパス
  • 電源投入時に一度だけ書き込まれるレジスタ
  • リセットまたはテスト ロジック
  • 非同期分散 RAM の書き込みクロックと非同期読み出しクロックの間のパスを無視 (該当する場合)

次の図に機能しないパスの例を示します。2 つのマルチプレクサーはどちらも同じセレクト信号で駆動されるので、Q から D へのパスは存在せず、フォルス パスとして定義する必要があります。

図 1. 機能しないパスの例

ヒント: 同期パスのタイミング要件を緩和することだけが目的で、パスをタイミング解析、検証、最適化する必要がある場合は、フォルス パス制約ではなくマルチサイクル パス制約を使用してください。

タイミング解析からフォルス パスを除外するのには、次のような理由があります。

実行時間の短縮
タイミング解析からフォルス パスを除外すると、機能しないパスのタイミングをツールで解析したり最適化する必要はありません。機能しないパスをタイミング エンジンおよび最適化エンジンで処理する必要があると、実行時間が大幅に増加します。
QoR (結果の品質) の向上
フォルス パスを除外すると、QoR が大幅に向上する可能性があります。合成、配置、最適化されたデザインの質は、ツールが解決しようとするタイミング問題に大きく影響されます。

機能しないパスにタイミング違反がある場合、実際に機能するパスではなく、機能しないパスの問題を修正するために時間が費やされる可能性があります。ロジックが複製されるなど、デザインのサイズが不必要に大きくなるだけでなく、機能しないパスの違反が大きいために本物の違反が修正されないこともあります。ベストな結果は、現実的な制約を設定しないと達成できません。

フォルス パスは、ザイリンクス デザイン制約 (XDC) コマンドの set_false_path を使用してツール内で定義されます。

set_false_path [-setup] [-hold] [-from <node_list>] [-to <node_list>] \ [-through <node_list>]

これ以外にも、パスをより詳細に指定する次のコマンド オプションを使用できます。サポートされるすべてのコマンド ライン オプションの詳細は、 『Vivado Design Suite Tcl コマンド リファレンス ガイド』 (UG835) を参照してください。

  • -from オプションでは、有効な始点のノード リストを指定する必要があります。有効な始点は、クロック オブジェクト、順次エレメントのクロック ピン、入力 (または入出力) プライマリ ポートです。複数のエレメントを指定できます。
  • -to オプションでは、有効な終点のノード リストを指定する必要があります。有効な終点は、クロック オブジェクト、出力 (または入力) プライマリ ポート、順次エレメントの入力データ ピンです。複数のエレメントを指定できます。
  • -through オプションでは、有効なピン、ポート、またはネットのノード リストを指定する必要があります。複数のエレメントを指定できます。
注意:
-through および -from オプションを使用せずに -to オプションを使用する場合は、指定したピンまたはポートを追加するすべてのパスがタイミング解析から除外されるので、注意が必要です。IP またはサブブロック用にタイミング制約を定義し、別のコンテキストまたは大型のプロジェクトで使用する場合は、特に注意してください。-through のみを使用すると、予測以上の数のパスが削除される可能性があります。

-through オプションの順序も重要です。次に例を示します。次の 2 つは、異なる制約を設定します。

set_false_path -through cell1/pin1 -through cell2/pin2 
set_false_path -through cell2/pin2 -through cell1/pin1

次の例では、reset ポートからすべてのレジスタへのタイミング パスを除外しています。

set_false_path -from [get_port reset] -to [all_registers]

次の例では、2 つの非同期クロック ドメイン間 (クロック CLKA から CLKB) のタイミング パスを除外しています。

set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]

上記の例では、クロック CLKA からクロック CLKB のパスは除外されますが、クロック CLKB からクロック CLKA へのパスは除外されません。2 つのクロック ドメイン間の両方向のパスをすべてディスエーブルにするには、次のように 2 つの set_false_path コマンドが必要です。

set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB] 
set_false_path -from [get_clocks CLKB] -to [get_clocks CLKA]
重要: 上記 2 つの set_false_path 例で意図した機能が実行されますが、2 つ以上のクロック ドメインが非同期で、それらのクロック ドメイン間のパスをいずれかの方向でディスエーブルにする必要がある場合は、set_clock_groups コマンドを使用することを推奨します。
set_clock_groups -group CLKA -group CLKB

図 1 の機能していないパスの例では、フォルス パスが -through-from オプションではなく、-to オプションを使用して設定されています。図 2を参照してください。

図 2. 機能しないパスの例

これにより、始点および終点の特定のパターンを見つける必要なく、上図に示すパスを通過するすべてのパスを選択できます。

set_false_path -through [get_pins MUX1/a0] -through [get_pins MUX2/a1]
注記: -through オプションの順序も重要です。上記の例の順序では、フォルス パスはまず MUX1/a0 ピンを通ってから MUX2/a1 ピンを通過します。

別の一般的な例として、非同期デュアル ポート分散 RAM を使用する場合があります。書き込みはクロック RAM に同期していますが、読み出しはデザインで許容される場合は非同期にすることもできます。この場合、書き込みクロックと読み出しクロックの間のタイミング パスをフォルス パスとして設定しても問題ありません。

この設定には次の 2 つの方法があります。

  • RAM の前にある書き込みレジスタから読み出しクロックを受信する RAM の後にあるレジスタまでのパスを、フォルス パスとして定義します。
    set_false_path -from [get_cells <write_registers>] -to [get_cells <read_registers>]

    Vivado Design Suite のサンプル プロジェクト WAVEGen (HDL):

    set_false_path -from [get_cells -hier -filter {NAME =~
    *gntv_or_sync_fifo.gl0.wr*reg[*]}] -to [get_cells -hier -filter {NAME=~
    *gntv_or_sync_fifo.mem*gpr1.dout_i_reg[*]}]
  • RAM の WE ピンから開始するパスをフォルス パスとして定義します。
    set_false_path -from [get_cells -hier -filter {REF_NAME =~ RAM* && IS_SEQUENTIAL && NAME =~ <PATTERN_FOR_DISTRIBUTED_RAMS>}]

    Vivado Design Suite のサンプル プロジェクト WAVEGen (HDL):

    set_false_path -from [get_cells -hier -filter {REF_NAME =~ RAM* && IS_SEQUENTIAL && NAME =~ *char_fifo*}]

次の図に、WAVE (HDL) サンプル プロジェクトで分散 RAM がどのように駆動されるかを示します。

図 3. WAVE サンプル プロジェクトで駆動される分散 RAM