AR# 46053

LogiCORE IP 10 Gb 以太网 PCS/PMA (10GBASE-R) v2.2 - Kintex-7 FPGA 示例设计不能布局。

描述

在使用面向 Kintex-7 器件的 10Gb 以太网 PCS/PMA V2.2 内核时,因一个 BUFR 被用于驱动GTX DRP 时钟,实现方案会报错。

在 Kintex-7 器件中无法完成从 BUFR 到 GTX 的布线。 

出现以下错误:

ERROR:Place:1459 - Regional Clock Net "dclk" cannot possibly be routed to component"ten_gig_eth_pcs_pma_block/gtwizard_10gbaser_i/gt0_GTWIZARD_10GBASER_i/gtxe2_ i" (placed in clock region"CLOCKREGIONP_X1Y3"), since it is too far away from source BUFR "ten_gig_eth_pcs_pma_block/gt0_usrclk_source/bufr_inst" (placed in clock region "CLOCKREGION_X0Y3"). 为了让这个时钟网能够进行布线,时钟资源和所有负载应处于同一时钟域。这种情况可能是由于用户的约束条件或是设计的复杂性而导致的。正确地按照与域时钟的相对关系约束该组件,可能能够引导工具找到解决方案。为使用部分布线结果调试您的设计,请让映射/布局器完成执行(通过设置环境变量 XIL_PAR_DEBUG_IOCLKPLACER=1)。

解决方案

用于生成向下分频 DRPCLK 的 BUFR 必须用 MMCM 替换,并在输出端安排一个 BUFG。 

对示例设计必须进行下列修改:

对于 Verilog

1) 修改 example_design/<core_name>_block.v 文件以在 MMCM 中添加:

a) 添加以下时钟模块

CLOCK_MODULE #(
.MULT(4),
.DIVIDE(1),
.CLK_PERIOD(6.4),
.OUT0_DIVIDE(8),
.OUT1_DIVIDE(1),
.OUT2_DIVIDE(1),
.OUT3_DIVIDE(1)
) dclk_divider
(// Clock in ports
.CLK_IN(clk156),
// Clock out ports
.CLK0_OUT(gt0_drpclk_i),
.CLK1_OUT(),
.CLK2_OUT(),
.CLK3_OUT(),
// Status and control signals
.MMCM_RESET_IN(tied_to_ground_i),
.MMCM_LOCKED_OUT()
);

b) 注释掉当前的 GT_USRCLK_SOURCE 文件,用下列加以替换:

GT_USRCLK_SOURCE gt_usrclk_source
(
.Q1_CLK0_GTREFCLK_PAD_N_IN (Q1_CLK0_GTREFCLK_PAD_N_IN),
.Q1_CLK0_GTREFCLK_PAD_P_IN (Q1_CLK0_GTREFCLK_PAD_P_IN),
.Q1_CLK0_GTREFCLK_OUT (q1_clk0_refclk_i),

.GT0_TXUSRCLK_OUT (gt0_txusrclk_i),
.GT0_TXUSRCLK2_OUT (gt0_txusrclk2_i),
.GT0_TXOUTCLK_IN (gt0_txoutclk_i),
.GT0_RXUSRCLK_OUT (gt0_rxusrclk_i),
.GT0_RXUSRCLK2_OUT (gt0_rxusrclk2_i),
.GT0_RXOUTCLK_IN (gt0_rxoutclk_i),
.DRPCLK_IN (tied_to_ground_i),
.DRPCLK_OUT()
);

2) 在 example_design/gtx/gt_userclk_source.v 中,注释掉 BUFR:

//BUFR
// #(
// .BUFR_DIVIDE("2")
// )
// (
// .I (q1_clk0_gtrefclk),
// .CE (tied_to_vcc_i),
// .CLR (tied_to_ground_i),
// .O (DRPCLK_OUT)
// );

3) 在 example_design/gtx/clock_module.v 中,添加一个 BUFG 给反馈路径,并将输入和输出端口连接到 MMCM CLKFBOUT 和 CLKFBIN 端口:

线路 clkfbout_bufg;

...

.CLKFBIN (clkfbout_bufg),

...

BUFG clkfb_bufg
(.O (clkfbout_bufg),
.I (clkfbout));

对于 VHDL

1) 修改 example_design/<core_name>_block.vhd 文件以在 MMCM 中添加:

a) 添加 CLOCK_MODULE 组件

component CLOCK_MODULE is
generic
(
MULT : real := 2.0;
DIVIDE : integer := 2;
CLK_PERIOD : real := 6.4;
OUT0_DIVIDE : real := 2.0;
OUT1_DIVIDE : integer := 2;
OUT2_DIVIDE : integer := 2;
OUT3_DIVIDE : integer := 2
);
port
(-- Clock in ports
CLK_IN : in std_logic;
-- Clock out ports
CLK0_OUT : out std_logic;
CLK1_OUT : out std_logic;
CLK2_OUT : out std_logic;
CLK3_OUT : out std_logic;
-- Status and control signals
MMCM_RESET_IN : in std_logic;
MMCM_LOCKED_OUT : out std_logic
);
end component;


b) 对时钟模块进行实例化:

drpclk_mmcm : CLOCK_MODULE
generic map
(
MULT => 4.0,
DIVIDE => 1,
CLK_PERIOD => 6.4,
OUT0_DIVIDE => 8.0,
OUT1_DIVIDE => 1,
OUT2_DIVIDE => 1,
OUT3_DIVIDE => 1
)
port map
(-- Clock in ports
CLK_IN => clk156_int,
-- Clock out ports
CLK0_OUT => gt0_drpclk_i,
CLK1_OUT => open,
CLK2_OUT => open,
CLK3_OUT => open,
-- Status and control signals
MMCM_RESET_IN => tied_to_ground_i,
MMCM_LOCKED_OUT => open
);

b) 注释掉当前的 GT_USRCLK_SOURCE文件,用下列加以替换:


gt0_usrclk_source : GT_USRCLK_SOURCE
port map
(
Q1_CLK0_GTREFCLK_PAD_N_IN => Q1_CLK0_GTREFCLK_PAD_N_IN,
Q1_CLK0_GTREFCLK_PAD_P_IN => Q1_CLK0_GTREFCLK_PAD_P_IN,
Q1_CLK0_GTREFCLK_OUT => q1_clk0_refclk_i,

GT0_TXUSRCLK_OUT => gt0_txusrclk_i,
GT0_TXUSRCLK2_OUT => gt0_txusrclk2_i,
GT0_TXOUTCLK_IN => gt0_txoutclk_i,
GT0_RXUSRCLK_OUT => gt0_rxusrclk_i,
GT0_RXUSRCLK2_OUT => gt0_rxusrclk2_i,
GT0_RXOUTCLK_IN => gt0_rxoutclk_i,
DRPCLK_IN => tied_to_ground_i,
DRPCLK_OUT => open
);

2) 在 example_design/gtx/gt_userclk_source.vhd 中,注释掉 BUFR:

-- bufr_inst : BUFR
-- generic map
-- (
-- BUFR_DIVIDE => "2"
-- )
-- port map
-- (
-- I => q1_clk0_gtrefclk,
-- CE => tied_to_vcc_i,
-- CLR => tied_to_ground_i,
-- O => DRPCLK_OUT
-- );

3) 在 example_design/gtx/clock_module.vhd 中,添加一个 BUFG 给反馈路径,并将输入和输出端口连接到 MMCM CLKFBOUT 和 CLKFBIN 端口:

信号 clkfbout_bufg : std_logic;

....

CLKFBIN => clkfbout_bufg,

....

clkfb_bufg : BUFG
port map
(O => clkfbout_bufg,
I => clkfbout);

AR# 46053
日期 10/22/2014
状态 Active
Type 综合文章
IP