問題:

問題分析:
該項目中用了兩片DDR,3個4X的SRIO和1個1X的SRIO;另外有8路X1的SATA;其中DDR分别在BANK13和BANK16,也就是如下圖中的X0Y2和X0Y5;SRIO分别位于BANK111,BANK112,BANK113,BANK114,也就是如下圖的X1Y0,X1Y1,X1Y2,X1Y3;
DDR控制器MIG需要一個MMCM和一個PLL做時鐘管理;SRIO核需要一個MMCM做時鐘管理;該晶片隻有8個MMCM和32個BUFG;因為BUFG資源不夠;是以SRIO核的部分局部時鐘使用了BUFH資源。是以再布局的時候,MMCM就要使用就近MMCM資源。
因為X0Y2上的MMCM被DDR占用,是以X1Y2上的SRIO就隻能使用遠端X0Y4上的MMCM。而再使用BUFH資源時,就會出錯。
解決方法:
(1)将DDR需要的MMCM和PLL放到XOY4上;
(2)此處發現MMCM和PLL中間有一個BUFH資源,也将它放到X0Y4附近;
(3)将SRIO需要的MMCM資源依次分布在X0Y0,X0Y1,X0Y2,X0Y3;
(4)将BUFH放在對應的X1Y0,X1Y1,X1Y2,X1Y3處。
具體修改限制如下:
DDR相關限制:
set_property LOC PLLE2_ADV_X0Y2 [get_cells -hier -filter {NAME =~ */u_ddr3_infrastructure/plle2_i}]
set_property LOC MMCME2_ADV_X0Y2 [get_cells -hier -filter {NAME =~ */u_ddr3_infrastructure/gen_mmcm.mmcm_i}]
set_property LOC BUFHCE_X0Y59 [get_cells -hier -filter {NAME =~ */u_ddr3_infrastructure//u_bufh_pll_clk3}]
SRIO相關限制:
set_property LOC MMCME2_ADV_X0Y0 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/srio_mmcm_inst]
set_property LOC MMCME2_ADV_X0Y1 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/srio_mmcm_inst]
set_property LOC MMCME2_ADV_X0Y2 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/srio_mmcm_inst]
set_property LOC MMCME2_ADV_X0Y3 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/srio_mmcm_inst]
set_property LOC BUFHCE_X1Y0 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/gt_clk_bufh_inst]
set_property LOC BUFHCE_X1Y1 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/phy_clk_bufh_inst]
set_property LOC BUFHCE_X1Y2 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/drpclk_bufh_inst]
set_property LOC BUFHCE_X1Y3 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/gt_pcs_clk_bufh_inst]
set_property LOC BUFHCE_X1Y12 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_clk_inst]
set_property LOC BUFHCE_X1Y13 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/phy_clk_bufh_inst]
set_property LOC BUFHCE_X1Y14 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_drpclk_inst]
set_property LOC BUFHCE_X1Y15 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_pcs_clk_inst]
set_property LOC BUFHCE_X1Y24 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_clk_inst]
set_property LOC BUFHCE_X1Y25 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/phy_clk_bufh_inst]
set_property LOC BUFHCE_X1Y26 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_drpclk_inst]
set_property LOC BUFHCE_X1Y27 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_pcs_clk_inst]
set_property LOC BUFHCE_X1Y36 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_clk_inst]
set_property LOC BUFHCE_X1Y37 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/phy_clk_bufh_inst]
set_property LOC BUFHCE_X1Y38 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_drpclk_inst]
set_property LOC BUFHCE_X1Y39 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_pcs_clk_inst]
相關限制記錄:
1,I/O引腳配置設定
set_property PACKAGE_PIN <pi_name> [get_ports <port>]
2,I/O引腳驅動能力設定
set_property DRIVE <2 4 6 8 12 16 24> [get_ports <ports>]
3,I/O引腳電器标準設定
set_property IOSTANDARD <io standard> [get_ports <ports>]
4,I/O引腳抖動設定
set_property SLEW <SLOW\FAST> [get_ports <ports>]
5,I/O引腳上拉設定
set_property PULLUP true [get_ports <ports>]
6,I/O引腳下拉設定
set_property PULLDOWN true [get_ports <ports>]
7,I/O引腳差分設定
set_property DIFF_TERM <true> [get_ports <ports>]
1,時鐘生成
create_clock -name <clock_name> -period <period> [get_ports <clock port>]
2,輸入延時
set_input_delay <max delay> -max -clock [get_clocks <clock>] [get_ports <ports>]
set_input_delay <min delay> -min -clock [get_clocks <clock>] [get_ports <ports>]
3,輸出延時
set_output_delay <delay> -clock [get_clocks <clock>] [get_ports <ports>]
消除端口到寄存器之間的路徑延時:
set_property IOB TRUE [get_ports ***] //将端口***前的寄存器放在I/O bank内的寄存器中.
設定不相關時鐘即路徑:
set_false_path -from <startpoints> -to <endpoints>
位置限制:
//PLL
set_property LOC PLLE2_ADV_X*Y* [get_cells PLL路徑及例化名]
//MMCM
set_property LOC MMCME2_ADV_X*Y* [get_cells MMCM路徑及例化名]
//BUFG
set_property LOC BUFGCTRL_X*Y* [get_cells BUFG路徑及例化名]
//BUFH
set_property LOC BUFHCE_X*Y* [get_cells BUFH路徑及例化名]
//FIFO
set_property LOC OUT_FIFO_X*Y* [get_cells out_fifo路徑及例化名]
set_property LOC IN_FIFO_X*Y* [get_cells in_fifo路徑及例化名]