由于 Quartus® Prime 16.1 中出现一个问题,您编译Arria® 10 个 PCIe 硬 IP Gen3 设计时,会报告无约束的时钟。
这是由 altera_pcie_express.sdc 中的娱乐系统缺失所致。
要解决此问题,可以升级到软件版本 17.1 或在现有 altera_pcie_express.sdc 文件的末尾添加以下 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_twentynm_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_twentynm_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]"
}