ネットリスト エレメントのアクティビティ - 2022.1 日本語

Vivado Design Suite ユーザー ガイド: 消費電力解析および最適化 (UG907)

Document ID
UG907
Release Date
2022-04-26
Version
2022.1 日本語
次のコマンドを使用して、信号またはトグル レートおよびスタティック確率などのスイッチング アクティビティ、および既知のネットリスト エレメントのクロック波形情報を定義します。
  • set_switching_activity

    指定したエレメントのアクティビティを設定します。スタティック確率と信号レート、またはスタティック レートとトグル レートのいずれかを設定できます。次に例を示します。

    • プライマリ ポートとデザイン全体のブラック ボックス出力のデフォルトのスイッチング アクティビティを設定する場合
      set_switching_activity -default_static_probability 0.5 -default_toggle_rate 12.5
    • ポート/ネット/ピンの信号レートを設定する場合
      set_switching_activity -static_probability 0.5 -signal_rate 50 [get_ports din*]
    重要: スタティック確率が 0 より大きく 1 未満の場合、信号レートは 0 より大きくする必要があります。同様に、信号レートが 0 の場合、スタティック確率は 0 または 1 にする必要があります。スタティック確率と信号レートは、一緒に指定する必要があります。
  • ポート/ネット/ピンのトグル レートを設定する場合
    set_switching_activity -static_probability 0.5 -toggle_rate 25 [get_nets din_int*]

    トグル レートはエレメントに関連付けられたクロック専用のもので、有効な値の範囲は 0 ~ 100 です。

  • ノード グループに対してスイッチング アクティビティを設定する方法は、次のとおりです。

    set_switching_activity コマンドで -type オプションを使用すると、ノード グループ (タイプ) のアクティビティ レートを設定できます。次の表は、サポートされるタイプを示しています。

表 1. スイッチング アクティビティの Tcl コマンドのタイプ (-type オプション)
タイプ名 スイッチング アクティビティ ピン名 セル名
bram_enable ブロック RAM のイネーブル ピン ENARDEN/ENBWREN RAMB36/18
bram ブロック RAM のアクティブ データ出力すべて DOADO/DOBDO RAMB36/18
bram_wr_enable ブロック RAM のライト イネーブル ピン WEA/WEBWE RAMB36/18
register フリップフロップ/ラッチの出力ピン Q FD*
shift_register シフト レジスタの出力ピン Q SRL*
lut_ram RAM の出力データ ピン O RAM(32|64|128|256)*
lut 出力ピン O LUT*
dsp DSP データ出力すべて P/ACOUT/BCOUT/PCOUT DSP48
gt_txdata ポートの TX データ TXDATA GT*_CHANNEL
gt_rxdata RX データ出力ポート RXDATA GT*_CHANNEL
io_output プライマリ出力 get_ports -filter {DIRECTION = OUT} && ‘I’ pin of OBUF* & IOBUF* OBUF*
io_bidir_enable Bidir ポートのイネーブル ピン T OBUF*

次のセクションに、set_switching_activity コマンドの使用方法を説明します。デザインの最上位スコープの LUT にスイッチング アクティビティを設定するには、次のコマンドを使用します。

set_switching_activity -type lut –static_probability 0.5 –toggle_rate 25 [get_cells]

CPU/MEM の階層のすべてのレジスタにトグル レートとスタティック確率を設定するには、次のコマンドを使用します。

set_switching_activity -type register -toggle_rate 0.4 -static_probability 0.5 [get_cells CPU/MEM]

CPU の階層とその下の階層のすべてのレジスタに指定したトグル レートとスタティック確率を設定:

set_switching_activity -type register -toggle_rate 0.4 -static_probability 0.5 –hier [get_cells CPU]

すべてのプライマリ出力に指定したスイッチング アクティビティを設定:

set_switching_activity -type io_output –static_probability 0.5 -toggle_rate 0.4 -all
重要: トグル レートにグリッチ レートを含めると、(toggle_rate/200) =< static_probability =< 1-(toggle_rate/200 という条件を満たす必要が出てくるので、理想としては含めないほうがよいでしょう。グリッチ スイッチングを考慮するには、信号レート設定と実際のアクティビティ レートを一緒に使用します。
重要: set_switching_activity を使用してもデザイン クロック ネットには影響しません。クロック ネットのアクティビティを変更するには、タイミング制約 (create_clock create_generated_clockset_case_analysis など) を使用してください。
  • report_switching_activity

    指定したエレメントのアクティビティをレポートします。スタティック確率、信号レートおよびトグル レートを表示します。割り当てられたスイッチング アクティビティのソースも表示します。次に、report_switching_activity コマンドの例を示します。

    • 単一ネットのスタティック確率、信号レート、トグル レートをレポート:
      Vivado% report_switching_activity -static_probability [get_ports clk_p]
      
      clk_p:  static probability = 0.5 (C)
      
      Vivado% report_switching_activity  [get_ports clk_p]
      
      clk_p:  static probability = 0.5 (C)  signal rate = 400 (C) toggle rate = 200 (C)
      割り当てられたスイッチング アクティビティのソースは、(C) = XDC 制約、(D) = トグル デフォルト、(S) = SAIF アノテート、(A) = ユーザー割り当て、となります。
    • グループ ノードをレポート:

      階層 CPU の分散 RAM すべてのスイッチング アクティビティをレポート:

      report_switching_activity –type lut_ram  [get_cells CPU/*]

      デザインの GT RXDATA すべてのスイッチング アクティビティをレポート:

      report_switching_activity –type gt_rxdata -all
      サポートされるタイプの詳細は、表 1 を参照してください。
  • ネットのリストに対し、平均的なスイッチング アクティビティをレポートします。
    バスのスイッチング アクティビティ
    report_switching_activity -average [get_nets bussed_signal[*]]
    インスタンスのスイッチング アクティビティ
    report_switching_activity -average [get_nets -top -hier -filter {TYPE==SIGNAL && NAME =~ "Instance_Name"}
    デザイン全体のスイッチング アクティビティ
    report_switching_activity -average [get_nets -top -hier -filter {TYPE==SIGNAL}

    -average オプションを使用すると、既存のデザインの典型的なスイッチング アクティビティを算出でき、そのアクティビティを XPE で適用して、類似のデザインの消費電力を見積もることができます。

  • reset_switching_activity

    特定のネットリスト エレメントのアクティビティ レート (スタティック確率、信号レート、およびトグル レート) をツールのデフォルト値にリセットします。このコマンドは、ユーザー指定の値とシミュレーション アクティビティ レート設定の両方をリセットします。次に例を示します。

    • プライマリ ポートとデザイン全体のブラック ボックス出力のデフォルトのスイッチング アクティビティをリセット:
      reset_switching_activity -default
    • デザイン全体のアクティビティ レートをリセット:
      reset_switching_activity -all
    • 特定のポート/ネット/ピンのアクティビティ レートをリセット:
      reset_switching_activity [get_ports din*]
    • ノード グループのアクティビティ レートをリセット:

      デザインのすべてのブロック RAM イネーブル (ENARDEN/ENBWREN) のスイッチング アクティビティをリセット:

      reset_switching_activity –type bram_enable -all

      階層 CPU/ とその下のレベルのすべての LUT のスイッチング アクティビティをリセット:

      reset_switching_activity –type lut –hier [get_cells CPU/MEM]
    サポートされるタイプの詳細は、表 1 を参照してください。
  • read_saif

    SAIF シミュレーション出力ファイルを読み込んで、一致するネットリスト エレメントにこのファイルに記述されているスイッチング アクティビティをアノテートします。次に例を示します。

    read_saif -out_file read_saif.rpt -strip_path tb/tb_core/core -file routed.saif

    read_saif のオプションは、次のとおりです。

    out_file
    不一致のシミュレーションおよびデザイン ネット リストをファイルにダンプします。
    strip_path
    デフォルトでは、デザインの最上位がテストベンチにインスタンシエートされていると想定されます。このため、階層の最初の 2 レベルは SAIF データがデザインにアノテートされるときに削除されます。シミュレーション設定に複数の階層レベルが含まれる場合は、SAIF から削除される階層を指定して、実際のデザインに近い状態になるようにします。

read_saif コマンドでは、SAIF アノテーション サマリも表示され、一致するデザイン ネットの数が表示されます。正確な解析には、デザイン ネットが 100% 一致しているのが理想的です。

重要: デザインに暗号化された IP/ブロックが含まれていると、シミュレータではこれらの IP/ブロックおよび暗号化された階層の内部ブロックに対して SAIF 情報が出力されません。この不完全な SAIF 情報が消費電力見積もりの精度に影響する可能性があります。read_saif コマンドでは、デザイン クロック ネットのアクティビティは変更されません。クロック ネット アクティビティは、タイミング制約で駆動されます。

read_saif コマンドは、各 SAIF ファイルに対して複数回実行できます。これにより、異なるブロックの複数の SAIF ファイルを読み込むことができます。すべての SAIF ファイルのスイッチング アクティビティを考慮して消費電力が見積もられます。同じネットが複数の SAIF ファイルに含まれている場合は、read_saif コマンドを使用して最後に読み込んだ SAIF ファイルからのスイッチング アクティビティが適用されます。

  • create_clock

    クロック波形を指定する合成/インプリメンテーション制約です。次に例を示します。

    create_clock -name clk -period 5 [get_ports clk];  # 200MHz
  • create_generated_clock

    生成クロック波形を指定する合成/インプリメンテーション制約です。次に例を示します。

    create_generated_clock -name gen_clk -source clk1 -divide_by 2 [get_net -hier sys_clk]
  • set_input_delay

    プライマリ入力を特定のクロックに関連付けます。これはマルチクロック デザインの場合、特にプライマリ ポートが異なるクロックで起動する場合に重要です。次に例を示します。

    create_clock -name clk1 -period 5 [get_ports clk]
    
    set_input_delay -clock clk1 1 [get_ports d]
    注記: プライマリ ポートがどのクロックとも関連付けられていない場合、スイッチング レートはパスのデスティネーション クロックに基づいて計算されます。

デフォルトでは、create_clock および create_generated_clock は XDC ファイルで定義されているので、再実行する必要はありません。ただし、消費電力レポートのクロック周波数を変更するなど what-if 解析を実行するには、変更を反映させるため create_clock または create_generated_clock を使用する必要があります。