天天看點

十一、Xilinx FPGA相關限制及問題記錄

問題:

十一、Xilinx FPGA相關限制及問題記錄

問題分析:

該項目中用了兩片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資源時,就會出錯。

十一、Xilinx FPGA相關限制及問題記錄

解決方法:

(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路徑及例化名]