📄 gtp_dual_1000x.v
字号:
.RXENMCOMMAALIGN0 (ENMCOMMAALIGN_0_REC),
.RXENPCOMMAALIGN0 (ENPCOMMAALIGN_0_REC),
.RXCDRRESET0 (1'b0),
.RXCHBONDI0 (3'b000),
.RXCOMMADETUSE0 (1'b1),
.RXDATAWIDTH0 (1'b0),
.RXDEC8B10BUSE0 (1'b1),
.RXENCHANSYNC0 (1'b0),
.RXENEQB0 (1'b1),
.RXENPRBSTST0 (2'b00),
.RXENSAMPLEALIGN0 (1'b0),
.RXEQMIX0 (2'b00),
.RXEQPOLE0 (4'b0000),
.RXN0 (RX1N_0),
.RXP0 (RX1P_0),
.RXPMASETPHASE0 (1'b0),
.RXPOLARITY0 (1'b0),
.RXPOWERDOWN0 (2'b00),
.RXSLIDE0 (1'b0),
.RXUSRCLK0 (RXRECCLK_0_BUFR),
.RXUSRCLK20 (RXRECCLK_0_BUFR),
.TXBUFDIFFCTRL0 (3'b000),
.TXBYPASS8B10B0 (2'b00),
.TXCHARDISPMODE0 ({1'b0, TXCHARDISPMODE_0}),
.TXCHARDISPVAL0 ({1'b0, TXCHARDISPVAL_0}),
.TXCHARISK0 ({1'b0, TXCHARISK_0}),
.TXDATA0 ({8'b00000000, TXDATA_0}),
.TXCOMSTART0 (1'b0),
.TXCOMTYPE0 (1'b0),
.TXDATAWIDTH0 (1'b0),
.TXDETECTRX0 (1'b0),
.TXDIFFCTRL0 (3'b000),
.TXELECIDLE0 (1'b0),
.TXENC8B10BUSE0 (1'b1),
.TXENPRBSTST0 (2'b00),
.TXINHIBIT0 (1'b0),
.TXPOLARITY0 (1'b0),
.TXPOWERDOWN0 (2'b00),
.TXPREEMPHASIS0 (3'b000),
.TXRESET0 (TXRESET_0),
.TXUSRCLK0 (TXUSRCLK_0),
.TXUSRCLK20 (TXUSRCLK2_0),
.RXELECIDLERESET0 (rxelecidlereset0_i),
// unused
.PHYSTATUS1 (),
.RESETDONE1 (),
.RXBUFSTATUS1 (),
.RXBYTEISALIGNED1 (),
.RXBYTEREALIGN1 (),
.RXCHANBONDSEQ1 (),
.RXCHANISALIGNED1 (),
.RXCHANREALIGN1 (),
.RXCHARISCOMMA1 (),
.RXCHARISK1 (),
.RXCHBONDO1 (),
.RXCLKCORCNT1 (),
.RXCOMMADET1 (),
.RXDATA1 (),
.RXDISPERR1 (),
.RXELECIDLE1 (),
.RXLOSSOFSYNC1 (),
.RXNOTINTABLE1 (),
.RXOVERSAMPLEERR1 (),
.RXPRBSERR1 (),
.RXRECCLK1 (),
.RXRUNDISP1 (),
.RXSTATUS1 (),
.RXVALID1 (),
.TXBUFSTATUS1 (),
.TXKERR1 (),
.TXN1 (TX1N_1_UNUSED),
.TXOUTCLK1 (),
.TXP1 (TX1P_1_UNUSED),
.TXRUNDISP1 (),
.LOOPBACK1 (3'b000),
.PRBSCNTRESET1 (1'b0),
.RXBUFRESET1 (1'b0),
.RXCDRRESET1 (1'b0),
.RXCHBONDI1 (3'b000),
.RXCOMMADETUSE1 (1'b0),
.RXDATAWIDTH1 (1'b0),
.RXDEC8B10BUSE1 (1'b0),
.RXENCHANSYNC1 (1'b0),
.RXENEQB1 (1'b1),
.RXENMCOMMAALIGN1 (1'b0),
.RXENPCOMMAALIGN1 (1'b0),
.RXENPRBSTST1 (2'b00),
.RXENSAMPLEALIGN1 (1'b0),
.RXEQMIX1 (2'b00),
.RXEQPOLE1 (4'b0000),
.RXN1 (RX1N_1_UNUSED),
.RXP1 (RX1P_1_UNUSED),
.RXPMASETPHASE1 (1'b0),
.RXPOLARITY1 (1'b0),
.RXPOWERDOWN1 (2'b11),
.RXRESET1 (1'b0),
.RXSLIDE1 (1'b0),
.RXUSRCLK1 (1'b0),
.RXUSRCLK21 (1'b0),
.TXBUFDIFFCTRL1 (3'b000),
.TXBYPASS8B10B1 (2'b00),
.TXCHARDISPMODE1 (2'b00),
.TXCHARDISPVAL1 (2'b00),
.TXCHARISK1 (2'b00),
.TXCOMSTART1 (1'b0),
.TXCOMTYPE1 (1'b0),
.TXDATA1 (16'h0000),
.TXDATAWIDTH1 (1'b0),
.TXDETECTRX1 (1'b0),
.TXDIFFCTRL1 (3'b000),
.TXELECIDLE1 (1'b0),
.TXENC8B10BUSE1 (1'b0),
.TXENPRBSTST1 (2'b00),
.TXINHIBIT1 (1'b0),
.TXPOLARITY1 (1'b0),
.TXPOWERDOWN1 (2'b11),
.TXPREEMPHASIS1 (3'b000),
.TXRESET1 (1'b0),
.TXUSRCLK1 (1'b0),
.TXUSRCLK21 (1'b0),
.RXELECIDLERESET1 (1'b0));
//synthesis attribute CLK25_DIVIDER of GTP_1000X is 5
defparam GTP_1000X.CLK25_DIVIDER = 5;
//synthesis attribute CLK_COR_ADJ_LEN_0 of GTP_1000X is 2
defparam GTP_1000X.CLK_COR_ADJ_LEN_0 = 2;
//synthesis attribute CLK_COR_ADJ_LEN_1 of GTP_1000X is 2
defparam GTP_1000X.CLK_COR_ADJ_LEN_1 = 2;
//synthesis attribute CLK_COR_DET_LEN_0 of GTP_1000X is 2
defparam GTP_1000X.CLK_COR_DET_LEN_0 = 2;
//synthesis attribute CLK_COR_DET_LEN_1 of GTP_1000X is 2
defparam GTP_1000X.CLK_COR_DET_LEN_1 = 2;
//synthesis attribute CLK_COR_SEQ_1_1_0 of GTP_1000X is 0110111100
defparam GTP_1000X.CLK_COR_SEQ_1_1_0 = 10'b0110111100;
//synthesis attribute CLK_COR_SEQ_1_1_1 of GTP_1000X is 0110111100
defparam GTP_1000X.CLK_COR_SEQ_1_1_1 = 10'b0110111100;
//synthesis attribute CLK_COR_SEQ_1_2_0 of GTP_1000X is 0001010000
defparam GTP_1000X.CLK_COR_SEQ_1_2_0 = 10'b0001010000;
//synthesis attribute CLK_COR_SEQ_1_2_1 of GTP_1000X is 0001010000
defparam GTP_1000X.CLK_COR_SEQ_1_2_1 = 10'b0001010000;
//synthesis attribute CLK_COR_SEQ_2_1_0 of GTP_1000X is 0110111100
defparam GTP_1000X.CLK_COR_SEQ_2_1_0 = 10'b0110111100;
//synthesis attribute CLK_COR_SEQ_2_1_1 of GTP_1000X is 0110111100
defparam GTP_1000X.CLK_COR_SEQ_2_1_1 = 10'b0110111100;
//synthesis attribute CLK_COR_SEQ_2_2_0 of GTP_1000X is 0001010000
defparam GTP_1000X.CLK_COR_SEQ_2_2_0 = 10'b0001010000;
//synthesis attribute CLK_COR_SEQ_2_2_1 of GTP_1000X is 0001010000
defparam GTP_1000X.CLK_COR_SEQ_2_2_1 = 10'b0001010000;
//synthesis attribute CLK_COR_SEQ_2_USE_0 of GTP_1000X is "TRUE"
defparam GTP_1000X.CLK_COR_SEQ_2_USE_0 = "TRUE";
//synthesis attribute COMMA_10B_ENABLE_0 of GTP_1000X is 0001111111
defparam GTP_1000X.COMMA_10B_ENABLE_0 = 10'b0001111111;
//synthesis attribute COMMA_10B_ENABLE_1 of GTP_1000X is 0001111111
defparam GTP_1000X.COMMA_10B_ENABLE_1 = 10'b0001111111;
//synthesis attribute MCOMMA_10B_VALUE_0 of GTP_1000X is 1010000011
defparam GTP_1000X.MCOMMA_10B_VALUE_0 = 10'b1010000011;
//synthesis attribute MCOMMA_10B_VALUE_1 of GTP_1000X is 1010000011
defparam GTP_1000X.MCOMMA_10B_VALUE_1 = 10'b1010000011;
//synthesis attribute PCI_EXPRESS_MODE_0 of GTP_1000X is "FALSE"
defparam GTP_1000X.PCI_EXPRESS_MODE_0 = "FALSE";
//synthesis attribute PCI_EXPRESS_MODE_1 of GTP_1000X is "FALSE"
defparam GTP_1000X.PCI_EXPRESS_MODE_1 = "FALSE";
//synthesis attribute PCOMMA_10B_VALUE_0 of GTP_1000X is 0101111100
defparam GTP_1000X.PCOMMA_10B_VALUE_0 = 10'b0101111100;
//synthesis attribute PCOMMA_10B_VALUE_1 of GTP_1000X is 0101111100
defparam GTP_1000X.PCOMMA_10B_VALUE_1 = 10'b0101111100;
//synthesis attribute PLL_DIVSEL_FB of GTP_1000X is 2
defparam GTP_1000X.PLL_DIVSEL_FB = 2;
//synthesis attribute PLL_DIVSEL_REF of GTP_1000X is 1
defparam GTP_1000X.PLL_DIVSEL_REF = 1;
//synthesis attribute PLL_RXDIVSEL_OUT_0 of GTP_1000X is 2
defparam GTP_1000X.PLL_RXDIVSEL_OUT_0 = 2;
//synthesis attribute PLL_RXDIVSEL_OUT_1 of GTP_1000X is 2
defparam GTP_1000X.PLL_RXDIVSEL_OUT_1 = 2;
//synthesis attribute PLL_TXDIVSEL_COMM_OUT of GTP_1000X is 2
defparam GTP_1000X.PLL_TXDIVSEL_COMM_OUT = 2;
//synthesis attribute TXRX_INVERT_0 of GTP_1000X is 00000
defparam GTP_1000X.TXRX_INVERT_0 = 5'b00000;
//synthesis attribute TXRX_INVERT_1 of GTP_1000X is 00000
defparam GTP_1000X.TXRX_INVERT_1 = 5'b00000;
//synthesis attribute AC_CAP_DIS_0 of GTP_1000X is "TRUE"
defparam GTP_1000X.AC_CAP_DIS_0 = "TRUE";
//synthesis attribute AC_CAP_DIS_1 of GTP_1000X is "TRUE"
defparam GTP_1000X.AC_CAP_DIS_1 = "TRUE";
//synthesis attribute RCV_TERM_MID_0 of GTP_1000X is "FALSE"
defparam GTP_1000X.RCV_TERM_MID_0 = "FALSE";
//synthesis attribute RCV_TERM_MID_1 of GTP_1000X is "FALSE"
defparam GTP_1000X.RCV_TERM_MID_1 = "FALSE";
//synthesis attribute RCV_TERM_GND_0 of GTP_1000X is "FALSE"
defparam GTP_1000X.RCV_TERM_GND_0 = "FALSE";
//synthesis attribute RCV_TERM_GND_1 of GTP_1000X is "FALSE"
defparam GTP_1000X.RCV_TERM_GND_1 = "FALSE";
//synthesis attribute RCV_TERM_VTTRX_0 of GTP_1000X is "FALSE"
defparam GTP_1000X.RCV_TERM_VTTRX_0 = "FALSE";
//synthesis attribute RCV_TERM_VTTRX_1 of GTP_1000X is "FALSE"
defparam GTP_1000X.RCV_TERM_VTTRX_1 = "FALSE";
//synthesis attribute TX_DIFF_BOOST_0 of GTP_1000X is "TRUE"
defparam GTP_1000X.TX_DIFF_BOOST_0 = "TRUE";
//synthesis attribute TX_DIFF_BOOST_1 of GTP_1000X is "TRUE"
defparam GTP_1000X.TX_DIFF_BOOST_1 = "TRUE";
//synthesis attribute PLL_SATA_0 of GTP_1000X is "TRUE"
defparam GTP_1000X.PLL_SATA_0 = "TRUE";
//synthesis attribute PLL_SATA_1 of GTP_1000X is "TRUE"
defparam GTP_1000X.PLL_SATA_1 = "TRUE";
//synthesis attribute PMA_RX_CFG_0 of GTP_1000X is 25'h0dce110
defparam GTP_1000X.PMA_RX_CFG_0 = 25'h0dce110;
//synthesis attribute PMA_RX_CFG_1 of GTP_1000X is 25'h0dce110
defparam GTP_1000X.PMA_RX_CFG_1 = 25'h0dce110;
// Route RXRECLK0 through a regional clock buffer
BUFR rxrecclk0bufr (.I(RXRECCLK_0), .O(RXRECCLK_0_BUFR), .CE(1'b1), .CLR(1'b0));
// Instantiate the RX elastic buffer. This performs clock
// correction on the incoming data to cope with differences
// between the user clock and the clock recovered from the data.
rx_elastic_buffer rx_elastic_buffer_inst_0(
// Signals from the GTP on RXRECCLK.
.rxrecclk (RXRECCLK_0_BUFR),
.reset (RXRESET_0_REC),
.rxchariscomma_rec (RXCHARISCOMMA_0_REC),
.rxcharisk_rec (RXCHARISK_0_REC),
.rxdisperr_rec (RXDISPERR_0_REC),
.rxnotintable_rec (RXNOTINTABLE_0_REC),
.rxrundisp_rec (RXRUNDISP_0_REC),
.rxdata_rec (RXDATA_0_REC),
// Signals reclocked onto USRCLK.
.rxusrclk2 (RXUSRCLK2_0),
.rxreset (RXRESET_0),
.rxchariscomma_usr (RXCHARISCOMMA_0),
.rxcharisk_usr (RXCHARISK_0_INT),
.rxdisperr_usr (RXDISPERR_0_INT),
.rxnotintable_usr (RXNOTINTABLE_0_INT),
.rxrundisp_usr (RXRUNDISP_0_INT),
.rxclkcorcnt_usr (RXCLKCORCNT_0),
.rxbuferr (RXBUFERR_0_INT),
.rxdata_usr (RXDATA_0_INT)
);
assign RXBUFERR_0 = RXBUFERR_0_INT | RXBUFERR_0_REC;
// Resynchronise the RXRESET onto the RXRECCLK domain
always @(posedge RXRECCLK_0_BUFR or posedge RXRESET_0)
begin
if (RXRESET_0 == 1'b1)
begin
RXRESET_0_REG <=1'b1;
RXRESET_0_REC <=1'b1;
end
else
begin
RXRESET_0_REG <= 1'b0;
RXRESET_0_REC <= RXRESET_0_REG;
end
end
// Re-align signals from the USRCLK domain into the
// RXRECCLK domain
always @(posedge RXRECCLK_0_BUFR or posedge RXRESET_0_REC)
begin
if (RXRESET_0_REC == 1'b1)
begin
ENPCOMMAALIGN_0_REG <= 1'b0;
ENPCOMMAALIGN_0_REC <= 1'b0;
ENMCOMMAALIGN_0_REG <= 1'b0;
ENMCOMMAALIGN_0_REC <= 1'b0;
end
else
begin
ENPCOMMAALIGN_0_REG <= ENPCOMMAALIGN_0;
ENPCOMMAALIGN_0_REC <= ENPCOMMAALIGN_0_REG;
ENMCOMMAALIGN_0_REG <= ENMCOMMAALIGN_0;
ENMCOMMAALIGN_0_REC <= ENMCOMMAALIGN_0_REG;
end
end
//---------------------------------------------------------------------------
// EMAC0 to GTP logic shim
//---------------------------------------------------------------------------
// When the RXNOTINTABLE condition is detected, the Virtex5 RocketIO
// GTP outputs the raw 10B code in a bit swapped order to that of the
// Virtex-II Pro RocketIO.
always @ (RXNOTINTABLE_0_INT, RXDISPERR_0_INT, RXCHARISK_0_INT, RXDATA_0_INT,
RXRUNDISP_0_INT)
begin
if (RXNOTINTABLE_0_INT == 1'b1)
begin
RXDATA_0[0] <= RXDISPERR_0_INT;
RXDATA_0[1] <= RXCHARISK_0_INT;
RXDATA_0[2] <= RXDATA_0_INT[7];
RXDATA_0[3] <= RXDATA_0_INT[6];
RXDATA_0[4] <= RXDATA_0_INT[5];
RXDATA_0[5] <= RXDATA_0_INT[4];
RXDATA_0[6] <= RXDATA_0_INT[3];
RXDATA_0[7] <= RXDATA_0_INT[2];
RXRUNDISP_0 <= RXDATA_0_INT[1];
RXCHARISK_0 <= RXDATA_0_INT[0];
end
else
begin
RXDATA_0 <= RXDATA_0_INT;
RXRUNDISP_0 <= RXRUNDISP_0_INT;
RXCHARISK_0 <= RXCHARISK_0_INT;
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -