ID del artículo: 000076357 Tipo de contenido: Resolución de problemas Última revisión: 01/02/2023

¿Por qué está incorrecta la frecuencia tx_bonding_clocks[0] de Arria®10 PCIe Hard IP Gen3?

Entorno

  • Intel® Quartus® Prime Pro Edition
  • Hard IP Arria® 10 Cyclone® 10 Intel® para PCI Express*
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descripción

    Debido a un problema con Intel® Quartus® Software Prime 16.1, el reloj generado tx_bonding_clocks[0] de Arria diseño PCIe Hard IP Gen3 es incorrecto.

    El motivo es que el altera_pcie_express.sdc tiene algunas restricciones que faltan.

     

    Resolución

    Para evitar este problema, agregue los siguientes comandos de sdc al final de altera_pcie_express.sdc.

    proc skp_sdc_puts {preconfigurado {channelId stdout}} {
    pone $channelId ">> $msg altera_pcie_a10_skp.sdc"
    }

    proc parent_of_clock {clock_name {MAX_ATTEMPTS 100}} {
    skp_sdc_puts ""...."..."""."."No.".".Es un mensaje que se puede hacer en el momento que está en la ciudad de Skp_sdc_puts.
    skp_sdc_puts "."."Búsqueda de la jerarquía de $clock_name "&b
    skp_sdc_puts ""...."..."""."."No.".".Es un mensaje que se puede hacer en el momento que está en la ciudad de Skp_sdc_puts.

    set attempts 0
    establecer el elemento principal {}

    while { $attempts < $MAX_ATTEMPTS } {
    skp_sdc_puts "Búsqueda de relojes que coincidan con \"$parent$clock_name\"..."

    configure matched_clock_collection [get_clocks -nowarn $parent$clock_name]. # Pruebe esta prueba de conversión de caracteres.
    establecer num_matched_clocks [get_collection_size $matched_clock_collection]

    if { $num_matched_clocks == 1 } { ;# Esta es la jerarquía que estamos buscando.
    # Averigüe el nombre completo del padre.
    establezca el elemento principal [unir [lrange [dividir [query_collection $matched_clock_collection] {|}] 0 {end-1}] {|}]

    skp_sdc_puts "Se encontró un padre: $parent"
    skp_sdc_puts ""...."..."""."."No.".".Es un mensaje que se puede hacer en el momento que está en la ciudad de Skp_sdc_puts.
    skp_sdc_puts "**..."..."..."..."...") Finalizar la búsqueda con el resultado: $parent **...."..."..."..."..."..."..."..."".
    skp_sdc_puts ""...."..."""."."No.".".Es un mensaje que se puede hacer en el momento que está en la ciudad de Skp_sdc_puts.

    devolución $parent
    } elseif { $num_matched_clocks > 1 } { ;# Múltiples relojes con el mismo nombre, esto no debería ocurrir.
    skp_sdc_puts "Error: coinciden varios relojes $parent$clock_name " {stderr}
    skp_sdc_puts "Error: Los relojes coincidentes son:" {stderr}
    skp_sdc_puts "Error: [query_collection $matched_clock_collection -report_format]" {stderr}
    skp_sdc_puts ""...."..."""."."No.".".Es un mensaje que se puede hacer en el momento que está en la ciudad de Skp_sdc_puts.
    skp_sdc_puts "*"*""..."..."..."..."..."?"?"?" Finalizar la búsqueda con el error "...,..."..."...".?"?"?"?"**"
    skp_sdc_puts ""...."..."""."."No.".".Es un mensaje que se puede hacer en el momento que está en la ciudad de Skp_sdc_puts.

    devolución
    } else { ;# Subir un nivel de jerarquía.
    anexar al padre {*|}
    intentos de incr
    }
    }

    skp_sdc_puts "Error: No se puede encontrar el elemento principal de $clock_name en $MAX_ATTEMPTS attempts").
    skp_sdc_puts ""...."..."""."."No.".".Es un mensaje que se puede hacer en el momento que está en la ciudad de Skp_sdc_puts.
    skp_sdc_puts "*"*""..."..."..."..."..."?"?"?" Finalizar la búsqueda con el error "...,..."..."...".?"?"?"?"**"
    skp_sdc_puts ""...."..."""."."No.".".Es un mensaje que se puede hacer en el momento que está en la ciudad de Skp_sdc_puts.

    devolución
    }


    Se debe llamar al derive_pll_clocks derive_pll_clocks -create_base_clocks ;# antes de llamar al parent_of_clock
    derive_clock_uncertainty ;# para generar una jerarquía adecuada.


    establecer el prefijo [parent_of_clock {tx_serial_clk}]


    para {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" \
    -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" ;# objetivo

    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" ;# objetivo
    }

    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

    establecer rx_clkouts [list]
    para {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]" \
    -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" ;# objetivo

    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]" \
    -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 -exclusive \
    -group "$prefix|tx_bonding_clocks[0]" \
    -group "$prefix|g_xcvr_native_insts[$i]|rx_clkout"
    set_clock_groups -exclusive \
    -group "$prefix|tx_bonding_clocks[0]" \
    -group "$prefix|rx_pcs_clk_div_by_4[$i]"
    }

    Este problema se ha solucionado a partir de la Intel® Quartus® versión 17.1 del software Prime Standard Edition.

    Productos relacionados

    Este artículo se aplica a 2 productos

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

    El contenido de esta página es una combinación de la traducción humana y automática del contenido original en inglés. Este contenido se ofrece únicamente para su comodidad como información general y no debe considerarse completa o precisa. Si hay alguna contradicción entre la versión en inglés de esta página y la traducción, prevalecerá la versión en inglés. Consulte la versión en inglés de esta página.