ID บทความ: 000087027 ประเภทข้อมูล: ข้อมูลผลิตภัณฑ์และเอกสารประกอบ การตรวจสอบครั้งล่าสุด: 15/11/2017

ฉันจะชดเชยค่า Jitter ของ PLL cascading หรือพาธนาฬิกาที่ไม่ใช่การแยกสําหรับนาฬิกาอ้างอิง Arria 10 PLL ได้อย่างไร

สิ่งแวดล้อม

  • Intel® Quartus® Prime Pro Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    คำอธิบาย

    หากคุณกําลังเชื่อมต่อสัญญาณนาฬิกาอ้างอิง PLL จากเอาต์พุต PLL หรือพินนาฬิกาแบบไม่เฉพาะในการออกแบบ Arria® 10 ของคุณ จะมีการแนะนําค่า jitter เพิ่มเติม ค่า jitter นี้สามารถชดเชยได้ด้วยการเพิ่มข้อจํากัดความไม่แน่นอนของนาฬิกา 100ps ที่นาฬิกาเอาต์พุตของ PLL ระดับล่างในการออกแบบ

    โปรดดูเอกสารต่อไปนี้สําหรับรายละเอียดการใช้ข้อจํากัดความไม่แน่นอนของนาฬิกา

    แนวทางการแก้ไขปัญหาเส้นทางนาฬิกา Arria®10 PLL หรือเส้นทางนาฬิกาแบบไม่เฉพาะ 

    เมื่ออัพเกรดการออกแบบเป็นซอฟต์แวร์ Quartus Prime v17.1 หรือใหม่กว่า จําเป็นต้องแก้ไขข้อจํากัดที่เพิ่มก่อนหน้านี้:

    A) หากความไม่แน่นอนของสัญญาณนาฬิกาที่มีอยู่มีเฉพาะจากderive_clock_uncertainty set_clock_uncertainty -add -to -from 0.1

    ข) หากความไม่แน่นอนของนาฬิกาที่มีอยู่มาจากderive_clock_uncertainty "set_clock_uncertainty -add" v17.0 เพิ่มเติม: 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 -จาก [expr 0.1]

     

    หาก PLL ระดับล่างที่ได้รับผลกระทบArria 10 PHYLite IOPLL ให้ทําตามขั้นตอนต่อไปนี้เพื่อดูรายละเอียดการใช้ข้อจํากัดความไม่แน่นอนของนาฬิกา

    ตั้งแต่ซอฟต์แวร์ Quartus Prime เวอร์ชั่น 17.0 "ใช้การเชื่อมต่อนาฬิกาอ้างอิงคอร์ PLL" จะไม่สามารถมองเห็นได้ใน Arria 10 Alteraตัวแก้ไขพารามิเตอร์ PHYLite IP วิธีที่แนะนําคือการใช้พินนาฬิกาเฉพาะเพื่อเชื่อมต่อกับนาฬิกาอ้างอิง PHYLite IOPLL หากการออกแบบของคุณจําเป็นต้องใช้คุณสมบัตินี้ โปรดอ่านแนวทางต่อไปนี้อย่างถี่ถ้วนและปฏิบัติตาม

    ในการเปิดใช้งาน "ใช้การเชื่อมต่อนาฬิกาอ้างอิง Core PLL" (ซอฟต์แวร์ Quartus Prime เวอร์ชั่น 17.0 และใหม่กว่า) โปรดเพิ่ม INI ด้านล่างในไฟล์ quartus.ini

    ip_altera_phylite_en_pll_core_ref_ck = เปิด

    a2t_allow_cascaded_pll_in_cpa_compensation=on

    เมื่อเชื่อมต่อสัญญาณนาฬิกาอ้างอิง PLL จากเอาต์พุต PLL หรือพินนาฬิกาแบบไม่เฉพาะ จะมีการแนะนําค่า jitter เพิ่มเติม

    สําหรับการออกแบบที่ใช้งานกับ Arria 10 Altera PHYLite เวอร์ชั่น 17.0 และก่อนหน้า ค่า jitter นี้สามารถชดเชยได้ด้วยการเพิ่มข้อจํากัดความไม่แน่นอนของนาฬิกา 100ps ที่สัญญาณนาฬิกาขาออกของ PLL ระดับล่างในการออกแบบ

    เพิ่มข้อจํากัดต่อไปนี้สําหรับความไม่แน่นอนของนาฬิกาในไฟล์ PHYLite ที่สร้างขึ้น SDC สําหรับซอฟต์แวร์ Quartus Prime เวอร์ชั่น 17.0 และก่อนหน้า คุณจะต้องทําการเปลี่ยนแปลงต่อไปนี้ทุกครั้งที่คุณสร้าง IP PHYLite ขึ้นใหม่Altera

    1. กําหนดค่า 100ps ให้กับค่า jitter เพิ่มเติมของชื่อตัวแปร

    ตั้งค่า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 -type 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 ]

    }

    i_wf_clock incr

    }

    ข้อจํากัด#new:

    ถ้า {$additional_jitter != 0} {

    set_clock_uncertainty -ไปยัง [get_clocks ${inst}_wf_clk_grp_*] -เพิ่ม $additional_jitter

    }

    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 ที่ไทล์ Periphery != ไทล์ CPA

    # สําหรับการถ่ายโอน SDC เหล่านี้จะแทนที่ค่าความไม่แน่นอนของนาฬิกาอย่างชัดแจ้ง

    # ดังนั้นเมื่อการจํากัดมากเกินไปเราต้องไม่ใช้ตัวเลือก "เพิ่ม"

    ตั้งค่า add_to_derived ""

    ตั้งค่าc2p_su [expr {$p 2c_c2p_multi_tile_clock_ความไม่แน่นอน [lindex $periphery_overconstraints 0] [lindex $periphery_clock_uncertainty 0]} additional_jitter]

    ตั้งค่าc2p_h [expr {$p 2c_c2p_multi_tile_clock_ความไม่แน่นอน [lindex $periphery_overconstraints 1] [lindex $periphery_clock_uncertainty 1]} additional_jitter]

    ตั้งค่าp2c_su [expr {$p 2c_c2p_multi_tile_clock_ความไม่แน่นอน [lindex $periphery_overconstraints 2] [lindex $periphery_clock_uncertainty 2]} additional_jitter]

    ตั้งค่าp2c_h [expr {$p 2c_c2p_multi_tile_clock_ความไม่แน่นอน [lindex $periphery_overconstraints 3] [lindex $periphery_clock_uncertainty 3]} additional_jitter]

    } อื่นๆ {

    # C2P/P2C ที่ periphery tile == ไทล์ CPA

    # สําหรับการถ่ายโอนเหล่านี้ มีความปลอดภัยในการใช้ตัวเลือก -add เนื่องจากเราพึ่งพา

    # 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/extra core clock usr_clock/extra core 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 -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

    } อื่นๆ {

    # การถ่ายโอนระหว่างเครือข่ายนาฬิกาคอร์ที่แตกต่างกัน

    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 ผู้ใช้จะต้องเพิ่มความไม่แน่นอนของนาฬิกา 100ps บนพาธการถ่ายโอนสัญญาณนาฬิกาในไฟล์ SDC ของผู้ใช้

    8. รายงาน SDC และตรวจสอบในรายงานความไม่แน่นอนของนาฬิกา SDC >Set ตรวจสอบให้แน่ใจว่ามีการเพิ่ม 100ps เพิ่มเติมเข้าไปในเส้นทางการถ่ายโอนสัญญาณนาฬิกาที่ได้รับผลกระทบ

    9. Retime หรือคอมไพล์การออกแบบใหม่และตรวจสอบให้แน่ใจว่ามีการปิดเวลา

    10. ทําการทดสอบฮาร์ดแวร์อย่างเข้มงวดเพื่อให้แน่ใจว่าการออกแบบทํางานอย่างถูกต้องก่อนที่จะเข้าสู่การผลิต

    เมื่ออัพเกรดการออกแบบเป็นซอฟต์แวร์ Quartus Prime v17.1 หรือใหม่กว่า:

    A) เปิดใช้เครื่องมืออัปเกรด IP เพื่ออัปเกรด Arria 10 Altera PHYLite IP เป็น v17.1

    ข) ไฟล์ PHYLite SDC ที่สร้างขึ้นจะเพิ่มความไม่แน่นอนของสัญญาณนาฬิกาที่จําเป็นทั้งหมดเมื่อใช้นาฬิกาอ้างอิง Core PLL

    C) ความไม่แน่นอนของนาฬิกา 100ps เพิ่มเติมที่เพิ่มเข้ามาสําหรับพาธลอจิกผู้ใช้ ซึ่งเกี่ยวข้องกับuser_created_clock และ PHYLite Output Clock ก่อนหน้านี้จะต้องคงอยู่ในไฟล์ SDC ของผู้ใช้

    D) ทําการคอมไพล์ทั้งหมดเกี่ยวกับการออกแบบและตรวจสอบการปิดเวลา

    ผลิตภัณฑ์ที่เกี่ยวข้อง

    บทความนี้จะนำไปใช้กับ 1 ผลิตภัณฑ์

    Intel® Arria® 10 FPGA และ SoC FPGA

    เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทำขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรอ้างอิงว่าสมบูรณ์หรือถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคำแปล เวอร์ชันภาษาอังกฤษจะมีผลเหนือกว่าและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้