前言
上文介绍了40G/50G Ethernet Subsystem IP核的使用,对于每个QSFP都单独使用一个GT参考时钟,本文将基于此介绍GT时钟共享。
一、设计框图
二、模块修改
主要是修改QPLL的参考时钟输入,我这里QSFP1的BANL在QSFP2的呗面,所以QSFP2想要使用QSFP1的GT参考时钟需要将COMMON的参考时钟输入选为011.
主要修改l_ethernet_1_common_wrapper模块,增加参数GTYE4_COMMON_QPLL0REFCLKSEL 进行参考时钟选择和南北时钟输入。
module l_ethernet_1_common_wrapper#(
parameter GTYE4_COMMON_QPLL0REFCLKSEL = 3'b001
)
(
input refclk,
input north_refclk ,
input south_refclk ,
input [0 :0] qpll0reset,
output [0 :0] qpll0lock,
output [0 :0] qpll0outclk,
output [0 :0] qpll0outrefclk,
input drpclk_common_in,
input [0 :0] qpll1reset,
output [0 :0] qpll1lock,
output [0 :0] qpll1outclk,
output [0 :0] qpll1outrefclk
);
// List of signals to connect to GT Common block
wire [0 :0] GTYE4_COMMON_QPLL0RESET;
wire [0 :0] GTYE4_COMMON_GTREFCLK00;
wire [0 :0] GTYE4_COMMON_QPLL0LOCK;
wire [0 :0] GTYE4_COMMON_QPLL0OUTCLK;
wire [0 :0] GTYE4_COMMON_QPLL0OUTREFCLK;
wire [0 :0] GTYE4_COMMON_QPLL1RESET;
wire [0 :0] GTYE4_COMMON_QPLL1LOCK;
wire [0 :0] GTYE4_COMMON_QPLL1OUTCLK;
wire [0 :0] GTYE4_COMMON_QPLL1OUTREFCLK;
wire [15:0] GTYE4_COMMON_DRPADDR;
wire [0:0] GTYE4_COMMON_DRPCLK;
wire [15:0] GTYE4_COMMON_DRPDI;
wire [0:0] GTYE4_COMMON_DRPEN;
wire [0:0] GTYE4_COMMON_DRPWE;
wire [15:0] GTYE4_COMMON_DRPDO;
wire [0:0] GTYE4_COMMON_DRPRDY;
wire GTYE4_COMMON_GTSOUTHREFCLK00;
wire GTYE4_COMMON_GTNORTHREFCLK00;
assign GTYE4_COMMON_GTSOUTHREFCLK00 = south_refclk;
assign GTYE4_COMMON_GTNORTHREFCLK00 = north_refclk;
// Connect only required internal signals to GT Common block
assign GTYE4_COMMON_QPLL0RESET = qpll0reset;
assign GTYE4_COMMON_GTREFCLK00 = refclk;
assign qpll0lock = GTYE4_COMMON_QPLL0LOCK;
assign qpll0outclk = GTYE4_COMMON_QPLL0OUTCLK;
assign qpll0outrefclk = GTYE4_COMMON_QPLL0OUTREFCLK;
assign GTYE4_COMMON_QPLL1RESET = qpll1reset;
assign qpll1lock = GTYE4_COMMON_QPLL1LOCK;
assign qpll1outclk = GTYE4_COMMON_QPLL1OUTCLK;
assign qpll1outrefclk = GTYE4_COMMON_QPLL1OUTREFCLK;
assign GTYE4_COMMON_DRPADDR = 16'b0;
assign GTYE4_COMMON_DRPCLK = drpclk_common_in;
assign GTYE4_COMMON_DRPDI = 16'b0;
assign GTYE4_COMMON_DRPEN = 1'b0;
assign GTYE4_COMMON_DRPWE = 1'b0;
l_ethernet_1_gt_gtye4_common_wrapper l_ethernet_1_gt_gtye4_common_wrapper_i
(
.GTYE4_COMMON_BGBYPASSB(1'b1),
.GTYE4_COMMON_BGMONITORENB(1'b1),
.GTYE4_COMMON_BGPDB(1'b1),
.GTYE4_COMMON_BGRCALOVRD(5'b10000),
.GTYE4_COMMON_BGRCALOVRDENB(1'b1),
.GTYE4_COMMON_DRPADDR(16'b0000000000000000),
.GTYE4_COMMON_DRPCLK(1'b0),
.GTYE4_COMMON_DRPDI(16'b0000000000000000),
.GTYE4_COMMON_DRPDO(),
.GTYE4_COMMON_DRPEN(1'b0),
.GTYE4_COMMON_DRPRDY(),
.GTYE4_COMMON_DRPWE(1'b0),
.GTYE4_COMMON_GTGREFCLK0(1'b0),
.GTYE4_COMMON_GTGREFCLK1(1'b0),
.GTYE4_COMMON_GTNORTHREFCLK00(GTYE4_COMMON_GTNORTHREFCLK00),
.GTYE4_COMMON_GTNORTHREFCLK01(1'b0),
.GTYE4_COMMON_GTNORTHREFCLK10(1'b0),
.GTYE4_COMMON_GTNORTHREFCLK11(1'b0),
.GTYE4_COMMON_GTREFCLK00(GTYE4_COMMON_GTREFCLK00),
.GTYE4_COMMON_GTREFCLK01(1'b0),
.GTYE4_COMMON_GTREFCLK10(1'b0),
.GTYE4_COMMON_GTREFCLK11(1'b0),
.GTYE4_COMMON_GTSOUTHREFCLK00(GTYE4_COMMON_GTSOUTHREFCLK00),
.GTYE4_COMMON_GTSOUTHREFCLK01(1'b0),
.GTYE4_COMMON_GTSOUTHREFCLK10(1'b0),
.GTYE4_COMMON_GTSOUTHREFCLK11(1'b0),
.GTYE4_COMMON_PCIERATEQPLL0(3'b000),
.GTYE4_COMMON_PCIERATEQPLL1(3'b000),
.GTYE4_COMMON_PMARSVD0(8'b00000000),
.GTYE4_COMMON_PMARSVD1(8'b00000000),
.GTYE4_COMMON_PMARSVDOUT0(),
.GTYE4_COMMON_PMARSVDOUT1(),
.GTYE4_COMMON_QPLL0CLKRSVD0(1'b0),
.GTYE4_COMMON_QPLL0CLKRSVD1(1'b0),
.GTYE4_COMMON_QPLL0FBCLKLOST(),
.GTYE4_COMMON_QPLL0FBDIV(8'b00000000),
.GTYE4_COMMON_QPLL0LOCK(GTYE4_COMMON_QPLL0LOCK),
.GTYE4_COMMON_QPLL0LOCKDETCLK(1'b0),
.GTYE4_COMMON_QPLL0LOCKEN(1'b1),
.GTYE4_COMMON_QPLL0OUTCLK(GTYE4_COMMON_QPLL0OUTCLK),
.GTYE4_COMMON_QPLL0OUTREFCLK(GTYE4_COMMON_QPLL0OUTREFCLK),
.GTYE4_COMMON_QPLL0PD(1'b0),
.GTYE4_COMMON_QPLL0REFCLKLOST(),
.GTYE4_COMMON_QPLL0REFCLKSEL(GTYE4_COMMON_QPLL0REFCLKSEL),
.GTYE4_COMMON_QPLL0RESET(GTYE4_COMMON_QPLL0RESET),
.GTYE4_COMMON_QPLL1CLKRSVD0(1'b0),
.GTYE4_COMMON_QPLL1CLKRSVD1(1'b0),
.GTYE4_COMMON_QPLL1FBCLKLOST(),
.GTYE4_COMMON_QPLL1FBDIV(8'b00000000),
.GTYE4_COMMON_QPLL1LOCK(GTYE4_COMMON_QPLL1LOCK),
.GTYE4_COMMON_QPLL1LOCKDETCLK(1'b0),
.GTYE4_COMMON_QPLL1LOCKEN(1'b0),
.GTYE4_COMMON_QPLL1OUTCLK(GTYE4_COMMON_QPLL1OUTCLK),
.GTYE4_COMMON_QPLL1OUTREFCLK(GTYE4_COMMON_QPLL1OUTREFCLK),
.GTYE4_COMMON_QPLL1PD(1'b1),
.GTYE4_COMMON_QPLL1REFCLKLOST(),
.GTYE4_COMMON_QPLL1REFCLKSEL(3'b001),
.GTYE4_COMMON_QPLL1RESET(GTYE4_COMMON_QPLL1RESET),
.GTYE4_COMMON_QPLLDMONITOR0(),
.GTYE4_COMMON_QPLLDMONITOR1(),
.GTYE4_COMMON_QPLLRSVD1(8'b00000000),
.GTYE4_COMMON_QPLLRSVD2(5'b00000),
.GTYE4_COMMON_QPLLRSVD3(5'b00000),
.GTYE4_COMMON_QPLLRSVD4(8'b00000000),
.GTYE4_COMMON_RCALENB(1'b1),
.GTYE4_COMMON_REFCLKOUTMONITOR0(),
.GTYE4_COMMON_REFCLKOUTMONITOR1(),
.GTYE4_COMMON_RXRECCLK0SEL(),
.GTYE4_COMMON_RXRECCLK1SEL(),
.GTYE4_COMMON_SDM0DATA(25'b0000000000000000000000000),
.GTYE4_COMMON_SDM0FINALOUT(),
.GTYE4_COMMON_SDM0RESET(1'b0),
.GTYE4_COMMON_SDM0TESTDATA(),
.GTYE4_COMMON_SDM0TOGGLE(1'b0),
.GTYE4_COMMON_SDM0WIDTH(2'b00),
.GTYE4_COMMON_SDM1DATA(25'b0000000000000000000000000),
.GTYE4_COMMON_SDM1FINALOUT(),
.GTYE4_COMMON_SDM1RESET(1'b0),
.GTYE4_COMMON_SDM1TESTDATA(),
.GTYE4_COMMON_SDM1TOGGLE(1'b0),
.GTYE4_COMMON_SDM1WIDTH(2'b00),
.GTYE4_COMMON_UBCFGSTREAMEN(1'b0),
.GTYE4_COMMON_UBDADDR(),
.GTYE4_COMMON_UBDEN(),
.GTYE4_COMMON_UBDI(),
.GTYE4_COMMON_UBDO(16'b0000000000000000),
.GTYE4_COMMON_UBDRDY(1'b0),
.GTYE4_COMMON_UBDWE(),
.GTYE4_COMMON_UBENABLE(1'b0),
.GTYE4_COMMON_UBGPI(2'b00),
.GTYE4_COMMON_UBINTR(2'b00),
.GTYE4_COMMON_UBIOLMBRST(1'b0),
.GTYE4_COMMON_UBMBRST(1'b0),
.GTYE4_COMMON_UBMDMCAPTURE(1'b0),
.GTYE4_COMMON_UBMDMDBGRST(1'b0),
.GTYE4_COMMON_UBMDMDBGUPDATE(1'b0),
.GTYE4_COMMON_UBMDMREGEN(4'b0000),
.GTYE4_COMMON_UBMDMSHIFT(1'b0),
.GTYE4_COMMON_UBMDMSYSRST(1'b0),
.GTYE4_COMMON_UBMDMTCK(1'b0),
.GTYE4_COMMON_UBMDMTDI(1'b0),
.GTYE4_COMMON_UBMDMTDO(),
.GTYE4_COMMON_UBRSVDOUT(),
.GTYE4_COMMON_UBTXUART()
);
三、上板
上板接收数据一切正常。