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

Pourquoi la fréquence dérivée tx_bonding_clocks[0] de Arria®10 PCIe Hard IP Gen3 est-elle incorrecte ?

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 avec le logiciel Intel® Quartus® Prime 16.1, la tx_bonding_clocks d’horloge générée de Arria 10 PCIe Hard IP Gen3 est incorrecte.

    La raison en est que la altera_pcie_express.sdc a des contraintes manquantes.

     

    Résolution

    Pour résoudre ce problème, veuillez ajouter les commandes dedc suivantes à la fin de altera_pcie_express.sdc.

    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 {}

    {$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 derive_pll_clocks create_base_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 [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] » \
    -groupe « $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] »
    }

    Ce problème est résolu à partir de la version 17.1 du logiciel Intel® Quartus® Prime Standard Edition.

    Produits associés

    Cet article concerne 2 produits

    FPGA Intel® Arria® 10 GT
    FPGA Intel® Arria® 10 GX

    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.