Aufgrund eines Problems mit Intel® Quartus® Prime Software 16.1 ist die generierte Taktfrequenz tx_bonding_clocks[0] von Arria 10 PCIe Hard IP Gen3 Design falsch.
Der Grund dafür ist, dass die altera_pcie_express.sdc einige fehlende Einschränkungen hat.
Um dieses Problem zu umgehen, fügen Sie bitte die folgenden sdc-Befehle zum Ende von altera_pcie_express.sdc hinzu.
proc skp_sdc_puts {msg {channelId stdout}} {
setzt $channelId "altera_pcie_a10_skp.sdc >> $msg"
}
proc parent_of_clock {clock_name {MAX_ATTEMPTS 100}} {
skp_sdc_puts "-****--
skp_sdc_puts "die Suche nach der Hierarchie des $clock_Namens dietss.,-
skp_sdc_puts "-****--
Versuche 0 festlegen
übergeordnete {} festlegen
während { $attempts < $MAX_ATTEMPTS } {
skp_sdc_puts "Auf der Suche nach Taktfrequenzen, die mit \"$parent$clock_name\" übereinstimmen..."
setzen Sie matched_clock_collection [get_clocks -nowarn $parent$clock_name] ;# Versuchen Sie es mit diesem Platzhalter.
setzen Sie num_matched_clocks [get_collection_size $matched_clock_collection]
wenn { $num_matched_clocks == 1 } { ;# Dies ist die Hierarchie, nach der wir suchen.
# Finden Sie den vollständigen Namen des übergeordneten Produkts heraus.
parent [join [lrange [split [query_collection $matched_clock_collection] {|}] 0 {end-1}] {|}]
skp_sdc_puts "Elternteil gefunden: $parent"
skp_sdc_puts "-****--
skp_sdc_puts "die Suche wird mit dem Ergebnis abgeschlossen: $parent --
skp_sdc_puts "-****--
$parent zurücksende
} elseif { $num_matched_clocks > 1 } { ;# Mehrere Takte mit dem gleichen Namen – dies sollte nicht vorkommen.
skp_sdc_puts "Error: Multiple clocks match $parent$clock_name!" {stderr}
skp_sdc_puts "Error: Matched clocks are:" {stderr}
skp_sdc_puts "Error: [query_collection $matched_clock_collection -report_format]" {stderr}
skp_sdc_puts "-****--
skp_sdc_puts "die Suche wird mit einem Fehler abgeschlossen –-
skp_sdc_puts "-****--
Rückgabe
} else { ;# Gehen Sie eine Hierarchieebene hoch.
fügen Sie die übergeordnete {*|} an.
Incr-Versuche
}
}
skp_sdc_puts "Error: Unable to find the parent of $clock_name in $MAX_ATTEMPTS attempts!
skp_sdc_puts "-****--
skp_sdc_puts "die Suche wird mit einem Fehler abgeschlossen –-
skp_sdc_puts "-****--
Rückgabe
}
derive_pll_clocks -create_base_clocks ;# derive_pll_clocks muss aufgerufen werden, bevor sie parent_of_clock
derive_clock_uncertainty ;# ein, um eine korrekte Hierarchie zu generieren.
Präfix [parent_of_clock {tx_serial_clk}] festlegen
für {set i 0} {$i != 8} {incr i} {
create_generated_clock –divide_by 1 \
-quelle "$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" \
-Name "$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" ;# Ziel
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" \
-Name "$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" ;# Ziel
}
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" \
-Name "$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 festlegen [Liste]
für {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 \
-quelle "$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]" \
-Name "$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" ;# Ziel
create_generated_clock –multiply_by 1 \
-quelle "$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]" \
-name "$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 – exklusiv \
-Gruppe "$prefix|tx_bonding_clocks[0]" \
-Gruppe "$prefix|g_xcvr_native_insts[$i]|rx_clkout"
set_clock_groups – exklusiv \
-Gruppe "$prefix|tx_bonding_clocks[0]" \
-Gruppe "$prefix|rx_pcs_clk_div_by_4[$i]"
}
Dieses Problem wird ab der Intel® Quartus® Prime Standard Edition Software Version 17.1 behoben.