ID บทความ: 000076357 ประเภทข้อมูล: การแก้ไขปัญหา การตรวจสอบครั้งล่าสุด: 23/08/2017

ทําไมจึงเกิด tx_bonding_clocks[0] ความถี่ของ Arria®10 PCIe Hard IP เจนเนอเรชั่น 3 ไม่ถูกต้อง

สิ่งแวดล้อม

  • Intel® Quartus® Prime Pro Edition
  • Intel® Arria® 10 Cyclone® 10 Hard IP สำหรับ PCI Express*
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    คำอธิบาย

    เนื่องจากปัญหากับซอฟต์แวร์ Intel® Quartus® Prime 16.1 ทําให้การออกแบบนาฬิกาที่สร้างขึ้น tx_bonding_clocks[0] ของ Arria 10 PCIe Hard IP Gen3 ไม่ถูกต้อง

    เหตุผลก็คือ altera_pcie_express.sdc มีข้อจํากัดที่ขาดหายไปบางส่วน

     

    ความละเอียด

    การแก้ไขปัญหานี้ โปรดเพิ่มคําสั่ง SDC ต่อไปนี้ที่ตอนท้ายของ altera_pcie_express.sdc

    proc skp_sdc_puts {msg {channelId stdout}} {
    ใส่ "altera_pcie_a10_skp.sdc >> $msg" $channelId
    }

    parent_of_clock proc {clock_name {MAX_ATTEMPTS 100}} {
    skp_sdc_puts "**
    skp_sdc_puts "***** การค้นหาตามลําดับชั้นของ $clock_name ***
    skp_sdc_puts "**

    ตั้งค่าความพยายาม 0
    ตั้งค่าพาเรนต์ {}

    ในขณะที่ { $attempts < $MAX_ATTEMPTS } {
    skp_sdc_puts "การค้นหานาฬิกาที่ตรงกับ \"$parent$clock_name\"..."

    ตั้งค่า matched_clock_collection [get_clocks -nowarn $parent$clock_name] ;# ลองใช้สัญลักษณ์ตัวแทนนี้
    ตั้งค่า num_matched_clocks [get_collection_size $matched_clock_collection]

    หาก { $num_matched_clocks == 1 } { ;# นี่คือลําดับชั้นที่เรากําลังมองหา
    # ค้นหาชื่อเต็มของพ่อแม่
    ตั้งค่าพาเรนต์ [join [lrange [split [query_collection $matched_clock_collection] {|}] 0 {end-1}] {|}]

    skp_sdc_puts "พบพ่อแม่ : $parent"
    skp_sdc_puts "**
    การค้นหา skp_sdc_puts "****** การค้นหาให้เสร็จสิ้นด้วยผลลัพธ์ : $parent **
    skp_sdc_puts "**

    $parent ส่งคืน
    } อย่างอื่น { $num_matched_clocks > 1 } { ;# หลายนาฬิกาที่มีชื่อเดียวกัน - สิ่งนี้ไม่ควรเกิดขึ้น
    skp_sdc_puts "ข้อผิดพลาด: มีนาฬิกาหลายนาฬิกาตรงกัน$parent$clock_name !" {stderr}
    skp_sdc_puts "ข้อผิดพลาด: นาฬิกาที่ตรงกันคือ:" {stderr}
    skp_sdc_puts "ข้อผิดพลาด: [query_collection $matched_clock_collection -report_format]" {stderr}
    skp_sdc_puts "**
    skp_sdc_puts "*** เสร็จสิ้นการค้นหาด้วยข้อผิดพลาด ***
    skp_sdc_puts "**

    กลับ
    } อื่นๆ { ;# ไปที่ลําดับชั้นขึ้นหนึ่งระดับ
    ผนวกพาเรนต์ {*|}
    การพยายามประยุกต
    }
    }

    skp_sdc_puts "ข้อผิดพลาด: ไม่พบพาเรนต์ของ $clock_name ใน $MAX_ATTEMPTS พยายาม!"
    skp_sdc_puts "**
    skp_sdc_puts "*** เสร็จสิ้นการค้นหาด้วยข้อผิดพลาด ***
    skp_sdc_puts "**

    กลับ
    }


    ต้องโทรติดต่อ derive_pll_clocks derive_pll_clocks -create_base_clocks ;# ก่อนโทรติดต่อ parent_of_clock
    derive_clock_uncertainty ;# เพื่อสร้างลําดับชั้นที่เหมาะสม


    ตั้งค่าคํานําหน้า [parent_of_clock {tx_serial_clk}]


    สําหรับ {set i 0} {$i != 8} {incr i} {
    create_generated_clock -divide_by 1 \
    -source "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_xcvr.g_phy_g3x8.phy_g3x8|phy_g3x8|g_xcvr_native_insts[$i].twentynm_xcvr_native_inst|twentynm_xcvr_native_inst|inst_twentynm_pcs|gen_twentynm_hssi_8g_rx_pcs.inst_twentynm_hssi_8g_rx_pcs|byte_deserializer_pcs_clk_div_by_2_txclk_reg" \
    -ชื่อ "$prefix|rx_pcs_clk_div_by_4[$i]" \
    "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_xcvr.g_phy_g3x8.phy_g3x8|phy_g3x8|g_xcvr_native_insts[$i].twentynm_xcvr_native_inst|twentynm_xcvr_native_inst|inst_twentynm_pcs|gen_twentynm_hssi_8g_rx_pcs.inst_twentynm_hssi_8g_rx_pcs|sta_rx_clk2_by2_1" ;#

    create_generated_clock -multiply_by 1 -divide_by 1 \
    -source "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_xcvr.g_phy_g3x8.phy_g3x8|phy_g3x8|g_xcvr_native_insts[$i].twentynm_xcvr_native_inst|twentynm_xcvr_native_inst|inst_twentynm_pcs|gen_twentynm_hssi_8g_tx_pcs.inst_twentynm_hssi_8g_tx_pcs|byte_serializer_pcs_clk_div_by_2_reg" \
    -ชื่อ "$prefix|tx_pcs_clk_div_by_4[$i]" \
    "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_xcvr.g_phy_g3x8.phy_g3x8|phy_g3x8|g_xcvr_native_insts[$i].twentynm_xcvr_native_inst|twentynm_xcvr_native_inst|inst_twentynm_pcs|gen_twentynm_hssi_8g_tx_pcs.inst_twentynm_hssi_8g_tx_pcs|sta_tx_clk2_by2_1" ;#
    }

    remove_clock "$prefix|tx_bonding_clocks[0]"
    create_generated_clock -multiply_by 1 -divide_by 10 \
    -source "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_pll.g_pll_g3n.lcpll_g3xn|lcpll_g3xn|a10_xcvr_atx_pll_inst|twentynm_hssi_pma_cgb_master_inst|clk_fpll_b" \
    -master_clock "$prefix|tx_serial_clk" \
    -ชื่อ "$prefix|tx_bonding_clocks[0]" \
    "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_pll.g_pll_g3n.lcpll_g3xn|lcpll_g3xn|a10_xcvr_atx_pll_inst|twentynm_hssi_pma_cgb_master_inst|cpulse_out_bus[0]"

    set_multicycle_path -setup -through [get_pins -compatibility_mode {*pld_rx_data*}] 0

    ตั้งค่า rx_clkouts [list]
    สําหรับ {set i 0} {$i != 8} {incr i} {
    remove_clock "$prefix|g_xcvr_native_insts[$i]|rx_clk"
    remove_clock "$prefix|g_xcvr_native_insts[$i]|rx_clkout"
     
    create_generated_clock -multiply_by 1 \
    -source "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_xcvr.g_phy_g3x8.phy_g3x8|phy_g3x8|g_xcvr_native_insts[$i].twentynm_xcvr_native_inst|twentynm_xcvr_native_inst|inst_twentynm_pcs|gen_twentynm_hssi_8g_rx_pcs.inst_twentynm_hssi_8g_rx_pcs|byte_deserializer_pcs_clk_div_by_4_txclk_reg" \
    -master_clock "$prefix|tx_bonding_clocks[0]" \
    -ชื่อ "$prefix|g_xcvr_native_insts[$i]|rx_clk" \
    "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_xcvr.g_phy_g3x8.phy_g3x8|phy_g3x8|g_xcvr_native_insts[$i].twentynm_xcvr_native_inst|twentynm_xcvr_native_inst|inst_twentynm_pcs|gen_twentynm_hssi_8g_rx_pcs.inst_twentynm_hssi_8g_rx_pcs|sta_rx_clk2_by4_1" ;#

    create_generated_clock -multiply_by 1 \
    -source "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_xcvr.g_phy_g3x8.phy_g3x8|phy_g3x8|g_xcvr_native_insts[$i].twentynm_xcvr_native_inst|twentynm_xcvr_native_inst|inst_twentynm_pcs|gen_twentynm_hssi_8g_rx_pcs.inst_twentynm_hssi_8g_rx_pcs|byte_deserializer_pld_clk_div_by_4_txclk_reg" \
    -master_clock "$prefix|tx_bonding_clocks[0]" \
    -ชื่อ "$prefix|g_xcvr_native_insts[$i]|rx_clkout" \
    "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllnphy|g_xcvr.g_phy_g3x8.phy_g3x8|phy_g3x8|g_xcvr_native_insts[$i].twentynm_xcvr_native_inst|twentynm_xcvr_native_inst|inst_twentynm_pcs|gen_twentynm_hssi_8g_rx_pcs.inst_twentynm_hssi_8g_rx_pcs|sta_rx_clk2_by4_1_out"

    set_clock_groups -พิเศษ \
    -group "$prefix|tx_bonding_clocks[0]" \
    -group "$prefix|g_xcvr_native_insts[$i]|rx_clkout"
    set_clock_groups -พิเศษ \
    -group "$prefix|tx_bonding_clocks[0]" \
    -group "$prefix|rx_pcs_clk_div_by_4[$i]"
    }

    ปัญหานี้แก้ไขแล้วเริ่มต้นด้วยซอฟต์แวร์ Intel® Quartus® Prime Standard Edition เวอร์ชั่น 17.1

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

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

    Intel® Arria® 10 GT FPGA
    Intel® Arria® 10 GX FPGA

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