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

    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 eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.