Artikel-ID: 000075415 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 22.08.2017

Warum meldet der Intel Arria 10 PCIe-IP-Kern uneingeschränkte Taktfrequenzen?

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 in Quartus® Prime 16.1 werden beim Kompilieren der Arria® 10 PCIe Hard IP Gen3 Designs uneingeschränkte Taktfrequenzen gemeldet.

    Dies wird durch fehlende Constaints in altera_pcie_express.sdc verursacht.

    Lösung

    Um dieses Problem zu beheben, aktualisieren Sie entweder auf Softwareversion 17.1 oder fügen Sie die folgenden sDC-Befehle am Ende der bestehenden altera_pcie_express.sdc-Datei 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]"
    }

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 1 Produkte

    Intel® Arria® 10 FPGAs und SoC FPGAs

    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.