由於 Intel® Quartus® Prime 軟體 16.1 的問題,Arria 10 PCIe 硬 IP Gen3 的產生頻率tx_bonding_clocks[0]是錯誤的。
原因是 altera_pcie_express.sdc 缺少一些限制。
若要解決此問題,請在 altera_pcie_express.sdc結尾新增下列 sdc 指令。
proc skp_sdc_puts {msg {channelId stdout\\ { {
將$channelId放入「altera_pcie_a10_skp.sdc >> $msg」
}
proc parent_of_clock {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 = { ;# 這就是我們要找的階層結構。
# 瞭解母公司的全名。
設定父級 [加入 [lrange [分割 [query_collection $matched_clock_collection] {|[] 0 {end-1\] {|[]
skp_sdc_puts「家長發現:$parent」
skp_sdc_puts「********_***
skp_sdc_puts「************ 完成搜尋,結果:$parent******************。」
skp_sdc_puts「********_***
退回$parent
\ elseif { $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「********_***
返回
{ 其他 {;# 上一層樓層級。
附錄家長 {*|®
incr 嘗試
}
}
skp_sdc_puts:「錯誤:無法在 $MAX_ATTEMPTS 嘗試中找到$clock_name 的母公司!
skp_sdc_puts「********_***
skp_sdc_puts「****************** 完成搜尋時,錯誤是********
skp_sdc_puts「********_***
返回
}
derive_pll_clocks -create_base_clocks;在撥打電話之前,必須先呼叫derive_pll_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 \
-來源「$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_20nm_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_20nm_hssi_8g_rx_pcs|sta_rx_clk2_by2_1「;# 目標
create_generated_clock -multiply_by 1-divide_by 1 \
-來源「$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_20nm_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_20nm_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 \
-來源「$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 [清單]
適用于 {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 \
-來源「$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_20nm_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_20nm_hssi_8g_rx_pcs|sta_rx_clk2_by4_1」;# 目標
create_generated_clock -multiply_by 1 \
-來源「$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_20nm_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_20nm_hssi_8g_rx_pcs|sta_rx_clk2_by4_1_out
set_clock_groups ──專屬
-群組「$prefix|tx_bonding_clocks[0]」\
-群組「$prefix|g_xcvr_native_insts[$i]|rx_clkout」
set_clock_groups ──專屬
-群組「$prefix|tx_bonding_clocks[0]」\
-群組「$prefix|rx_pcs_clk_div_by_4[$i]」
}
此問題已從 Intel® Quartus® Prime 標準版軟體版本 17.1 開始修復。