記事 ID: 000076357 コンテンツタイプ: トラブルシューティング 最終改訂日: 2017/08/23

Arria®10 PCIe* ハード IP Gen3 の派生tx_bonding_clocks[0] 周波数が間違っているのはなぜですか?

環境

  • インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション
  • インテル® Arria® 10 Cyclone® 10 PCI Express* のハード 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}} {
    puts $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 "*****"

    set 試行回数 0
    set parent {}

    while { $attempts < $MAX_ATTEMPTS } {
    skp_sdc_puts "\"に一致するクロックの検索$parent$clock_name\.」

    set matched_clock_collection [get_clocks -nowarn $parent$clock_name] ;# このワイルドカードを試してみてください。
    set num_matched_clocks [get_collection_size $matched_clock_collection]

    if { $num_matched_clocks == 1 } { ;# これは目的の階層構造です。
    # 親のフルネームを確認します。
    set parent [join [lrange [split [query_collection $matched_clock_collection] {|}] 0 {end-1}] {|}]

    「親が見つかりました : $parent」をskp_sdc_puts
    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 "*****"

    返す
    } else { ;# 階層の 1 つのレベルに上がる。
    append parent {*|}
    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します。


    set prefix [parent_of_clock {tx_serial_clk}]


    for {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」 ;# ターゲット

    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」 ;# ターゲット
    }

    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設定 [リスト]
    for {set i 0} {$i != 8} {incr i} {
    remove_clockの「$prefix|g_xcvr_native_insts[$i]|rx_clk」
    「$prefix|g_xcvr_native_insts[$i]|rx_clkout」をremove_clock
     
    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」 ;# ターゲット

    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]"
    }

    この問題は、インテル® Quartus® Prime 開発ソフトウェア・スタンダード・エディション バージョン 17.1 以降で修正されています。

    関連製品

    本記事の適用対象: 2 製品

    インテル® Arria® 10 GT FPGA
    インテル® Arria® 10 GX FPGA

    このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。