Do vấn đề với phần mềm Intel® Quartus® Prime 16.1, đồng hồ được tạo ra tx_bonding_clocks[0] của thiết kế Arria 10 PCIe Hard IP Gen3 là sai.
Lý do là altera_pcie_express.sdc có một số hạn chế còn thiếu.
Để giải quyết vấn đề này, vui lòng thêm các lệnh sdc sau vào cuối altera_pcie_express.sdc.
proc skp_sdc_puts {msg {channelId stdout}} {
đặt "$channelId"altera_pcie_a10_skp.sdc >> $msg"
}
proc parent_of_clock {clock_name {MAX_ATTEMPTS 100}} {
skp_sdc_puts "*
skp_sdc_puts "****** Tìm kiếm hệ thống phân cấp của $clock_name **
skp_sdc_puts "*
nỗ lực set 0
đặt cha mẹ {}
trong khi { $attempts < $MAX_ATTEMPTS } {
skp_sdc_puts "Tìm kiếm đồng hồ khớp với \"$parent$clock_name\"..."
đặt matched_clock_collection [get_clocks -nowarn $parent $clock_name] ;# Hãy thử ký tự đại diện này.
đặt num_matched_clocks [get_collection_size $matched_clock_collection]
nếu { $num_matched_clocks == 1 } { ;# Đây là hệ thống phân cấp mà chúng tôi đang tìm kiếm.
# Tìm hiểu tên đầy đủ của phụ huynh.
đặt cha mẹ [tham gia [lrange [split [query_collection $matched_clock_collection] {|}] 0 {end-1}] {|}]
skp_sdc_puts "Phụ huynh đã tìm thấy : $parent"
skp_sdc_puts "*
skp_sdc_puts "***$parent*
skp_sdc_puts "*
trả lại $parent
} elseif { $num_matched_clocks > 1 } { ;# Nhiều đồng hồ có cùng tên - điều này không nên xảy ra.
skp_sdc_puts "Lỗi: Nhiều đồng hồ khớp với $parent$clock_name " {stderr}
skp_sdc_puts "Lỗi: Đồng hồ phù hợp là:" {stderr}
skp_sdc_puts "Lỗi: [query_collection $matched_clock_collection -report_format]" {stderr}
skp_sdc_puts "*
skp_sdc_puts "***
skp_sdc_puts "*
Trở lại
} khác { ;# Tăng lên một cấp độ hệ thống phân cấp.
phụ huynh phụ thêm {*|}
nỗ lực incr
}
}
skp_sdc_puts "Lỗi: Không thể tìm thấy phụ huynh của $clock_name trong nỗ lực $MAX_ATTEMPTS?"
skp_sdc_puts "*
skp_sdc_puts "***
skp_sdc_puts "*
Trở lại
}
derive_pll_clocks -create_base_clocks;# derive_pll_clocks cần được gọi trước khi gọi cho parent_of_clock
derive_clock_uncertainty;# để tạo ra hệ thống phân cấp thích hợp.
đặt tiền tố [parent_of_clock {tx_serial_clk}]
cho {set i 0} {$i != 8} {incr i} {
create_generated_clock -divide_by 1 \
nguồn "$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" \
-tên "$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" ;# mục tiêu
create_generated_clock -multiply_by 1 -divide_by 1 \
nguồn "$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" \
-tên "$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" ;# mục tiêu
}
remove_clock "$prefix|tx_bonding_clocks[0]"
create_generated_clock -multiply_by 1 -divide_by 10 \
Nguồn "$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" \
-Tên "$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
đặt rx_clkouts [danh sách]
cho {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 \
nguồn "$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]" \
-tên "$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" ;# mục tiêu
create_generated_clock -multiply_by 1 \
nguồn "$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]" \
-Tên "$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 -exclusive \
-nhóm "$prefix|tx_bonding_clocks[0]" \
-nhóm "$prefix|g_xcvr_native_insts[$i]|rx_clkout"
set_clock_groups -exclusive \
-nhóm "$prefix|tx_bonding_clocks[0]" \
-nhóm "$prefix|rx_pcs_clk_div_by_4[$i]"
}
Sự cố này được khắc phục bắt đầu với phiên Intel® Quartus® Prime Phiên bản Phần mềm Tiêu chuẩn phiên bản 17.1.