Artikel-ID: 000076357 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 23.08.2017

Warum ist die abgeleitete tx_bonding_clocks[0] Frequenz von Arria®10 PCIe Hard IP Gen3 falsch?

Umgebung

    Intel® Quartus® Prime Pro Edition
    Intel® Arria® 10 Cyclone® 10 Hard IP für PCI Express*
BUILT IN - ARTICLE INTRO SECOND COMPONENT
Beschreibung

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.

 

Lösung

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.

Zugehörige Produkte

Dieser Artikel bezieht sich auf 2 Produkte

เอฟพีจีเอ Intel® Arria® 10 GT
เอฟพีจีเอ Intel® Arria® 10 GX

1

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte es Widersprüche zwischen der englischsprachigen Version dieser Seite und der Übersetzung geben, gilt die englische Version. Englische Version dieser Seite anzeigen.