| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- module EpSubSystem #(
- parameter AXI_DATA_WIDTH = 64,
- parameter SPI_NUM = 2,
- parameter AXI_ID_WIDTH = 4,
- parameter STAGES = 3,
- parameter [3:0] ISTEMPRD = 4'b0001,
- parameter [3:0] ISPOWERRST = 4'b0001,
- parameter [AXI_DATA_WIDTH-1:0] SPI_BASE_ADDR = 64'h0000_0000_0000_1000,
- parameter [AXI_DATA_WIDTH-1:0] RST_MEM_BASE_ADDR = 64'h0000_0000_0000_9000,
- parameter [AXI_DATA_WIDTH-1:0] FIFO_TX_ADDR_OFFSET = 64'h0000_0000_0000_0028,
- parameter [AXI_DATA_WIDTH-1:0] FIFO_READ_ADDR_OFFSET = 64'h0000_0000_0000_0030,
- parameter [AXI_DATA_WIDTH-1:0] FIFO_1_READ_ADDR = 64'h0000_0000_0000_1030,
- parameter [AXI_DATA_WIDTH-1:0] FIFO_2_READ_ADDR = 64'h0000_0000_0000_2030,
- parameter [AXI_DATA_WIDTH-1:0] FIFO_3_READ_ADDR = 64'h0000_0000_0000_3030,
- parameter [AXI_DATA_WIDTH-1:0] FIFO_4_READ_ADDR = 64'h0000_0000_0000_4030,
- parameter [AXI_DATA_WIDTH-1:0] FIFO_5_READ_ADDR = 64'h0000_0000_0000_5030,
- parameter [AXI_DATA_WIDTH-1:0] FIFO_6_READ_ADDR = 64'h0000_0000_0000_6030,
- parameter [AXI_DATA_WIDTH-1:0] FIFO_7_READ_ADDR = 64'h0000_0000_0000_7030
- )
- (
- AxiMMBus.master Bus,
- /* Ld */
- input [SPI_NUM-1:0] ArbSpiStart_i,
- input [SPI_NUM-1:0] ArbSpiRst_i,
- input [SPI_NUM-1:0] ArbPowRstEn_i,
- output [SPI_NUM-1:0] Mosi0_o,
- inout [SPI_NUM-1:0] Mosi1_io, //inout: when RSPI mode, input; when QSPI mode output;
- output [SPI_NUM-1:0] Mosi2_o,
- output [SPI_NUM-1:0] Mosi3_o,
- output [SPI_NUM-1:0] Ss_o,
- output [SPI_NUM-1:0] SsFlash_o,
- output [SPI_NUM-1:0] Sck_o,
- output [SPI_NUM-1:0] SpiRst_o,
- output [SPI_NUM-1:0] SpiDir_o,
- output LD_o
- );
- //================================================================================
- // REG/WIRE
- //================================================================================
- /* Common Regs */
- wire [AXI_DATA_WIDTH-1:0] spiTxRxEnReg;
- wire [AXI_DATA_WIDTH-1:0] dataFromRegMap;
- /* AXI-Slave */
- wire [AXI_DATA_WIDTH-1:0] rdDataToAxiSlave;
- wire [AXI_DATA_WIDTH-1:0] rdAddrFromAxiSlave;
- wire [AXI_DATA_WIDTH-1:0] wrDataFromAxiSlave;
- wire [AXI_DATA_WIDTH-1:0] wrAddrFromAxiSlave;
- wire valFromAxiSlave;
- wire valToRdFifo;
- /* Input Mux */
- wire [AXI_DATA_WIDTH-1:0] toFifoData;
- wire [SPI_NUM-1:0] toFifoVal;
- wire [AXI_DATA_WIDTH-1:0] toRegMapData;
- wire [AXI_DATA_WIDTH-1:0] dataBus;
- wire [SPI_NUM:0] dataBusVal;
- wire toRegMapVal;
- wire [AXI_DATA_WIDTH-1:0] toRegMapAddr;
- /* Clock Manager */
- wire [7:0] baudRate [SPI_NUM-1:0];
- wire [SPI_NUM-1:0] spiClkBus;
- /* CDC LD */
- wire [SPI_NUM-1:0] ldReg;
- /* Output Mux */
- wire [AXI_DATA_WIDTH - 1 : 0] dataFromRxFifo [SPI_NUM-1:0];
- //================================================================================
- // ASSIGNMENTS
- //================================================================================
- //================================================================================
- // CODING
- //================================================================================
- AxiMMBus #(.AXI_DATA_WIDTH(AXI_DATA_WIDTH)) AxiBus();
- AxiSlave #(
- .AXI_DATA_WIDTH(AXI_DATA_WIDTH)
- ) axi_slave (
- .Bus(Bus),
- .RdData_i(rdDataToAxiSlave),
- .Val_o (valFromAxiSlave),
- .ValToRdFifo_o(valToRdFifo),
- .Data_o (wrDataFromAxiSlave),
- .RdAddr_o (rdAddrFromAxiSlave),
- .Addr_o (wrAddrFromAxiSlave)
- );
- ClkManager #(
- .SPI_NUM (SPI_NUM),
- .STAGES (STAGES)
- ) ClkManager
- (
- .Clk_i(s_axi_aclk),
- .RstN_i(~s_axi_aresetn),
- .WrData_i(wrDataFromAxiSlave),
- .WrAddr_i(wrAddrFromAxiSlave),
- .Val_i(valFromAxiSlave),
- .SpiClk_o(spiClkBus),
- .SubSystSyncRst_o(spiSubSysRst)
- );
- genvar i;
- generate
- for (i = 0; i < SPI_NUM; i = i + 1) begin : SpiSubSystem
- SpiSubSystem #(
- .STAGES (STAGES),
- .AXI_DATA_WIDTH (AXI_DATA_WIDTH),
- .CMD_REG_WIDTH (AXI_DATA_WIDTH),
- .ADDR_REG_WIDTH (AXI_DATA_WIDTH),
- .WIDTH (1),
- .ISTEMPRD (ISTEMPRD[i]),
- .ISPOWERRST (ISPOWERRST[i]),
- .SPI_BASE_ADDR (SPI_BASE_ADDR*i+64'h1000),
- .RST_MEM_BASE_ADDR (RST_MEM_BASE_ADDR*i)
- ) SpiSubSystem (
- .Clk_i(s_axi_aclk),
- .SpiClk_i(spiClkBus[i]),
- .Rst_i(spiSubSysRst|ArbSpiRst_i[i]),
- .WrData_i(wrDataFromAxiSlave),
- .WrAddr_i(wrAddrFromAxiSlave),
- .RdAddr_i(rdAddrFromAxiSlave),
- .Val_i(valFromAxiSlave),
- .PowRstEn_i(ArbPowRstEn_i[i]),
- .TxEn_i(ArbSpiStart_i[i]),
- .RdData_o(dataFromRxFifo[i]),
- .Sck_o(Sck_o[i]),
- .Ss_o(Ss_o[i]),
- .SsFlash_o(SsFlash_o[i]),
- .Mosi0_o(Mosi0_o[i]),
- .Mosi1_io(Mosi1_io[i]),
- .Mosi2_o(Mosi2_o[i]),
- .Mosi3_o(Mosi3_o[i])
- );
- end
- endgenerate
- /* Output Mux */
- OutputMux
- #(
- .AXI_DATA_WIDTH (AXI_DATA_WIDTH),
- .SPI_NUM (SPI_NUM),
- .FIFO_1_READ_ADDR (FIFO_1_READ_ADDR),
- .FIFO_2_READ_ADDR (FIFO_2_READ_ADDR),
- .FIFO_3_READ_ADDR (FIFO_3_READ_ADDR),
- .FIFO_4_READ_ADDR (FIFO_4_READ_ADDR),
- .FIFO_5_READ_ADDR (FIFO_5_READ_ADDR),
- .FIFO_6_READ_ADDR (FIFO_6_READ_ADDR),
- .FIFO_7_READ_ADDR (FIFO_7_READ_ADDR)
- )
- OutputMux (
- .Clk_i(s_axi_aclk),
- .RstN_i(s_axi_aresetn),
- .DataFromRxFifo_i(dataFromRxFifo),
- .DataFromRegMap_i(dataFromRegMap),
- .Addr_i(rdAddrFromAxiSlave),
- .AnsData_o(rdDataToAxiSlave)
- );
-
- endmodule
|