Quartus® Prime 16.1 の問題により、Arria® 10 PCIe ハード IP Gen3 デザインをコンパイルすると制約のないクロックが報告されます。
これは、altera_pcie_express.sdc でconsシレットが見つからないことで生じたものになっています。
この問題を回避するには、ソフトウェア・バージョン 17.1 にアップグレードするか、既存のaltera_pcie_express.sdc ファイルの末尾に次の sdc コマンドを追加します。
proc skp_sdc_puts {{channelId stdout}} {
「altera_pcie_a10_skp.sdc >> $msg」$channelId置く
}
proc parent_of_clock {clock_name {MAX_ATTEMPTS 100}} {
skp_sdc_puts"******
skp_sdc_puts"****** $clock_name******階層を検索
skp_sdc_puts"******
設定の試行回数 0
set parent {}
ながら { $MAX_ATTEMPTS} を$attempts < {
「\"$parent$clock_name\"」と一致するクロックを検索する」をskp_sdc_putsします。
設定matched_clock_collection [get_clocks -nowarn $parent$clock_name] ;# この蕪蕨を試してみてください。
set num_matched_clocks [get_collection_size $matched_clock_collection]
{ $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 「****** Finish searching with result: $parent******」
skp_sdc_puts"******
返品$parent
} elseif { $num_matched_clocks > 1} { ;#同じ名前の複数のクロック - これは発生すべきではありません。
skp_sdc_puts 「エラー: 複数のクロックが$parent$clock_nameに一致する ]{stderr}
「エラー: 一致するクロックは:」 {stderr} をskp_sdc_putsします。
「エラー: [query_collection $matched_clock_collection -report_format]」をskp_sdc_puts {stderr}
skp_sdc_puts"******
skp_sdc_puts"****** エラー ******で検索を終了
skp_sdc_puts"******
返す
} else { ;# 階層を 1 つ上へ上げます。
親 {*|} を追加
incr の試行
}
}
skp_sdc_puts 「エラー: $MAX_ATTEMPTS 試行で $clock_name の親を見つけることができない]
skp_sdc_puts"******
skp_sdc_puts "****** エラー ******で検索を終了
skp_sdc_puts"******
返す
}
parent_of_clockを呼び出す前に、-create_base_clocks ;# derive_pll_clocksを呼び出す必要があるderive_pll_clocks
適切な階層を生成するために ;# をderive_clock_uncertaintyします。
set prefix [parent_of_clock {tx_serial_clk}]
{set i 0} {$i != 8} {incr i} {
create_generated_clock -divide_by 1 \
-source "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pllakenphy|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_pllakenphy|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_pllakenphy|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_pllakenphy|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」;#ターゲット
}
「$prefix|tx_bonding_clocks[0]」 をremove_clock
create_generated_clock -multiply_by 1 -divide_by 10 \
-source "$prefix|altpcie_a10_hip_pipen1b|g_xcvr.altpcie_a10_hip_pltiumphy|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_pltiumphy|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
set rx_clkouts [list]
{set i 0} {$i != 8} {incr i} {
「$prefix|g_xcvr_native_insts[$i]|rx_clk」をremove_clock
「$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_pllakenphy|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_pllakenphy|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_pllakenphy|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_pllakenphy|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]"
}