はじめに
この記事では PLL に関連するクロック制約例を紹介します。
サンプル回路
下記のようなサンプル回路を例に PLL のタイミング制約方法をご紹介します。
1. 入力クロックの制約
SDC ファイルに下記の制約を追加します。
制約に不慣れな人でも、GUI で入力できます。1-1.の項をチェックしてくださいね。
1-1. 入力クロックの制約(GUI使用)
(1) Tools メニュー ⇒ Timing Analyzer(もしくは アイコン)でTiming Analyzer を開き、Tasks ペインからタイミング解析用の Netlist を作成します。
(2) SDC ファイルの空白領域で右クリックし、Create Clock の GUI を開きます。
(3) 下記のように設定項目を入力します。
(4) Insert をクリックすると SDC ファイルに「SDC Command」の制約が入ります。
2. PLL の出力クロック制約
SDC 制約はコレ↓ だけです。
つまり、このProject 全体のクロック制約は下記の2行だけで完了です。
同等の create_generated_clock 制約に変換すると下記のようになります。
PLLの使い方によっては create_generated_clock しか使えない場合がありますので、Report でしっかり確認しましょう!
3. Report の確認
設定した SDC が正しいかどうかを Report で確認します。ここでは、2種類の Report の確認方法を紹介します。
3-1. Compilation Report
Timing Analyzer ⇒ Clock の Report で PLL の制約がかかっていることを確認します。
3-2. Report Clocks
Tools メニュー ⇒ Timing Analyzer(もしくは アイコン)でTiming Analyzer を開き、Tasks ペインからタイミング解析用の Netlist を作成します。
Appendix ~SDC 制約の説明~
①create_clock
説明:Baseとなるクロックに使用する
Options
- -add: 既に制約されているnodeに制約を追加するときに使用
- -name <clock_name>: クロック制約の名前
- -period <value>: クロック周波数または周期
- -waveform <edge_list>: エッジのリスト
- <targets>: ターゲットとなるCollectionやList
②derive_pll_clocks
説明:PLLのクロックを自動生成する(Quartus® Prime専用の拡張コマンド)
Options
- -create_base_clocks: PLLの入力クロックの制約も自動生成
- -use_tan_name: ネット名をクロック名として使用する
③ create_generate_clock
説明:Base Clockから派生するクロック
Options
- -add: 既に制約があるtargetに追加制約を入れる場合
- -divide_by <factor>: 分周数
- -duty_cycle <percent>: Duty Cycle(%)
- -edge_shift <shift_list>: シフトするエッジのList
- -edges <edge_list>: エッジの値のList
- -invert: クロックの反転
- -master_clock <clock>: source nodeのクロック定義を指定
- -multiply_by <factor>: 逓倍数
- -name <clock_name>: クロック名
- -offset <time>: オフセット(時間)
- -phase <degrees>: Phase Shift(degree)
- -source <clock_source>: 派生クロックのsource node
- <targets>: cllectionまたはtarget node