// ---------------------------------------------------------------------- // "THE BEER-WARE LICENSE" (Revision 42): // wrote this file. As long as you retain this // notice you can do whatever you want with this stuff. If we meet // some day, and you think this stuff is worth it, you can buy me a // beer in return Yasunori Osana at University of the Ryukyus, // Japan. // ---------------------------------------------------------------------- // OpenFC project: an open FPGA accelerated cluster toolkit // Kyokko project: an open Multi-vendor Aurora 64B/66B-compatible link // // Modules in this file: // au200_kyokko: Kyokko + GTY transceiver wrapper for Xilinx Alveo U200 // ---------------------------------------------------------------------- `default_nettype none module au200_kyokko # ( parameter NumCh = 8, BondingEnable = 0, // Set to 1 to enable BondingCh = 4, NumChB = ((BondingEnable==0) ? NumCh : NumCh/BondingCh) ) ( input wire CLK100, RST, input wire QSFP_REFCLKP, QSFP_REFCLKN, output wire [NumCh-1:0] QSFP_TXP, QSFP_TXN, input wire [NumCh-1:0] QSFP_RXP, QSFP_RXN, // ------------------------------ // Aurora compatible interface signals output wire [NumCh-1:0] CH_UP, USER_CLK, // Data channel input wire [64*NumCh-1:0] S_AXI_TX_TDATA, input wire [ NumCh-1:0] S_AXI_TX_TLAST, S_AXI_TX_TVALID, output wire [NumCh-1:0] S_AXI_TX_TREADY, output wire [64*NumCh-1:0] M_AXI_RX_TDATA, output wire [ NumCh-1:0] M_AXI_RX_TLAST, M_AXI_RX_TVALID, // UFC channel input wire [NumCh-1:0] UFC_TX_REQ, input wire [8*NumCh-1:0] UFC_TX_MS, input wire [64*NumCh-1:0] S_AXI_UFC_TX_TDATA, input wire [NumCh-1:0] S_AXI_UFC_TX_TVALID, output wire [NumCh-1:0] S_AXI_UFC_TX_TREADY, output wire [64*NumCh-1:0] M_AXI_UFC_RX_TDATA, output wire [ NumCh-1:0] M_AXI_UFC_RX_TLAST, M_AXI_UFC_RX_TVALID, // NFC channel input wire [16*NumCh-1:0] S_AXI_NFC_TDATA, input wire [NumCh-1:0] S_AXI_NFC_TVALID, output wire [NumCh-1:0] S_AXI_NFC_TREADY ); // ------------------------------ // GTREFCLK buffer and GT_RST wire GTREFCLK; IBUFDS_GTE4 refclkbuf ( .O(GTREFCLK), .ODIV2(), // O .I(QSFP_REFCLKP), .IB (QSFP_REFCLKN), .CEB(1'b0) ); // I wire GT_RST; gt_rst grst ( .CLK(CLK100), .RST(RST), .GT_RST(GT_RST) ); // ------------------------------ // Kyokko instances wire [NumCh-1:0] TXUSERCLK2, TX_RDY; wire [NumCh-1:0] RXUSERCLK2, RX_RDY; wire [NumCh-1:0] [63:0] TXS, RXS; wire [NumCh-1:0][5:0] TXHDR, RXHDR; wire [NumCh-1:0] RXRST = ~RX_RDY; wire [NumCh-1:0] TXRST = ~TX_RDY; wire [NumCh-1:0] RXPATH_RST, RXSLIP; genvar ch, ch2; generate if (BondingEnable==0) begin : nobond_gen assign USER_CLK = TXUSERCLK2; for (ch=0; ch