|
|
@@ -25,7 +25,7 @@ module S5443_3Top
|
|
|
parameter CmdRegWidth = 32,
|
|
|
parameter AddrRegWidth = 12,
|
|
|
parameter STAGES = 3,
|
|
|
- parameter SpiNum = 1
|
|
|
+ parameter SpiNum = 7
|
|
|
|
|
|
)
|
|
|
(
|
|
|
@@ -39,6 +39,7 @@ module S5443_3Top
|
|
|
input SmcAre_i,
|
|
|
input [1:0] SmcBe_i,
|
|
|
input SmcAoe_i,
|
|
|
+ input [SpiNum-1:0] Ld_i,
|
|
|
output [SpiNum-1:0] Ld_o,
|
|
|
|
|
|
output Led_o,
|
|
|
@@ -296,6 +297,7 @@ module S5443_3Top
|
|
|
assign addrExt = {SmcAddr_i, 1'b0};
|
|
|
assign smcValComb = (!SmcAmsN_i && !SmcAwe_i) ? 1'b1 : 1'b0;
|
|
|
assign txEn = spiTxRxEn[6:0];
|
|
|
+ assign Mosi0_o = mosi0;
|
|
|
assign Mosi1_io[0] =(SpiDir_o[0])?mosi1[0]:1'bz;
|
|
|
assign Mosi1_io[1] =(SpiDir_o[1])?mosi1[1]:1'bz;
|
|
|
assign Mosi1_io[2] =(SpiDir_o[2])?mosi1[2]:1'bz;
|
|
|
@@ -501,14 +503,6 @@ module S5443_3Top
|
|
|
assign chipSelFlash[5] = spi5CsCtrlRR[1];
|
|
|
assign chipSelFlash[6] = spi6CsCtrlRR[1];
|
|
|
|
|
|
- assign ssMuxed[0] = (spiMode[0])? ssQ[0]:ssR[0];
|
|
|
- assign ssMuxed[1] = (spiMode[1])? ssQ[1]:ssR[1];
|
|
|
- assign ssMuxed[2] = (spiMode[2])? ssQ[2]:ssR[2];
|
|
|
- assign ssMuxed[3] = (spiMode[3])? ssQ[3]:ssR[3];
|
|
|
- assign ssMuxed[4] = (spiMode[4])? ssQ[4]:ssR[4];
|
|
|
- assign ssMuxed[5] = (spiMode[5])? ssQ[5]:ssR[5];
|
|
|
- assign ssMuxed[6] = (spiMode[6])? ssQ[6]:ssR[6];
|
|
|
-
|
|
|
assign SpiDir_o[0] = (spiMode[0])? 1'b1 : 1'b0 ;
|
|
|
assign SpiDir_o[1] = (spiMode[1])? 1'b1 : 1'b0 ;
|
|
|
assign SpiDir_o[2] = (spiMode[2])? 1'b1 : 1'b0 ;
|
|
|
@@ -517,24 +511,6 @@ module S5443_3Top
|
|
|
assign SpiDir_o[5] = (spiMode[5])? 1'b1 : 1'b0 ;
|
|
|
assign SpiDir_o[6] = (spiMode[6])? 1'b1 : 1'b0 ;
|
|
|
|
|
|
- assign sckMuxed[0] = (spiMode[0])?sckQ[0]:sckR[0];
|
|
|
- assign sckMuxed[1] = (spiMode[1])?sckQ[1]:sckR[1];
|
|
|
- assign sckMuxed[2] = (spiMode[2])?sckQ[2]:sckR[2];
|
|
|
- assign sckMuxed[3] = (spiMode[3])?sckQ[3]:sckR[3];
|
|
|
- assign sckMuxed[4] = (spiMode[4])?sckQ[4]:sckR[4];
|
|
|
- assign sckMuxed[5] = (spiMode[5])?sckQ[5]:sckR[5];
|
|
|
- assign sckMuxed[6] = (spiMode[6])?sckQ[6]:sckR[6];
|
|
|
-
|
|
|
- assign mosi0[0] = (spiMode[0])?mosi0Q[0]:mosi0R[0];
|
|
|
- assign mosi0[1] = (spiMode[1])?mosi0Q[1]:mosi0R[1];
|
|
|
- assign mosi0[2] = (spiMode[2])?mosi0Q[2]:mosi0R[2];
|
|
|
- assign mosi0[3] = (spiMode[3])?mosi0Q[3]:mosi0R[3];
|
|
|
- assign mosi0[4] = (spiMode[4])?mosi0Q[4]:mosi0R[4];
|
|
|
- assign mosi0[5] = (spiMode[5])?mosi0Q[5]:mosi0R[5];
|
|
|
- assign mosi0[6] = (spiMode[6])?mosi0Q[6]:mosi0R[6];
|
|
|
-
|
|
|
- assign Mosi0_o = mosi0;
|
|
|
-
|
|
|
assign valToTxFifoRead[0] = (spiMode[0])?valToTxQ[0]:valToTxR[0];
|
|
|
assign valToTxFifoRead[1] = (spiMode[1])?valToTxQ[1]:valToTxR[1];
|
|
|
assign valToTxFifoRead[2] = (spiMode[2])?valToTxQ[2]:valToTxR[2];
|
|
|
@@ -580,7 +556,6 @@ module S5443_3Top
|
|
|
//================================================================================
|
|
|
// CODING
|
|
|
//================================================================================
|
|
|
-
|
|
|
DataOutMux DataOutMuxer
|
|
|
(
|
|
|
.Clk_i(gclk),
|
|
|
@@ -826,119 +801,54 @@ module S5443_3Top
|
|
|
);
|
|
|
|
|
|
genvar i;
|
|
|
-
|
|
|
- generate
|
|
|
- for (i = 0; i < SpiNum; i = i + 1) begin: SpiGen
|
|
|
-
|
|
|
- InitRst InitRst_inst
|
|
|
- (
|
|
|
- .clk_i(spiClkBus[i]),
|
|
|
- .signal_o(initRstGen[i])
|
|
|
- );
|
|
|
+ generate
|
|
|
+ for (i = 0; i < SpiNum; i = i+1) begin : SpiSubSystem
|
|
|
+
|
|
|
+ SpiSubSystem #(
|
|
|
+ .STAGES(STAGES),
|
|
|
+ .CmdRegWidth(CmdRegWidth),
|
|
|
+ .AddrRegWidth(AddrRegWidth),
|
|
|
+ .WIDTH(1)
|
|
|
+ ) SpiSubSystem(
|
|
|
+ .Clk123_i(gclk),
|
|
|
+ .SpiClk_i(spiClkBus[i]),
|
|
|
|
|
|
- Sync1bit#(
|
|
|
- .WIDTH(1),
|
|
|
- .STAGES(STAGES)
|
|
|
-
|
|
|
- )
|
|
|
- Sync1bit_inst(
|
|
|
- .ClkFast_i(gclk),
|
|
|
- .ClkSlow_i(spiClkBus[i]),
|
|
|
.TxEn_i(txEn[i]),
|
|
|
- .RstReg_i(GPIOA[i]),
|
|
|
- .TxEn_o(spiTxEnSync[i]),
|
|
|
- .RstReg_o(GPIOASync[i])
|
|
|
|
|
|
- );
|
|
|
-
|
|
|
- DataFifoWrapper #(
|
|
|
- .STAGES(STAGES)
|
|
|
-
|
|
|
- )DataFifoWrapper
|
|
|
- (
|
|
|
- .WrClk_i(gclk),
|
|
|
- .RdClk_i(spiClkBus[i]),
|
|
|
-
|
|
|
- .FifoRxRst_i(fifoRxRst[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(addrExt),
|
|
|
- .ToFifoVal_i(toFifoVal[i]),
|
|
|
- .ToFifoRxData_i(dataToRxFifo[i]),
|
|
|
- .ToFifoRxWriteVal_i(valToRxFifo[i]),
|
|
|
- .ToFifoTxReadVal_i(valToTxFifoRead[i]),
|
|
|
- .ToFifoData_i(toFifoData[32*i+:32]),
|
|
|
-
|
|
|
- .TxFifoCtrlReg_o(txFifoCtrlReg[i]),
|
|
|
- .RxFifoCtrlReg_o(rxFifoCtrlReg[i]),
|
|
|
- .EmptyFlagTx_o(emptyFlagTx[i]),
|
|
|
- .DataFromRxFifo_o(dataFromRxFifo[i]),
|
|
|
- .ToSpiData_o(toSpiData[i])
|
|
|
- );
|
|
|
-
|
|
|
- SPIm SPIm_inst (
|
|
|
- .Clk_i(spiClkBus[i]),
|
|
|
- .Start_i(spiTxEnSync[i]),
|
|
|
- .Rst_i(initRstGen[i]| spiMode[i] | !spiEn[i]),
|
|
|
- .EmptyFlag_i(emptyFlagTx[i]),
|
|
|
- .SpiData_i(toSpiData[i]),
|
|
|
- .Sck_o(sckR[i]),
|
|
|
- .Ss_o(ssR[i]),
|
|
|
- .Mosi0_o(mosi0R[i]),
|
|
|
+ .ToFifoVal_i(toFifoVal[i]),
|
|
|
+ .ToFifoData_i(toFifoData[32*i+:32]),
|
|
|
.WidthSel_i(widthSel[i]),
|
|
|
.PulsePol_i(clockPol[i]),
|
|
|
.ClockPhase_i(clockPhase[i]),
|
|
|
.EndianSel_i(endianSel[i]),
|
|
|
.Lag_i(lag[i]),
|
|
|
.Lead_i(leadx[i]),
|
|
|
- .Stop_i(stopDelay[i]),
|
|
|
- .SelSt_i(selSt[i]),
|
|
|
- .Val_o(valToTxR[i])
|
|
|
-
|
|
|
- );
|
|
|
-
|
|
|
- SPIs SPIs_inst (
|
|
|
- .Clk_i(spiClkBus[i]),
|
|
|
- .Rst_i(initRstGen[i] | spiMode[i]),
|
|
|
- .Sck_i(sckR[i]),
|
|
|
- .Ss_i(ssR[i]),
|
|
|
- .Mosi0_i(Mosi1_io[i]),
|
|
|
- .WidthSel_i(widthSel[i]),
|
|
|
- .EndianSel_i(endianSel[i]),
|
|
|
.SelSt_i(selSt[i]),
|
|
|
- .DataToRxFifo_o(dataToRxFifoR[i]),
|
|
|
- .Val_o(valToRxR[i])
|
|
|
- );
|
|
|
-
|
|
|
- QuadSPIm QuadSPIm_inst (
|
|
|
- .Clk_i(spiClkBus[i]),
|
|
|
- .Start_i(spiTxEnSync[i]),
|
|
|
- .Rst_i(initRstGen[i]| !spiMode[i] | !spiEn[i]),
|
|
|
- .EmptyFlag_i(emptyFlagTx[i]),
|
|
|
- .SpiData_i(toSpiData[i]),
|
|
|
- .Sck_o(sckQ[i]),
|
|
|
- .Ss_o(ssQ[i]),
|
|
|
- .Mosi0_o(mosi0Q[i]),
|
|
|
+ .Stop_i(stopDelay[i]),
|
|
|
+ .SpiMode_i(spiMode[i]),
|
|
|
+ .SpiEn_i(spiEn[i]),
|
|
|
+
|
|
|
+ .TxFifoCtrlReg_o(txFifoCtrlReg[i]),
|
|
|
+ .RxFifoCtrlReg_o(rxFifoCtrlReg[i]),
|
|
|
+ .DataFromRxFifo_o(dataFromRxFifo[i]),
|
|
|
+
|
|
|
+ .Sck_o(sckMuxed[i]),
|
|
|
+ .Ss_o(ssMuxed[i]),
|
|
|
+ .Mosi0_o(mosi0[i]),
|
|
|
.Mosi1_o(mosi1[i]),
|
|
|
.Mosi2_o(mosi2[i]),
|
|
|
- .Mosi3_o(mosi3[i]),
|
|
|
- .WidthSel_i(widthSel[i]),
|
|
|
- .PulsePol_i(clockPol[i]),
|
|
|
- .ClockPhase_i(clockPhase[i]),
|
|
|
- .EndianSel_i(endianSel[i]),
|
|
|
- .Lag_i(lag[i]),
|
|
|
- .Lead_i(leadx[i]),
|
|
|
- .Stop_i(stopDelay[i]),
|
|
|
- .SelSt_i(selSt[i]),
|
|
|
- .Val_o(valToTxQ[i])
|
|
|
+ .Mosi3_o(mosi3[i])
|
|
|
);
|
|
|
end
|
|
|
endgenerate
|
|
|
-
|
|
|
+
|
|
|
InitRst InitRst_inst
|
|
|
(
|
|
|
.clk_i(gclk),
|