fpga: updating b200 and x300 FPGA source code for latest images

Original-commit: 00711ba213dde8aa0a099d2b18d3da0a33e6af79
This commit is contained in:
Ben Hilburn
2014-05-14 11:42:19 -07:00
parent 8f1cfd55b1
commit 5a525c84f5
71 changed files with 117080 additions and 4101 deletions
+178 -162
View File
@@ -285,7 +285,7 @@ module x300
bus_clk_gen bus_clk_gen (
.CLK_IN1(fpga_clk125), //Input Clock: 125MHz Clock from STC3
.CLK_OUT1(bus_clk), //Output Clock 1: 175MHz
.CLK_OUT1(bus_clk), //Output Clock 1: 166.666667MHz
.CLK_OUT2(ioport2_clk), //Output Clock 2: 125MHz
.RESET(1'b0),
.LOCKED(bus_clk_locked));
@@ -547,187 +547,203 @@ module x300
//
//////////////////////////////////////////////////////////////////////
localparam IOP2_MSG_WIDTH = 64;
localparam DMA_STREAM_WIDTH = `LVFPGA_IFACE_DMA_CHAN_WIDTH;
localparam DMA_COUNT_WIDTH = `LVFPGA_IFACE_DMA_SIZE_WIDTH;
localparam NUM_TX_STREAMS = `LVFPGA_IFACE_NUM_TX_DMA_CNT;
localparam NUM_RX_STREAMS = `LVFPGA_IFACE_NUM_RX_DMA_CNT;
localparam TX_STREAM_START_IDX = `LVFPGA_IFACE_TX_DMA_INDEX;
localparam RX_STREAM_START_IDX = `LVFPGA_IFACE_RX_DMA_INDEX;
localparam IOP2_MSG_WIDTH = 64;
localparam DMA_STREAM_WIDTH = `LVFPGA_IFACE_DMA_CHAN_WIDTH;
localparam DMA_COUNT_WIDTH = `LVFPGA_IFACE_DMA_SIZE_WIDTH;
localparam NUM_TX_STREAMS = `LVFPGA_IFACE_NUM_TX_DMA_CNT;
localparam NUM_RX_STREAMS = `LVFPGA_IFACE_NUM_RX_DMA_CNT;
localparam TX_STREAM_START_IDX = `LVFPGA_IFACE_TX_DMA_INDEX;
localparam RX_STREAM_START_IDX = `LVFPGA_IFACE_RX_DMA_INDEX;
wire [DMA_STREAM_WIDTH-1:0] dmatx_tdata, dmarx_tdata;
wire dmatx_tvalid, dmarx_tvalid;
wire dmatx_tlast, dmarx_tlast;
wire dmatx_tready, dmarx_tready;
wire [DMA_STREAM_WIDTH-1:0] dmatx_tdata, dmarx_tdata, pcii_tdata, pcio_tdata;
wire dmatx_tvalid, dmarx_tvalid, pcii_tvalid, pcio_tvalid;
wire dmatx_tlast, dmarx_tlast, pcii_tlast, pcio_tlast;
wire dmatx_tready, dmarx_tready, pcii_tready, pcio_tready;
wire [IOP2_MSG_WIDTH-1:0] o_iop2_msg_tdata, i_iop2_msg_tdata;
wire o_iop2_msg_tvalid, o_iop2_msg_tlast, o_iop2_msg_tready;
wire i_iop2_msg_tvalid, i_iop2_msg_tlast, i_iop2_msg_tready;
wire [IOP2_MSG_WIDTH-1:0] o_iop2_msg_tdata, i_iop2_msg_tdata;
wire o_iop2_msg_tvalid, o_iop2_msg_tlast, o_iop2_msg_tready;
wire i_iop2_msg_tvalid, i_iop2_msg_tlast, i_iop2_msg_tready;
wire pcie_usr_reg_wr, pcie_usr_reg_rd, pcie_usr_reg_rc, pcie_usr_reg_rdy;
wire [1:0] pcie_usr_reg_len;
wire [19:0] pcie_usr_reg_addr;
wire [31:0] pcie_usr_reg_data_in, pcie_usr_reg_data_out;
wire pcie_usr_reg_wr, pcie_usr_reg_rd, pcie_usr_reg_rc, pcie_usr_reg_rdy;
wire [1:0] pcie_usr_reg_len;
wire [19:0] pcie_usr_reg_addr;
wire [31:0] pcie_usr_reg_data_in, pcie_usr_reg_data_out;
wire chinch_reg_wr, chinch_reg_rd, chinch_reg_rc, chinch_reg_rdy;
wire [1:0] chinch_reg_len;
wire [19:0] chinch_reg_addr;
wire [31:0] chinch_reg_data_out;
wire [63:0] chinch_reg_data_in;
wire chinch_reg_wr, chinch_reg_rd, chinch_reg_rc, chinch_reg_rdy;
wire [1:0] chinch_reg_len;
wire [19:0] chinch_reg_addr;
wire [31:0] chinch_reg_data_out;
wire [63:0] chinch_reg_data_in;
wire [(NUM_TX_STREAMS*DMA_STREAM_WIDTH)-1:0] dmatx_tdata_iop2;
wire [NUM_TX_STREAMS-1:0] dmatx_tvalid_iop2, dmatx_tready_iop2;
wire [(NUM_TX_STREAMS*DMA_STREAM_WIDTH)-1:0] dmatx_tdata_iop2;
wire [NUM_TX_STREAMS-1:0] dmatx_tvalid_iop2, dmatx_tready_iop2;
wire [(NUM_RX_STREAMS*DMA_STREAM_WIDTH)-1:0] dmarx_tdata_iop2;
wire [NUM_RX_STREAMS-1:0] dmarx_tvalid_iop2, dmarx_tready_iop2;
wire [(NUM_RX_STREAMS*DMA_STREAM_WIDTH)-1:0] dmarx_tdata_iop2;
wire [NUM_RX_STREAMS-1:0] dmarx_tvalid_iop2, dmarx_tready_iop2;
//PCIe Express "Physical" DMA and Register logic
LvFpga_Chinch_Interface lvfpga_chinch_inst
(
.aIoResetIn_n(aIoResetIn_n),
.bBusReset(), //Output
//PCIe Express "Physical" DMA and Register logic
LvFpga_Chinch_Interface lvfpga_chinch_inst
(
.aIoResetIn_n(aIoResetIn_n),
.bBusReset(), //Output
// Clocks
.BusClk(ioport2_clk),
.Rio40Clk(rio40_clk),
.IDelayRefClk(ioport2_idelay_ref_clk),
.aRioClkPllLocked(rio40_clk_locked),
.aRioClkPllReset(rio40_clk_reset),
// Clocks
.BusClk(ioport2_clk),
.Rio40Clk(rio40_clk),
.IDelayRefClk(ioport2_idelay_ref_clk),
.aRioClkPllLocked(rio40_clk_locked),
.aRioClkPllReset(rio40_clk_reset),
// The IO_Port2 asynchronous handshaking pins
.aIoReadyOut(aIoReadyOut),
.aIoReadyIn(aIoReadyIn),
.aIoPort2Restart(aIoPort2Restart),
// The IO_Port2 asynchronous handshaking pins
.aIoReadyOut(aIoReadyOut),
.aIoReadyIn(aIoReadyIn),
.aIoPort2Restart(aIoPort2Restart),
// The IO_Port2 high speed receiver pins
.IoRxClock(IoRxClock),
.IoRxClock_n(IoRxClock_n),
.irIoRxData(irIoRxData),
.irIoRxData_n(irIoRxData_n),
.irIoRxHeader(irIoRxHeader),
.irIoRxHeader_n(irIoRxHeader_n),
// The IO_Port2 high speed receiver pins
.IoRxClock(IoRxClock),
.IoRxClock_n(IoRxClock_n),
.irIoRxData(irIoRxData),
.irIoRxData_n(irIoRxData_n),
.irIoRxHeader(irIoRxHeader),
.irIoRxHeader_n(irIoRxHeader_n),
// The IO_Port2 high speed transmitter interface pins
.IoTxClock(IoTxClock),
.IoTxClock_n(IoTxClock_n),
.itIoTxData(itIoTxData),
.itIoTxData_n(itIoTxData_n),
.itIoTxHeader(itIoTxHeader),
.itIoTxHeader_n(itIoTxHeader_n),
// The IO_Port2 high speed transmitter interface pins
.IoTxClock(IoTxClock),
.IoTxClock_n(IoTxClock_n),
.itIoTxData(itIoTxData),
.itIoTxData_n(itIoTxData_n),
.itIoTxHeader(itIoTxHeader),
.itIoTxHeader_n(itIoTxHeader_n),
// DMA TX Fifos
.bDmaTxData(dmatx_tdata_iop2),
.bDmaTxValid(dmatx_tvalid_iop2),
.bDmaTxReady(dmatx_tready_iop2),
.bDmaTxEnabled(),
.bDmaTxFifoFullCnt(),
// DMA TX Fifos
.bDmaTxData(dmatx_tdata_iop2),
.bDmaTxValid(dmatx_tvalid_iop2),
.bDmaTxReady(dmatx_tready_iop2),
.bDmaTxEnabled(),
.bDmaTxFifoFullCnt(),
// DMA RX Fifos
.bDmaRxData(dmarx_tdata_iop2),
.bDmaRxValid(dmarx_tvalid_iop2),
.bDmaRxReady(dmarx_tready_iop2),
.bDmaRxEnabled(),
.bDmaRxFifoFreeCnt(),
// DMA RX Fifos
.bDmaRxData(dmarx_tdata_iop2),
.bDmaRxValid(dmarx_tvalid_iop2),
.bDmaRxReady(dmarx_tready_iop2),
.bDmaRxEnabled(),
.bDmaRxFifoFreeCnt(),
// User Register Port In
.bUserRegPortInWt(pcie_usr_reg_wr),
.bUserRegPortInRd(pcie_usr_reg_rd),
.bUserRegPortInAddr(pcie_usr_reg_addr),
.bUserRegPortInData(pcie_usr_reg_data_in),
.bUserRegPortInSize(pcie_usr_reg_len),
// User Register Port In
.bUserRegPortInWt(pcie_usr_reg_wr),
.bUserRegPortInRd(pcie_usr_reg_rd),
.bUserRegPortInAddr(pcie_usr_reg_addr),
.bUserRegPortInData(pcie_usr_reg_data_in),
.bUserRegPortInSize(pcie_usr_reg_len),
// User Register Port Out
.bUserRegPortOutData(pcie_usr_reg_data_out),
.bUserRegPortOutDataValid(pcie_usr_reg_rc),
.bUserRegPortOutReady(pcie_usr_reg_rdy),
// User Register Port Out
.bUserRegPortOutData(pcie_usr_reg_data_out),
.bUserRegPortOutDataValid(pcie_usr_reg_rc),
.bUserRegPortOutReady(pcie_usr_reg_rdy),
// Chinch Register Port Out
.bChinchRegPortOutWt(chinch_reg_wr),
.bChinchRegPortOutRd(chinch_reg_rd),
.bChinchRegPortOutAddr({12'h0, chinch_reg_addr}),
.bChinchRegPortOutData({32'h0, chinch_reg_data_out}),
.bChinchRegPortOutSize(chinch_reg_len),
// Chinch Register Port Out
.bChinchRegPortOutWt(chinch_reg_wr),
.bChinchRegPortOutRd(chinch_reg_rd),
.bChinchRegPortOutAddr({12'h0, chinch_reg_addr}),
.bChinchRegPortOutData({32'h0, chinch_reg_data_out}),
.bChinchRegPortOutSize(chinch_reg_len),
// User Register Port In
.bChinchRegPortInData(chinch_reg_data_in),
.bChinchRegPortInDataValid(chinch_reg_rc),
.bChinchRegPortInReady(chinch_reg_rdy),
// User Register Port In
.bChinchRegPortInData(chinch_reg_data_in),
.bChinchRegPortInDataValid(chinch_reg_rc),
.bChinchRegPortInReady(chinch_reg_rdy),
// Level interrupt
.aIrq(aIrq)
);
// Level interrupt
.aIrq(aIrq)
);
//PCIe Express adapter logic to link to the AXI crossbar and the WB bus
x300_pcie_int #(
.DMA_STREAM_WIDTH(DMA_STREAM_WIDTH),
.NUM_TX_STREAMS(NUM_TX_STREAMS),
.NUM_RX_STREAMS(NUM_RX_STREAMS),
.REGPORT_ADDR_WIDTH(20),
.REGPORT_DATA_WIDTH(32),
.IOP2_MSG_WIDTH(IOP2_MSG_WIDTH)
) x300_pcie_int (
.ioport2_clk(ioport2_clk),
.bus_clk(bus_clk),
.bus_rst(bus_rst),
//PCIe Express adapter logic to link to the AXI crossbar and the WB bus
x300_pcie_int #(
.DMA_STREAM_WIDTH(DMA_STREAM_WIDTH),
.NUM_TX_STREAMS(NUM_TX_STREAMS),
.NUM_RX_STREAMS(NUM_RX_STREAMS),
.REGPORT_ADDR_WIDTH(20),
.REGPORT_DATA_WIDTH(32),
.IOP2_MSG_WIDTH(IOP2_MSG_WIDTH)
) x300_pcie_int (
.ioport2_clk(ioport2_clk),
.bus_clk(bus_clk),
.bus_rst(bus_rst),
//DMA TX FIFOs (IoPort2 Clock Domain)
.dmatx_tdata_iop2(dmatx_tdata_iop2),
.dmatx_tvalid_iop2(dmatx_tvalid_iop2),
.dmatx_tready_iop2(dmatx_tready_iop2),
//DMA TX FIFOs (IoPort2 Clock Domain)
.dmatx_tdata_iop2(dmatx_tdata_iop2),
.dmatx_tvalid_iop2(dmatx_tvalid_iop2),
.dmatx_tready_iop2(dmatx_tready_iop2),
//DMA TX FIFOs (IoPort2 Clock Domain)
.dmarx_tdata_iop2(dmarx_tdata_iop2),
.dmarx_tvalid_iop2(dmarx_tvalid_iop2),
.dmarx_tready_iop2(dmarx_tready_iop2),
//DMA TX FIFOs (IoPort2 Clock Domain)
.dmarx_tdata_iop2(dmarx_tdata_iop2),
.dmarx_tvalid_iop2(dmarx_tvalid_iop2),
.dmarx_tready_iop2(dmarx_tready_iop2),
//PCIe User Regport
.pcie_usr_reg_wr(pcie_usr_reg_wr),
.pcie_usr_reg_rd(pcie_usr_reg_rd),
.pcie_usr_reg_addr(pcie_usr_reg_addr),
.pcie_usr_reg_data_in(pcie_usr_reg_data_in),
.pcie_usr_reg_len(pcie_usr_reg_len),
.pcie_usr_reg_data_out(pcie_usr_reg_data_out),
.pcie_usr_reg_rc(pcie_usr_reg_rc),
.pcie_usr_reg_rdy(pcie_usr_reg_rdy),
//PCIe User Regport
.pcie_usr_reg_wr(pcie_usr_reg_wr),
.pcie_usr_reg_rd(pcie_usr_reg_rd),
.pcie_usr_reg_addr(pcie_usr_reg_addr),
.pcie_usr_reg_data_in(pcie_usr_reg_data_in),
.pcie_usr_reg_len(pcie_usr_reg_len),
.pcie_usr_reg_data_out(pcie_usr_reg_data_out),
.pcie_usr_reg_rc(pcie_usr_reg_rc),
.pcie_usr_reg_rdy(pcie_usr_reg_rdy),
//Chinch Regport
.chinch_reg_wr(chinch_reg_wr),
.chinch_reg_rd(chinch_reg_rd),
.chinch_reg_addr(chinch_reg_addr),
.chinch_reg_data_out(chinch_reg_data_out),
.chinch_reg_len(chinch_reg_len),
.chinch_reg_data_in(chinch_reg_data_in[31:0]),
.chinch_reg_rc(chinch_reg_rc),
.chinch_reg_rdy(chinch_reg_rdy),
//Chinch Regport
.chinch_reg_wr(chinch_reg_wr),
.chinch_reg_rd(chinch_reg_rd),
.chinch_reg_addr(chinch_reg_addr),
.chinch_reg_data_out(chinch_reg_data_out),
.chinch_reg_len(chinch_reg_len),
.chinch_reg_data_in(chinch_reg_data_in[31:0]),
.chinch_reg_rc(chinch_reg_rc),
.chinch_reg_rdy(chinch_reg_rdy),
//DMA TX FIFO (Bus Clock Domain)
.dmatx_tdata(dmatx_tdata),
.dmatx_tlast(dmatx_tlast),
.dmatx_tvalid(dmatx_tvalid),
.dmatx_tready(dmatx_tready),
//DMA TX FIFO (Bus Clock Domain)
.dmatx_tdata(dmatx_tdata),
.dmatx_tlast(dmatx_tlast),
.dmatx_tvalid(dmatx_tvalid),
.dmatx_tready(dmatx_tready),
//DMA RX FIFO (Bus Clock Domain)
.dmarx_tdata(dmarx_tdata),
.dmarx_tlast(dmarx_tlast),
.dmarx_tvalid(dmarx_tvalid),
.dmarx_tready(dmarx_tready),
//DMA RX FIFO (Bus Clock Domain)
.dmarx_tdata(dmarx_tdata),
.dmarx_tlast(dmarx_tlast),
.dmarx_tvalid(dmarx_tvalid),
.dmarx_tready(dmarx_tready),
//Message FIFO Out (Bus Clock Domain)
.rego_tdata(o_iop2_msg_tdata),
.rego_tvalid(o_iop2_msg_tvalid),
.rego_tlast(o_iop2_msg_tlast),
.rego_tready(o_iop2_msg_tready),
//Message FIFO Out (Bus Clock Domain)
.rego_tdata(o_iop2_msg_tdata),
.rego_tvalid(o_iop2_msg_tvalid),
.rego_tlast(o_iop2_msg_tlast),
.rego_tready(o_iop2_msg_tready),
//Message FIFO In (Bus Clock Domain)
.regi_tdata(i_iop2_msg_tdata),
.regi_tvalid(i_iop2_msg_tvalid),
.regi_tlast(i_iop2_msg_tlast),
.regi_tready(i_iop2_msg_tready),
//Message FIFO In (Bus Clock Domain)
.regi_tdata(i_iop2_msg_tdata),
.regi_tvalid(i_iop2_msg_tvalid),
.regi_tlast(i_iop2_msg_tlast),
.regi_tready(i_iop2_msg_tready),
//Misc
.misc_status({31'h0, aStc3Gpio7}),
.debug()
);
//Misc
.misc_status({15'h0, aStc3Gpio7}),
.debug()
);
// The PCIe logic will tend to stay close to the physical IoPort2 pins
// so add an additional stage of pipelining to give the tool more routing
// slack. This is significantly help timing closure.
axi_fifo_short #(.WIDTH(DMA_STREAM_WIDTH+1)) pcii_pipeline_srl (
.clk(bus_clk), .reset(bus_rst), .clear(1'b0),
.i_tdata({dmatx_tlast, dmatx_tdata}), .i_tvalid(dmatx_tvalid), .i_tready(dmatx_tready),
.o_tdata({pcii_tlast, pcii_tdata}), .o_tvalid(pcii_tvalid), .o_tready(pcii_tready),
.space(), .occupied());
axi_fifo_short #(.WIDTH(DMA_STREAM_WIDTH+1)) pcio_pipeline_srl (
.clk(bus_clk), .reset(bus_rst), .clear(1'b0),
.i_tdata({pcio_tlast, pcio_tdata}), .i_tvalid(pcio_tvalid), .i_tready(pcio_tready),
.o_tdata({dmarx_tlast, dmarx_tdata}), .o_tvalid(dmarx_tvalid), .o_tready(dmarx_tready),
.space(), .occupied());
//////////////////////////////////////////////////////////////////////
//
@@ -1936,14 +1952,14 @@ module x300
.i_iop2_msg_tlast (i_iop2_msg_tlast),
.i_iop2_msg_tready (i_iop2_msg_tready),
// PCIe DMA Data
.pcio_tdata (dmarx_tdata),
.pcio_tlast (dmarx_tlast),
.pcio_tvalid (dmarx_tvalid),
.pcio_tready (dmarx_tready),
.pcii_tdata (dmatx_tdata),
.pcii_tlast (dmatx_tlast),
.pcii_tvalid (dmatx_tvalid),
.pcii_tready (dmatx_tready)
.pcio_tdata (pcio_tdata),
.pcio_tlast (pcio_tlast),
.pcio_tvalid (pcio_tvalid),
.pcio_tready (pcio_tready),
.pcii_tdata (pcii_tdata),
.pcii_tlast (pcii_tlast),
.pcii_tvalid (pcii_tvalid),
.pcii_tready (pcii_tready)
);