在使用面向 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:
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;
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 |