英特尔® Arria® 10收发器PHY用户指南

ID 683617
日期 3/28/2022
Public
文档目录

2.6.5.3.2. 时序约束(Timing Constraints)

基于最快速度对PHY进行约束。 例如,如果您将PHY配置为1G/2.5G,那么要基于2.5G对其进行约束。

表 155.  时序约束
PHY配置 Constrain PHY for
2.5G 2.5G数据路径
1G/2.5G 2.5G数据路径
1G/2.5G/10G (MGBASE-T) 10G和1G/2.5G数据路径
10M/100M/1G/2.5G/5G/10G (USXGMII) 10G数据路径
当您对1G/2.5G/10G操作模式的外部PHY选择了MGBASE-T配置时,英特尔建议您在时序约束文件中添加以下约束, 以对10G数据路径以及1G/2.5G数据路径约束PHY:
注: 在编辑时序约束文件之前,您必须将PHY层次路径定义为<Installation Directory>/ip/altera/ethernet/alt_mge_phy/example/alt_mge_phy_multi_speed_10g.sdc
  • 为1G/2.5G数据路径创建生成的时钟。由于1G和2.5G硬核PCS配置是相同的,因此约束是基于2.5G数据路径设置的。例如:
    # Create the 1G/2.5G RX clock
    set rx_pma_clk_1g2p5g_name  "${ch_phy}rx_pma_clk_1g2p5g"
    set clock_node              "${ch_phy}$native_ls_inst$rx_pma_clk_1g2p5g_target"
    create_generated_clock -name $rx_pma_clk_1g2p5g_name -source [get_clock_info -targets refclk_1g2p5g] -divide_by 2 -multiply_by 5 [get_pins $clock_node] -add
        
    set rx_clk_1g2p5g_name      "${ch_phy}rx_clk_1g2p5g"
    set clock_source            "${ch_phy}$native_ls_inst$rx_pcs_clk_1g2p5g_source"
    set clock_node              "${ch_phy}$native_ls_inst$rx_pcs_clk_1g2p5g_target"
    create_generated_clock -name $rx_clk_1g2p5g_name -source [get_pins $clock_source] -master_clock $rx_pma_clk_1g2p5g_name -divide_by 2 -multiply_by 1 [get_pins $clock_node] -add
        
    set rx_clkout_1g2p5g_name   "${ch_phy}rx_clkout_1g2p5g"
    set clock_source            "${ch_phy}$native_ls_inst$rx_pld_clk_1g2p5g_source"
    set clock_node              "${ch_phy}$native_ls_inst$rx_pld_clk_10g_target"
    create_generated_clock -name $rx_clkout_1g2p5g_name -source [get_pins $clock_source] -master_clock $rx_pma_clk_1g2p5g_name -divide_by 2 -multiply_by 1 [get_pins $clock_node] -add
        
    # Create the 1G/2.5G TX clock
    set tx_pma_clk_1g2p5g_name  "${ch_phy}tx_pma_clk_1g2p5g"
    set clock_node              "${ch_phy}$native_ls_inst$tx_pma_clk_1g2p5g_target"
    create_generated_clock -name $tx_pma_clk_1g2p5g_name -source [get_clock_info -targets $serclk_1g2p5g] -divide_by 5 -multiply_by 1 [get_pins $clock_node] -add
        
    set tx_clk_1g2p5g_name      "${ch_phy}tx_clk_1g2p5g"
    set clock_source            "${ch_phy}$native_ls_inst$tx_pcs_clk_1g2p5g_source"
    set clock_node              "${ch_phy}$native_ls_inst$tx_pcs_clk_1g2p5g_target"
    create_generated_clock -name $tx_clk_1g2p5g_name -source [get_pins $clock_source] -master_clock $tx_pma_clk_1g2p5g_name -divide_by 2 -multiply_by 1 [get_pins $clock_node] -add
        
    set tx_clkout_1g2p5g_name   "${ch_phy}tx_clkout_1g2p5g"
    set clock_source            "${ch_phy}$native_ls_inst$tx_pld_clk_1g2p5g_source"
    set clock_node              "${ch_phy}$native_ls_inst$tx_pld_clk_10g_target"
    create_generated_clock -name $tx_clkout_1g2p5g_name -source [get_pins $clock_source] -master_clock $tx_pma_clk_1g2p5g_name -divide_by 2 -multiply_by 1 [get_pins $clock_node] -add 
    
    注: rx_clkout_1g2p5g_nametx_clkout_1g2p5g_name的时钟节点被分别设置成rx_pld_clk_10g_target tx_pld_clk_10g_target,这是因为此配置的设计是相对于最快速度(10G)进行编译的。因此,由 Intel® Quartus® Prime软件创建的此节点连接被重新用于设置1G/2.5G数据路径的时序约束。
  • 创建10G数据路径的默认时钟。由于在上述约束中创建了1G/2.5G时钟,因此Timing Analyzer不会创建这些时钟。此外,Timing Analyzer也不会创建来自同一主时钟的时钟。
    # Create the 10G (default) clocks which were not created by the IPSTA due to 1G/2.5G clocks just created above
    set rx_clkout_10g_name  "${ch_phy}rx_clkout"
    set master_src          "${ch_phy}rx_pma_clk"
    set clock_source        "${ch_phy}$native_ls_inst$rx_pld_clk_10g_source"
    set clock_node          "${ch_phy}$native_ls_inst$rx_pld_clk_10g_target"
    create_generated_clock -name $rx_clkout_10g_name -source [get_pins $clock_source] -master_clock $master_src [get_pins $clock_node] -add
        
    set tx_clkout_10g_name  "${ch_phy}tx_clkout"
    set master_src          "${ch_phy}tx_pma_clk"
    set clock_source        "${ch_phy}$native_ls_inst$tx_pld_clk_10g_source"
    set clock_node          "${ch_phy}$native_ls_inst$tx_pld_clk_10g_target"
    create_generated_clock -name $tx_clkout_10g_name -source [get_pins $clock_source] -master_clock $master_src [get_pins $clock_node] -add
    
    # PMA clock name for setting false path
        set rx_pma_clk_10g_name  "${ch_phy}rx_pma_clk"
        set tx_pma_clk_10g_name  "${ch_phy}tx_pma_clk"
    
    其中,1g2p5g10g分别指的是1G/2.5G和10G时钟。
  • 设置从10G时钟到1G/2.5G PHY逻辑的伪路径(false path),反之亦然。由于1G/2.5G PHY路径不以10G时钟速度运行,因此您不必确保在10G时钟速度上的1G/2.5G数据路径的时序收敛。例如:
    set_false_path -from [get_clocks "$rx_pma_clk_10g_name $rx_clkout_10g_name $tx_pma_clk_10g_name $tx_clkout_10g_name"] -to [get_registers "*|alt_mge16_pcs_pma:*|* $hssi_8g_pcs_if"]
    set_false_path -from [get_registers "*|alt_mge16_pcs_pma:*|* $hssi_8g_pcs_if"] -to [get_clocks "$rx_pma_clk_10g_name $rx_clkout_10g_name $tx_pma_clk_10g_name $tx_clkout_10g_name"]
    
    其中,由10g表示的路径与10G时钟相关联,而alt_mge16_pcs_pma路径表示1G/2.5G PHY逻辑。
  • 由于10G PHY逻辑不在1G/2.5G时钟上运行,因此您不必确保在更慢时钟速度上的1G/2.5G数据路径的时序收敛。伪路径被设置为从1G/2.5G时钟到10G PHY逻辑,反之亦然。例如:
    set_false_path -from [get_clocks "$rx_pma_clk_1g2p5g_name $rx_clk_1g2p5g_name $rx_clkout_1g2p5g_name $tx_pma_clk_1g2p5g_name $tx_clk_1g2p5g_name $tx_clkout_1g2p5g_name"] -to [get_registers "*|alt_mge_phy_xgmii_pcs:*|* $hssi_10g_pcs_if"]
    set_false_path -from [get_registers "*|alt_mge_phy_xgmii_pcs:*|* $hssi_10g_pcs_if"] -to [get_clocks "$rx_pma_clk_1g2p5g_name $rx_clk_1g2p5g_name $rx_clkout_1g2p5g_name $tx_pma_clk_1g2p5g_name $tx_clk_1g2p5g_name $tx_clkout_1g2p5g_name"]
    
    其中,由1g2p5g表示的路径与1G/2.5G时钟相关联,而alt_mge_phy_xgmii_pcs表示10G PHY逻辑。