1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. 【Vivado®で使用するXDCファイルの基本的な記述例】第2回 コンフィグレーション設定、タイミング設定編

TECHブログ

【Vivado®で使用するXDCファイルの基本的な記述例】第2回 コンフィグレーション設定、タイミング設定編

【Vivado®で使用するXDCファイルの基本的な記述例】第2回 コンフィグレーション設定、タイミング設定編

このブログでは、Vivado® ML EditionsおよびVivado® design Suite(以下「Vivado」といいます)で使用する、「XDCファイル」の基本的な記述について解説します。

XDCとは、Xilinx Design Constraint(頭文字)の略です。
XDCファイルとは、Xilinx社のFPGA及び適応型SoCに対して制約を与えることができるファイルで、以下の項目の制約設定が可能です。

  • ・端子配置設定
  • ・クロック設定
  • ・コンフィグレーション設定
  • ・タイミング設定 など

 

第2回では、「コンフィグレーション設定の方法」と「タイミング設定」を説明します。


目次

コンフィグレーション設定

CCLKの公称周波数の設定をします。(推奨:33)

set_property BITSTREAM.CONFIG.CONFIGRATE 33 [current_design]

SPIフラッシュのSPIのバス幅の設定をします。(推奨:4)

set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]

以下の設定を行わなかった場合は、周波数3MHz、SPIビット幅1bitとなり、FPGAの起動に時間がかかってしまいます。※最大周波数→66MHz


set_property BITSTREAM.CONFIG.CONFIGRATE 33 [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]

以下は、Bank0のVCCIO電圧の設定です。
VCCIO=1.8Vの場合、CFGBVS→GND
VCCIO=2.5V or 3.3Vの場合、CFGBVS→VCCO の設定とします。
本記述は、なしでも動作します。


set_property CONFIG_VOLTAGE <1.8 2.5 3.3> [current_design]
set_property CFGBVS <GND / VCCO> [current_design]

MIGなど、IPを生成した場合、XDCは自動生成されているため、記述する必要はありません。

タイミング設定

入力遅延

入力ポートでのデータ遅延時間を設定

set_input_delay -clock {クロック} -max 最大遅延 [get_ports 信号名]
set_input_delay -clock {クロック} -min 最小遅延 [get_ports 信号名]

クロック 基準となるクロック
最大遅延 クロックエッジ後にデータが到達する最大時間→Setupの制約
最小遅延 クロックエッジ後にデータが到達する最小時間→Holdの制約
信号名 対象となる信号名

出力遅延

出力ポートでのデータ遅延時間を設定

set_output_delay -clock {クロック} -max 最大遅延 [get_ports 信号名]
set_output_delay -clock {クロック} -min 最小遅延 [get_ports 信号名]

クロック 基準となるクロック
最大遅延 クロックエッジ後にデータが必要とする最大時間→Setupの制約
最小遅延 クロックエッジ後にデータが必要とする最小時間→Holdの制約
信号名 対象となる信号名

タイミング解析の除外

非同期入力をタイミング解析から除外するための設定

set_false_path [-from <node_list>] [-to <node_list>] [-through <node_list>]

-from 始点のノー ド リ ス トを指定
-to 終点のノー ド リ ス トを指定
-through ”pin”、”port”、または”net”のノー ド リ ス ト を指定

例1) resetポートからすべてのレジスタへのタイミング解析の除外

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

例2) 2つの非同期クロックドメイン間(CLKAからCLKB)のタイ ミング解析の除外

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

タイミング例外には、 set_false_path 以外に下記のコマンドがあります。

コマンド 機能
set_multicycle_path パスの開始点から終点までデータを伝搬させるのに必要なクロックサイクル数を指定します。
set_max_delay
set_min_delay
最小パス遅延または最大パス遅延の値を指定します。
このコマンドを使用すると、デフォルトのセットアップおよびホールド制約ではなく、ユーザーが指定した最大/最小遅延値が使用されます。

マルチサイクルパス

  • 同一クロック間で定義されるマルチサイクル
  • 低速クロックから高速クロックへ定義されるマルチサイクル
  • 高速クロックから低速クロックへ定義されるマルチサイクル

について記載します。


同一クロック間で定義されるマルチサイクル



デフォルトのセットアップ/ホールドの関係を示します。


以下にコマンド例を示します。


set_multicycle_path n -setup -from [get_pins REGA/C] -to [get_pins REGB/D]
set_multicycle_path n-1 -hold -from [get_pins REGA/C] -to [get_pins REGB/D]

 

・セットアップの乗数を”2”に設定した場合


set_multicycle_path 2 -setup -from [get_pins REGA/C] -to [get_pins REGB/D]
set_multicycle_path 1 -hold -from [get_pins REGA/C] -to [get_pins REGB/D]

となります。

 

・セットアップの乗数を”4”に設定した場合

set_multicycle_path 4 -setup -from [get_pins REGA/C] -to [get_pins REGB/D]
set_multicycle_path 3 -hold -from [get_pins REGA/C] -to [get_pins REGB/D]

となります。


低速クロックから高速クロックへのマルチサイクル


 

・CLK2は、CLK1の3倍の周波数とした場合

デフォルトのセットアップ/ホールドの関係を示します。


set_multicycle_path n -setup -from [get_clocks CLK1] -to [get_clocks CLK2]
set_multicycle_path n-1 -hold -end -from [get_clocks CLK1] -to [get_clocks CLK2] 


セットアップの乗数”n”に設定した場合、ホールドの乗数”n-1”をデスティネーションクロックに対して設定します。

 

・セットアップの乗数を”3”に設定した場合


set_multicycle_path 3 -setup -from [get_clocks CLK1] -to [get_clocks CLK2]
set_multicycle_path 2 -hold -end -from [get_clocks CLK1] -to [get_clocks CLK2] 

となります。

 

高速クロックから低速クロックへのマルチサイクル


 

・CLK2は、CLK1の1/3の周波数とした場合

デフォルトのセットアップ/ホールドの関係を示します。


set_multicycle_path n -setup -start -from [get_clocks CLK1] -to [get_clocks CLK2]
set_multicycle_path n-1 -hold -from [get_clocks CLK1] -to [get_clocks CLK2]


セットアップの乗数”n”をソースクロックに対して設定し、ホールドの乗数”n-1” に設定します。

 

・セットアップの乗数を”3”に設定した場合


set_multicycle_path 3 -setup -start -from [get_clocks CLK1] -to [get_clocks CLK2]
set_multicycle_path 2 -hold -from [get_clocks CLK1] -to [get_clocks CLK2]

となります。

 

最大/最小遅延

  • 最大遅延:セットアップを変更する場合に使用します。
  • 最小遅延:ホールドを変更する場合に使用します。

・最大遅延コマンド例

set_max_delay <delay> [-datapath_only] [-from<node_list> ]
                                       [-to <node_list>] [-through <node_list>]

・最小遅延コマンド例

set_min_delay <delay> [-from <node_list>]
                                      [-to <node_list>] [-through <node_list>]

 

・オプション

-datapath_only →スラックの算出からクロックスキューを除外できる
→set_max_delayのみサポート
→ホールドは無視される
-from →クロック、入力または入出力ポート
-to →クロック、出力または入出力ポート
-through →ピン、ポート 、またはネット

入力または出力ロジックの制約

set_max_delay/set_min_delayコマンドは、入力または出力ロジックの制約に使用されません。
入力ポートと初段のロジック間は、set_input_delayコマンドを使用します。
終段のロジックと出力ポート間は、set_output_delayコマンドを使用します。
入力/出力ポートの間の組合せパス(in-to-out)ではset_max_delay/set_min_delayコマンドを使用します。

ここまでが基本的なタイミング設定になります。

XDCファイルは、VivadoのconstraintからGUI上で設定する場合、もしくはテキストファイルに直接記載することが可能です。
拡張子は、xdcとなります。

以上となります。

次回は、バススキュー制約、優先順位、物理的制約について解説します。

最後までご覧いただきましてありがとうございました!

今回説明した内容でのご不明な点や、FPGA設計などでお困りのことなどがありましたら、下記よりお問い合わせください。


お問い合わせはこちら