文章 ID: 000076357 内容类型: 故障排除 上次审核日期: 2017 年 08 月 23 日

为什么Arria®10 PCIe 硬核 IP Gen3 的推导tx_bonding_clocks[0] 频率错误?

环境

  • 英特尔® Quartus® Prime Pro Edition
  • 面向 PCI Express* 的英特尔® Arria® 10 Cyclone® 10 硬核 IP
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    说明

    由于英特尔® Quartus® Prime 软件 16.1 出现问题,Arria 10 PCIe 硬核 IP Gen3 设计生成的时钟tx_bonding_clocks[0] 错误。

    原因是 altera_pcie_express.sdc 存在一些缺失的限制。

     

    解决方法

    要解决此问题,请将以下 sdc 命令添加altera_pcie_express.sdc 的末尾。

    proc skp_sdc_puts {msg {channelId stdout}} {
    $channelId“altera_pcie_a10_skp.sdc >> $msg”
    }

    proc parent_of_clock {clock_name {MAX_ATTEMPTS 100}} {
    skp_sdc_puts“**\\。\\。”
    skp_sdc_puts“\\\\\\。** 搜索$clock_name\\\\\。”的层次结构
    skp_sdc_puts“**\\。\\。”

    设置尝试 0
    设置家长 {}

    而 { $attempts skp_sdc_puts“搜索与 \”$parent clock_name\“匹配的时钟......”

    设置matched_clock_collection [get_clocks -nowarn $parent clock_name美元];# 试用此通配符。
    设置num_matched_clocks [get_collection_size $matched_clock_collection]

    如果 { $num_matched_clocks == 1 } };# 这就是我们正在寻找的层次结构。
    # 了解家长的全名。
    设置家长 [加入 [lrange [拆分 [query_collection $matched_clock_collection] {|}] 0 {end-1}] {|}]

    skp_sdc_puts“找到家长:$parent”
    skp_sdc_puts“**\\。\\。”
    skp_sdc_puts“**\\。** 完成搜索,结果:$parent\**\\\\\。””
    skp_sdc_puts“**\\。\\。”

    退货$parent
    } elseif { $num_matched_clocks > 1 } {# 多个名称相同的时钟 - 不应发生。
    skp_sdc_puts:“错误:多个时钟匹配$parent clock_name美元!”{stderr}
    skp_sdc_puts“错误:匹配时钟为:”{stderr}
    skp_sdc_puts“错误:[query_collection $matched_clock_collection -report_format]”{stderr}
    skp_sdc_puts“**\\。\\。”
    skp_sdc_puts“\\\\*\\\*完成搜索,并出现错误 [\**\\\\\。]””
    skp_sdc_puts“**\\。\\。”

    返回
    } 其他 { # 提升一个层次的层次结构。
    附录家长 {*|}
    Incr 尝试
    }
    }

    skp_sdc_puts:“错误:无法在MAX_ATTEMPTS 尝试中找到 $clock_name 的家长!”
    skp_sdc_puts“**\\。\\。”
    skp_sdc_puts“\\\\*\\\*完成搜索,并出现错误 [\**\\\\\。]””
    skp_sdc_puts“**\\。\\。”

    返回
    }


    derive_pll_clocks -create_base_clocks;# derive_pll_clocks在致电之前请致电parent_of_clock
    derive_clock_uncertainty ;# 以生成正确的层次结构。


    设置前缀 [parent_of_clock {tx_serial_clk}]


    对 {set i 0} {$i != 8} {incr i} {
    create_generated_clock -divide_by 1 \
    -来源 “$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_20nm_hssi_8g_rx_pcs|byte_deserializer_pcs_clk_div_by_2_txclk_reg\
    -名称“$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_20nm_hssi_8g_rx_pcs|sta_rx_clk2_by2_1”;# target

    create_generated_clock -multiply_by 1 -divide_by 1 \
    -来源 “$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_20nm_hssi_8g_tx_pcs|byte_serializer_pcs_clk_div_by_2_reg\
    -名称“$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_20nm_hssi_8g_tx_pcs|sta_tx_clk2_by2_1”;# target
    }

    remove_clock“$prefix|tx_bonding_clocks[0]”
    create_generated_clock -multiply_by 1 -divide_by 10 \
    -来源 “$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” \
    -名称“$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 [列表]
    对 {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 \
    -来源 “$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_20nm_hssi_8g_rx_pcs|byte_deserializer_pcs_clk_div_by_4_txclk_reg\
    -master_clock“$prefix|tx_bonding_clocks[0]”
    -名称“$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_20nm_hssi_8g_rx_pcs|sta_rx_clk2_by4_1”;# Target

    create_generated_clock -multiply_by 1 \
    -来源 “$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]”
    -名称“$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_20nm_hssi_8g_rx_pcs|sta_rx_clk2_by4_1_out”

    set_clock_groups - 排他性 \
    -group “$prefix|tx_bonding_clocks[0]”
    -group “$prefix|g_xcvr_native_insts[$i]|rx_clkout”
    set_clock_groups - 排他性 \
    -group “$prefix|tx_bonding_clocks[0]”
    -group “$prefix|rx_pcs_clk_div_by_4[$i]”
    }

    此问题从英特尔® Quartus® Prime 标准版软件版本 17.1 开始修复。

    相关产品

    本文适用于 2 产品

    英特尔® Arria® 10 GT FPGA
    英特尔® Arria® 10 GX FPGA

    本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。