ID de l'article: 000075415 Type de contenu: Dépannage Dernière révision: 22/08/2017

Pourquoi le cœur IP Intel Arria 10 PCIe signale-t-il des horloges non contraintes ?

Environnement

  • Intel® Quartus® Prime Pro Edition
  • Hard IP pour PCI Express* Intel® Arria® 10 Cyclone® 10
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descriptif

    En raison d’un problème dans Quartus® Prime 16.1, des horloges non contraintes sont signalées lorsque vous compilez les Arria® 10 conceptions IP dures PCIe Gen3.

    Cela est causé par des cons combots manquants dans altera_pcie_express.sdc.

    Résolution

    Pour contourner ce problème, passez au logiciel version 17.1 ou ajoutez les commandes dedc suivantes à la fin du fichier altera_pcie_express.sdc existant.

    proc skp_sdc_puts {msg {channelId stdout}} {
    met $channelId « altera_pcie_a10_skp.sdc >> $msg »
    }

    proc parent_of_clock {clock_name {MAX_ATTEMPTS 100}} {
    skp_sdc_puts « *** *
    skp_sdc_puts « *** Recherchant la hiérarchie de $clock_name ******* »
    skp_sdc_puts « *** *

    définir des tentatives 0
    définir le parent {}

    tandis que { $attempts < $MAX_ATTEMPTS } {
    skp_sdc_puts « Rechercher des horloges qui correspondent à \"$parent$clock_name\ »... »

    définissez matched_clock_collection [get_clocks -maintenant $parent$clock_name] ;# Essayez cette wildcard.
    définir num_matched_clocks [get_collection_size $matched_clock_collection]

    si { $num_matched_clocks == 1 } { ;# C’est la hiérarchie que nous recherchons.
    # Trouvez le nom complet du parent.
    définir le parent [join [lrange [split [query_collection $matched_clock_collection] {|}] 0 {end-1}] {|}]

    skp_sdc_puts « Parent trouvé : $parent »
    skp_sdc_puts « *** *
    skp_sdc_puts « *** Terminer la recherche avec le résultat : $parent ****** »
    skp_sdc_puts « *** *

    $parent de retour
    } elseif { $num_matched_clocks > 1 } { ;# Plusieurs horloges avec le même nom - cela ne devrait pas se produire.
    skp_sdc_puts « Erreur : plusieurs horloges correspondent à $parent $ clock_name » {stderr}
    skp_sdc_puts « Erreur : Les horloges appariées sont : » {stderr}
    skp_sdc_puts « Erreur : [query_collection $matched_clock_collection -report_format] » {stderr}
    skp_sdc_puts « **** *
    skp_sdc_puts « *** Terminer la recherche avec l’erreur ****
    skp_sdc_puts « **** *

    Retour
    } d’autre {;# Monter d’un niveau de hiérarchie.
    parent d’annexe {*|}
    tentatives d’incr
    }
    }

    skp_sdc_puts « Erreur : impossible de trouver le parent de $clock_name dans les tentatives de $MAX_ATTEMPTS »
    skp_sdc_puts « **** *
    skp_sdc_puts « *** Terminer la recherche avec l’erreur ****
    skp_sdc_puts « **** *

    Retour
    }


    derive_pll_clocks -create_base_clocks ;# derive_pll_clocks doit être appelé avant d’appeler parent_of_clock
    derive_clock_uncertainty ;# afin de générer une hiérarchie appropriée.


    préfixe défini [parent_of_clock {tx_serial_clk}]


    pour {set i 0} {$i != 8} {incr i} {
    create_generated_clock -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_rx_pcs.inst_twentynm_hssi_8g_rx_pcs|byte_deserializer_pcs_clk_div_by_2_txclk_reg » \
    - Nom « $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 » ;# cible

    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 » \
    - nom « $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 » ;# cible
    }

    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 » \
    -nom « $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

    définir rx_clkouts [liste]
    pour {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 \
    -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_rx_pcs.inst_twentynm_hssi_8g_rx_pcs|byte_deserializer_pcs_clk_div_by_4_txclk_reg » \
    -master_clock « $prefix|tx_bonding_clocks[0] » \
    -nom « $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 » ;# cible

    create_generated_clock - multiply_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_rx_pcs.inst_twentynm_hssi_8g_rx_pcs|byte_deserializer_pld_clk_div_by_4_txclk_reg » \
    -master_clock « $prefix|tx_bonding_clocks[0] » \
    -nom « $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 -exclusif \
    -groupe « $prefix|tx_bonding_clocks[0] » \
    -group « $prefix|g_xcvr_native_insts[$i]|rx_clkout »
    set_clock_groups -exclusif \
    -groupe « $prefix|tx_bonding_clocks[0] » \
    -group « $prefix|rx_pcs_clk_div_by_4[$i] »
    }

    Produits associés

    Cet article concerne 1 produits

    FPGA et FPGA SoC Intel® Arria® 10

    Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.