記事 ID: 000080391 コンテンツタイプ: 製品情報 & ドキュメント 最終改訂日: 2021/08/28

Arria 10 PLL リファレンス・クロックの PLL カスケードまたは非専用クロックパスのジッターを補償する方法

環境

  • インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    詳細

    PLL 出力または非専用クロックピンから PLL リファレンス・クロックをArria® 10 デザインに接続している場合、追加のジッターが生まれます。このジッターは、デザインのダウンストリーム PLL の出力クロックに 100ps クロック不確定性制約を追加することで補償できます。

    クロック不確実性制約の適用の詳細については、次のドキュメントを参照してください。

    Arria® 10 PLL カスケードまたは非専用クロックパス回避策ガイドライン

    インテル® Quartus® Prime 開発ソフトウェア v17.1 以降にデザインをアップグレードする場合、以前に追加した制約を改訂する必要があります。

    a) 既存のクロック不確定要素がderive_clock_uncertainty set_clock_uncertainty -add -to ( 0.1

    b) 既存のクロック不確定要素が追加の「set_clock_uncertainty -add」v17.0 derive_clock_uncertaintyから来ている場合: set_clock_uncertainty -add -to -from > [expr 0.1] v17.1 以降: set_clock_uncertainty -add -to -from

    c) derive_clock_uncertaintyが「set_clock_uncertainty」(-add なし) - 変更しない場合、既存の制約set_clock_uncertaintyを維持する必要があります-to -from [expr 0.1]

     

    影響を受けるダウンストリーム PLL が 10 PHYLite IOPLL Arria場合、クロック不確実性制約の適用の詳細については、以下の手順を参照してください。

    Quartus® Prime 開発ソフトウェア・バージョン 17.0 以降では、Arria 10 Altera PHYLite IP パラメーター・エディターに「Use core PLL リファレンス・クロック接続」が表示されなくなりました。推奨される方法は、専用クロックピンを使用して PHYLite IOPLL リファレンス・クロックに接続することです。デザインでこの機能を使用する必要がある場合は、以下のガイドラインをよくお読みになり、それを遵守してください。

    「コア PLL リファレンス・クロック接続の使用」(Quartus® Prime 開発ソフトウェア・バージョン 17.0 以降) を有効にするには、quartus.ini ファイルに以下の INI を追加してください。

    ip_altera_phylite_en_pll_core_ref_ck = オン

    a2t_allow_cascaded_pll_in_cpa_compensation=on

    PLL 出力または非専用クロックピンから PLL リファレンス・クロックを接続すると、ジッターが追加されます。

    10 Arria Altera PHYLite バージョン 17.0 以前で実装されたデザインの場合、このジッターは、デザインのダウンストリーム PLL の出力クロックに 100ps クロック不確実性制約を追加することで補償できます。

    インテル® Quartus® Prime 開発ソフトウェア・バージョン 17.0 以前の PHYLite 生成 SDC ファイルに、クロックの不確定性に関する次の制約を追加します。Altera PHYLite IP を再生成するたびに、以下の変更を行う必要があります。

    1. 追加のジッターを変数名に 100ps 値を割り当てます。

    additional_jitter 0.000 に設定

    # まず、リファレンス・クロックが既に作成されているかどうかを確認します (つまり、リファレンス・クロックの共有)

    {$var(PLL_USE_CORE_REF_CLK) == "false"} {

    set ref_clock_exists [ phy_altera_phylite_arch_nf_171_flagyzi_does_ref_clk_exist $pins(pll_ref_clock)]

    { $ref_clock_exists == 0 } {

    # これは、PLL がコア内の他のクロックを引き出すために使用する基準クロックです。

    create_clock -period $ref_period -waveform [ list 0 $ref_half_period ] $pins(pll_ref_clock) -add -name ${inst}_ref_clock

    }

    } else {

    additional_jitter 0.100 に設定

    }

    2. ライト FIFO クロックにクロック不確定要素を追加します。

    i_wf_clock 0 に設定

    foreach_in_collection wf_clock $write_fifo_clk_neg {

    set vco_clock_id [phy_altera_phylite_arch_nf_171_flagyzi_get_vco_clk_id $wf_clock var]

    {$vco_clock_id == -1} {

    post_message -type critical_warning 「VCO クロックの検索に失敗しました」

    } else {

    set local_wf_clk_grp_${i_grp_idx}_${i_wf_clock} [ phy_altera_phylite_arch_nf_171_flagyzi_get_or_add_generated_clock \

    -target [get_node_info -name $wf_clock] \

    -name "${inst}_wf_clk_grp_${i_grp_idx}_${i_wf_clock}_neg」 \

    -source [get_node_info -name $vco_clock_id] \

    -multiply_by 1 \

    -divide_by [expr $var(PLL_VCO_TO_MEM_CLK_FREQ_RATIO)] \

    -phase 180 ]

    }

    incr i_wf_clock

    }

    #new制約:

    {$additional_ジッター != 0} {

    set_clock_uncertainty -to [get_clocks ${inst}_wf_clk_grp_*] -add $additional_ジッター

    }

    3. 書き込みパスにクロック不確定要素を追加します。

    {[llength $write_clocks]>0} {

    # FLS ジッターがset_output_delayに含まれているので、derive_clock_uncertainty番号は必要ありません。

    set_clock_uncertainty -to [get_clocks $write_clocks] [phy_altera_phylite_arch_nf_170_zul23qq_round_3dp [expr 0.5*($var(WR_SSO) $var(WR_JITTER_SCALED)) $additional_ジッター]]

    }

    4. read_clocksに変更はありません

    {[llength $read_clocks]>0} {

    # FLS ジッターがset_input_delayに含まれているので、derive_clock_uncertainty番号は必要ありません

    set_clock_uncertainty -to [get_clocks $read_clocks] 0.0

    }

    5. c2p/p2c 転送 (phy_clk usr_clock) にクロック不確実性を追加

    {$i_phy_clock > $same_tile_index} {

    #C2P/P2C (周辺タイルが != FPGA タイル)。

    # これらの転送では、SDC はクロック不確定値を明示的に上書きします。

    # そのため、制約を超える場合は、「-add」オプションを使用しないでください。

    「」add_to_derived設定

    設定c2p_su [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 0] [lindex $periphery_clock_uncertainty 0]} additional_jitter

    set c2p_h [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 1] [lindex $periphery_clock_uncertainty 1]} additional_jitter

    set p2c_su [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 2] [lindex $periphery_clock_uncertainty 2]} additional_jitter]

    set p2c_h [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 3] [lindex $periphery_clock_uncertainty 3]} additional_jitter]

    } else {

    #C2P/P2C (周辺タイル = = FPGA タイル)

    # これらの転送では、依存しているため-add オプションを使用しても安全です

    # base 値のderive_clock_uncertainty。

    「-add」add_to_derived設定

    set c2p_su [expr [lindex $periphery_overconstraints 0] [lindex $periphery_clock_uncertainty 0] additional_jitter/2]

    set c2p_h [expr [lindex $periphery_overconstraints 1] [lindex $periphery_clock_uncertainty 1] additional_jitter/2]

    set p2c_su [expr [lindex $periphery_overconstraints 2] [lindex $periphery_clock_uncertainty 2] additional_jitter/2]

    set p2c_h [expr [lindex $periphery_overconstraints 3] [lindex $periphery_clock_uncertainty 3] additional_jitter/2]

    }

    6. コア転送にクロック不確実性を追加 (usr_clock / 追加コアクロックusr_clock / 追加コアクロック)

    set c2c_same_su [expr [lindex $core_overconstraints 0] [lindex $core_clock_uncertainty 0] additional_jitter]

    set c2c_same_h [expr [lindex $core_overconstraints 1] [lindex $core_clock_uncertainty 1]]

    set c2c_diff_su [expr [lindex $core_overconstraints 2] [lindex $core_clock_uncertainty 2] additional_jitter]

    設定c2c_diff_h [expr [lindex $core_overconstraints 3] [lindex $core_clock_uncertainty 3] additional_jitter]

    foreach src_core_clock_local $core_clocks_local {

    {$src_core_clock_local != ""} {

    foreach dst_core_clock_local $core_clocks_local {

    {$dst_core_clock_local != ""} {

    {$src_core_clock_local == $dst_core_clock_local} {

    # 同じクロック・ネットワーク転送

    set_clock_uncertainty -from $src_core_clock_local -to $dst_core_clock_local -setup -add $c 2c_same_su

    set_clock_uncertainty -from $src_core_clock_local -to $dst_core_clock_local -hold -enable_same_physical_edge -add $c 2c_same_h

    } else {

    # 異なるコア・クロック・ネットワーク間の転送

    set_clock_uncertainty -from $src_core_clock_local -to $dst_core_clock_local -setup -add $c 2c_diff_su

    set_clock_uncertainty -from $src_core_clock_local -to $dst_core_clock_local -hold -add $c 2c_diff_h

    }

    }

    }

    }

    }

    7. user_created_clockおよび PHYLite 出力クロックを含むユーザーロジックの場合、ユーザーはユーザー SDC ファイルにそのクロック転送パスに 100ps クロックの不確定要素を追加する必要があります。

    8. SDC を報告し、SDC 割り当て>Set Clock Uncertainty レポートを確認し、影響を受けるクロック転送パスに 100ps が追加されていることを確認します。

    9. デザインのリタイムまたは再コンパイルを行い、タイミング・クロージャーを確実に行う

    10. 厳格なハードウェア・テストを実施し、生産に入る前に設計が適切に機能していることを確認します。

    インテル® Quartus® Prime 開発ソフトウェア v17.1 以降にデザインをアップグレードする場合:

    a) IP アップグレード・ツールを起動して、Arria 10 Altera PHYLite IP を v17.1 にアップグレード

    b) コア PLL リファレンス・クロックを使用すると、生成された PHYLite SDC ファイルに必要なクロック不確定要素がすべて追加されます。

    c) 以前はuser_created_clockや PHYLite 出力クロックを含むユーザー・ロジック・パスに追加された 100ps クロックの不確定要素は、ユーザー SDC ファイルに残す必要があります。

    d) デザイン上で完全なコンパイルを実行し、タイミング・クロージャーを確認します。

    関連製品

    本記事の適用対象: 1 製品

    インテル® Arria® 10 FPGA & SoC FPGA

    このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。