文章 ID: 000080391 内容类型: 产品信息和文件 上次审核日期: 2021 年 08 月 28 日

如何补偿 Arria 10 PLL 参考时钟的 PLL 级联或非专用时钟路径的抖动?

环境

  • 英特尔® Quartus® Prime Pro Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    说明

    如果您是从 PLL 输出连接 PLL 参考时钟,或者在 Arria® 10 设计中连接 PLL 参考时钟,则会引入额外的抖动。这种抖动可以通过在设计中的下游 PLL 输出时钟添加 100ps 时钟不确定性约束来获得补偿。

    有关应用时钟不确定性限制的详细信息,请参阅以下文档。

    Arria® 10 PLL Cascading 或非专用时钟路径变通方法指南

    在将设计升级到 Quartus Prime 软件 v17.1 或更高版本时,需要修改之前添加的限制:

    a) 如果现有的时钟不确定性仅来自 derive_clock_uncertainty set_clock_uncertainty-add-to -从0.1

    b) 如果当前的时钟不确定性来自derive_clock_uncertainty额外的"set_clock_uncertainty-add"v17.0:set_clock_uncertainty -add - 到 - 来自 0.1] v17.1 或更高版本:set_clock_uncertainty -add -to -来自

    c) 如果derive_clock_uncertainty被"set_clock_uncertainty"(无-add)覆盖;无变化,需要保持现有限制set_clock_uncertainty -到 -从 [expr 0.1]

     

    如果受影响的下游 PLL Arria 10 PHYLite IOPLL,请按照以下步骤详细了解应用时钟不确定性限制的细节。

    从 Quartus Prime 软件版本 17.0 开始,Arria 10 Altera PHYLite IP 参数编辑器中不再可见"使用内核 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=开启

    当从 PLL 输出或非专用时钟引脚连接 PLL 参考时钟时,将引入额外的抖动。

    对于使用 Arria 10 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"} {

    设置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

    }

    } 其他 {

    设置additional_jitter 0.100

    }

    2. 在写入 FIFO 时钟上增加时钟的不确定性:

    设置i_wf_clock 0

    foreach_in_collection wf_clock $write_fifo_clk_neg {

    设置vco_clock_id [phy_altera_phylite_arch_nf_171_flagyzi_get_vco_clk_id $wf_clock var]

    如果 {$vco_clock_id == -1} {

    post_message型critical_warning"找不到 VCO 时钟"

    } 其他 {

    设置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] \

    -名"${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)]

    -第 180 相 ]

    }

    incr i_wf_clock

    }

    #new限制:

    如果 {$additional_jitter != 0} {

    set_clock_uncertainty -to [get_clocks ${inst}_wf_clk_grp_*] - 添加 $additional_抖动

    }

    3. 在写入路径上增加更多时钟不确定性:

    如果 {[llength $write_clocks]>0} {

    # 我们不需要derive_clock_uncertainty数字,因为我们已将 FLS JITTER 包含在 set_output_delay

    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_jitter ]]

    }

    4. read_clocks无变化

    如果 {[llength $read_clocks]>0} {

    # 我们不需要derive_clock_uncertainty数字,因为我们已将 FLS JITTER 包含在set_input_delay

    set_clock_uncertainty -到 [get_clocks $read_clocks] 0.0

    }

    5. 增加 c2p/p2c 传输的时钟不确定性 (phy_clk usr_clock)

    如果 {$i_phy_clock > $same_tile_index} {

    # C2P/P2C,其中外设块 != CPA 区块。

    # 对于这些传输,SDC 明确覆盖时钟不确定性值。

    因此,在超限时我们不得使用"添加"选项。

    设置add_to_derived"

    设置c2p_su [expr {$p 2c_c2p_multi_tile_clock_uncertainty [lindex $periphery_overconstraints 0] [lindex $periphery_clock_uncertainty 0]} additional_jitter]

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

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

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

    } 其他 {

    # C2P/P2C,其中外设块 == CPA 块

    # 对于这些传输,安全地使用-添加选项,因为我们依赖

    derive_clock_uncertainty为基本值。

    设置add_to_derived"-add"

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

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

    设置p2c_su [expr [lindex $periphery_overconstraints 2] [lindex $periphery_clock_uncertainty 2] additional_jitter/2]

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

    }

    6. 在内核传输(usr_clock/额外内核时钟usr_clock/额外内核时钟)内增加时钟不确定性

    设置c2c_same_su [expr [lindex $core_overconstraints 0] [lindex $core_clock_uncertainty 0] additional_jitter]

    设置c2c_same_h [expr [lindex $core_overconstraints 1] [lindex $core_clock_uncertainty 1]]

    设置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 -从 $src_core_clock_local -到 $dst_core_clock_local -setup -add $c 2c_same_su

    set_clock_uncertainty -从 $src_core_clock_local -到 $dst_core_clock_local -hold -enable_same_physical_edge -add $c 2c_same_h

    } 其他 {

    # 不同内核时钟网络之间的传输

    set_clock_uncertainty -从 $src_core_clock_local -到 $dst_core_clock_local -setup -add $c 2c_diff_su

    set_clock_uncertainty -从 $src_core_clock_local -到 $dst_core_clock_local -hold -add $c 2c_diff_h

    }

    }

    }

    }

    }

    7. 对于涉及user_created_clock和 PHYLite 输出时钟的用户逻辑,用户需要在用户 sdc 文件中的时钟传输路径上添加额外的 100ps 时钟不确定性。

    8. 报告 SDC 并查看 SDC 分配>Set 时钟不确定性报告,确保在受影响的时钟传输路径中添加额外的 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

    本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。