| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- //////////////////////////////////////////////////////////////////////////////////
- // Company: TAIR
- // Engineer:
- //
- // Create Date: 10/30/2023 11:24:31 AM
- // Design Name:
- // Module Name: SpiSubSystem
- // Project Name: S5443_V3_FPGA3
- // Target Devices: BOARD: BY5443v3. FPGA: xc7s25csga225-2
- // Tool Versions:
- // Description: This is wrapper that encapsulates FIFO's, Spi modules and
- // modules that multiplex Spi output lines
- //
- // Dependencies:
- //
- // Revision:
- // Revision 1.0 - File Created
- // Additional Comments:
- //
- //////////////////////////////////////////////////////////////////////////////////
- module SpiSubSystem #(
- parameter STAGES = 3,
- parameter CMD_REG_WIDTH = 32,
- parameter ADDR_REG_WIDTH = 12,
- parameter WIDTH = 1,
- parameter FIFO_NUM = 7
- )
- (
- input Clk123_i,
- input SpiClk_i,
- input TxEn_i,
- input FifoRxRst_i,
- input FifoTxRst_i,
- input FifoRxRstRdPtr_i,
- input FifoTxRstWrPtr_i,
- input SmcAre_i,
- input SmcAwe_i,
- input [ADDR_REG_WIDTH-1:0] SmcAddr_i,
- input ToFifoVal_i,
- input [CMD_REG_WIDTH-1:0] ToFifoData_i,
- input [1:0] WidthSel_i,
- input PulsePol_i,
- input ClockPhase_i,
- input EndianSel_i,
- input Lag_i,
- input Lead_i,
- input SelSt_i,
- input [5:0] Stop_i,
- input Assel_i,
- input ChipSelFpga_i,
- input ChipSelFlash_i,
- input SpiMode_i,
- input SpiEn_i,
- output [CMD_REG_WIDTH-1:0] TxFifoCtrlReg_o,
- output [CMD_REG_WIDTH-1:0] RxFifoCtrlReg_o,
- output [CMD_REG_WIDTH-1:0] DataFromRxFifo_o,
- output Sck_o,
- output Ss_o,
- output SsFlash_o,
- output Mosi0_o,
- inout Mosi1_io,
- output Mosi2_o,
- output Mosi3_o
- );
- //================================================================================
- // REG/WIRE
- //================================================================================
- wire [CMD_REG_WIDTH-1:0] toSpiData;
- wire emptyFlagTx;
- wire initRst;
- wire sckR;
- wire ssR;
- wire mosi0R;
- wire valToTxR;
- wire valToRxR;
- wire sckQ;
- wire ssQ;
- wire mosi0Q;
- wire valToTxQ;
- wire valToTxFifoRead;
- wire valToRxFifoWrite;
- wire [CMD_REG_WIDTH-1:0] dataToRxFifo;
- //================================================================================
- // ASSIGNMENTS
- //================================================================================
- assign valToTxFifoRead = (SpiMode_i) ? valToTxQ : valToTxR;
- assign Mosi1_io = (SpiMode_i) ? mosi1_o : 1'bz;
- //================================================================================
- // CODING
- //================================================================================
- InitRst InitRst_inst
- (
- .clk_i (SpiClk_i),
- .signal_o (initRst)
- );
- Sync1bit #(
- .WIDTH (1),
- .STAGES (STAGES)
- ) Sync1bit_inst
- (
- .ClkFast_i (Clk123_i),
- .ClkSlow_i (SpiClk_i),
- .TxEn_i (TxEn_i),
- .TxEn_o (spiTxEnSync)
- );
- DataFifoWrapper #(
- .CMD_REG_WIDTH (CMD_REG_WIDTH),
- .ADDR_REG_WIDTH (ADDR_REG_WIDTH),
- .STAGES (STAGES),
- .FIFO_NUM (FIFO_NUM)
- ) DataFifoWrapper
- (
- .WrClk_i (Clk123_i),
- .RdClk_i (SpiClk_i),
- .FifoRxRst_i (FifoRxRst_i),
- .FifoTxRst_i (FifoTxRst_i),
- .FifoRxRstRdPtr_i (FifoRxRstRdPtr_i),
- .FifoTxRstWrPtr_i (FifoTxRstWrPtr_i),
- .SmcAre_i (SmcAre_i),
- .SmcAwe_i (SmcAwe_i),
- .SmcAddr_i (SmcAddr_i),
- .ToFifoVal_i (ToFifoVal_i),
- .ToFifoRxData_i (dataToRxFifo),
- .ToFifoRxWriteVal_i (valToRxR),
- .ToFifoTxReadVal_i (valToTxFifoRead),
- .ToFifoData_i (ToFifoData_i),
- .TxFifoCtrlReg_o (TxFifoCtrlReg_o),
- .RxFifoCtrlReg_o (RxFifoCtrlReg_o),
- .EmptyFlagTx_o (emptyFlagTx),
- .DataFromRxFifo_o (DataFromRxFifo_o),
- .ToSpiData_o (toSpiData)
- );
- SPIm SPIm_inst (
- .Clk_i (SpiClk_i),
- .Start_i (spiTxEnSync),
- .Rst_i (initRst | SpiMode_i | !SpiEn_i),
- .EmptyFlag_i (emptyFlagTx),
- .SpiData_i (toSpiData),
- .WidthSel_i (WidthSel_i),
- .PulsePol_i (PulsePol_i),
- .ClockPhase_i (ClockPhase_i),
- .EndianSel_i (EndianSel_i),
- .Lag_i (Lag_i),
- .Lead_i (Lead_i),
- .Stop_i (Stop_i),
- .SelSt_i (SelSt_i),
- .Sck_o (sckR),
- .Ss_o (ssR),
- .Mosi0_o (mosi0R),
- .Val_o (valToTxR)
- );
- SPIs SPIs_inst (
- .Clk_i (SpiClk_i),
- .Rst_i (initRst | SpiMode_i),
- .Sck_i (sckR),
- .Ss_i (ssR),
- .Mosi0_i (Mosi1_io),
- .WidthSel_i (WidthSel_i),
- .EndianSel_i (EndianSel_i),
- .SelSt_i (SelSt_i),
- .DataToRxFifo_o (dataToRxFifo),
- .Val_o (valToRxR)
- );
- QuadSPIm QuadSPIm_inst (
- .Clk_i (SpiClk_i),
- .Start_i (spiTxEnSync),
- .Rst_i (initRst | !SpiMode_i | !SpiEn_i),
- .EmptyFlag_i (emptyFlagTx),
- .SpiData_i (toSpiData),
- .WidthSel_i (WidthSel_i),
- .PulsePol_i (PulsePol_i),
- .ClockPhase_i (ClockPhase_i),
- .EndianSel_i (EndianSel_i),
- .Lag_i (Lag_i),
- .Lead_i (Lead_i),
- .Stop_i (Stop_i),
- .SelSt_i (SelSt_i),
- .Sck_o (sckQ),
- .Ss_o (ssQ),
- .Mosi0_o (mosi0Q),
- .Mosi1_o (mosi1_o),
- .Mosi2_o (Mosi2_o),
- .Mosi3_o (Mosi3_o),
- .Val_o (valToTxQ)
- );
- SpiLinesMuxer SpiLinesMuxer (
- .SsR_i (ssR),
- .SsQ_i (ssQ),
- .SckR_i (sckR),
- .SckQ_i (sckQ),
- .Mosi0R_i (mosi0R),
- .Mosi0Q_i (mosi0Q),
- .ChipSelFpga_i (ChipSelFpga_i),
- .ChipSelFlash_i (ChipSelFlash_i),
- .Assel_i (Assel_i),
- .SpiMode_i (SpiMode_i),
- .Ss_o (Ss_o),
- .SsFlash_o (SsFlash_o),
- .Sck_o (Sck_o),
- .Mosi0_o (Mosi0_o)
- );
- endmodule
|