|
|
@@ -30,12 +30,13 @@ module S5443_3Top #(
|
|
|
input Clk123_i,
|
|
|
input [AddrRegWidth-2:0] Addr_i,
|
|
|
inout [CmdRegWidth/2-1:0] Data_i,
|
|
|
- input [SpiNum-1:0] SpiRst_i,
|
|
|
+
|
|
|
input writeEn_i,
|
|
|
input readEn_i,
|
|
|
// input DspRst_i,
|
|
|
input [1:0] BE_i,
|
|
|
input outputEn_i,
|
|
|
+ output [SpiNum-1:0] LD_i,
|
|
|
|
|
|
output Led_o,
|
|
|
|
|
|
@@ -44,7 +45,9 @@ module S5443_3Top #(
|
|
|
output [SpiNum-1:0] Mosi2_o,
|
|
|
output [SpiNum-1:0] Mosi3_o,
|
|
|
output [SpiNum-1:0] Ss_o,
|
|
|
- output [SpiNum-1:0] Sck_o
|
|
|
+ output [SpiNum-1:0] Sck_o,
|
|
|
+ output [SpiNum-1:0] SpiRst_o,
|
|
|
+ output LD_o
|
|
|
|
|
|
);
|
|
|
|
|
|
@@ -61,10 +64,10 @@ wire [SpiNum-1:0]Mosi3;
|
|
|
wire [SpiNum-1:0] ten;
|
|
|
wire clk80;
|
|
|
wire clk61;
|
|
|
-wire Rst_i;
|
|
|
+wire initRst;
|
|
|
wire gclk;
|
|
|
-wire [15:0] baudRate [SpiNum-1:0];
|
|
|
-wire [19:0] baudRateexp;
|
|
|
+wire [0:15] baudRate [SpiNum-1:0];
|
|
|
+
|
|
|
|
|
|
//SPI0
|
|
|
wire [CmdRegWidth-1:0] Spi0Ctrl;
|
|
|
@@ -134,6 +137,30 @@ wire [CmdRegWidth-1:0] SpiTxRxEn;
|
|
|
wire [CmdRegWidth-1:0] GPIOA;
|
|
|
|
|
|
|
|
|
+wire [AddrRegWidth-1:0] toRegMapAddr;
|
|
|
+wire [CmdRegWidth-1:0] toRegMapData;
|
|
|
+wire toRegMapVal;
|
|
|
+
|
|
|
+wire [SpiNum-1:0] toFifoVal;
|
|
|
+wire [CmdRegWidth*SpiNum-1:0] toFifoData;
|
|
|
+
|
|
|
+wire [SpiNum-1:0] toSpiVal;
|
|
|
+wire [CmdRegWidth-1:0] toSpiData;
|
|
|
+
|
|
|
+wire [0:1] widthSel [SpiNum-1:0];
|
|
|
+wire [SpiNum-1:0] CPOL;
|
|
|
+wire [SpiNum-1:0] CPHA;
|
|
|
+wire [SpiNum-1:0] endianSel;
|
|
|
+wire [SpiNum-1:0] selSt;
|
|
|
+
|
|
|
+wire [0:5] stopDelay [SpiNum-1:0];
|
|
|
+wire [SpiNum-1:0] leadx;
|
|
|
+wire [SpiNum-1:0] lagx;
|
|
|
+wire [SpiNum-1:0] FifoRxRst;
|
|
|
+wire [SpiNum-1:0] FifoTxRst;
|
|
|
+wire [0:7] WordCntTx [SpiNum-1:0];
|
|
|
+wire [0:7] WordCntRx [SpiNum-1:0];
|
|
|
+
|
|
|
|
|
|
|
|
|
//================================================================================
|
|
|
@@ -148,13 +175,128 @@ assign Mosi2_o = Mosi2;
|
|
|
assign Mosi3_o = Mosi3;
|
|
|
assign Ss_o = Ss;
|
|
|
assign Sck_o = Sck;
|
|
|
-// assign baudRate[15:0][0] =Spi0Clk[15:0];
|
|
|
-// assign baudRate[15:0][1] =Spi1Clk[15:0];
|
|
|
-// assign baudRate[15:0][2] =Spi2Clk[15:0];
|
|
|
-// assign baudRate[15:0][3] =Spi3Clk[15:0];
|
|
|
-// assign baudRate[15:0][4] =Spi4Clk[15:0];
|
|
|
-// assign baudRate[15:0][5] =Spi5Clk[15:0];
|
|
|
-// assign baudRate[15:0][6] =Spi6Clk[15:0];
|
|
|
+
|
|
|
+assign widthSel[0] = Spi0Ctrl[6:5];
|
|
|
+assign widthSel[1] = Spi1Ctrl[6:5];
|
|
|
+assign widthSel[2] = Spi2Ctrl[6:5];
|
|
|
+assign widthSel[3] = Spi3Ctrl[6:5];
|
|
|
+assign widthSel[4] = Spi4Ctrl[6:5];
|
|
|
+assign widthSel[5] = Spi5Ctrl[6:5];
|
|
|
+assign widthSel[6] = Spi6Ctrl[6:5];
|
|
|
+
|
|
|
+assign CPOL[0] = Spi0Ctrl[2];
|
|
|
+assign CPOL[1] = Spi1Ctrl[2];
|
|
|
+assign CPOL[2] = Spi2Ctrl[2];
|
|
|
+assign CPOL[3] = Spi3Ctrl[2];
|
|
|
+assign CPOL[4] = Spi4Ctrl[2];
|
|
|
+assign CPOL[5] = Spi5Ctrl[2];
|
|
|
+assign CPOL[6] = Spi6Ctrl[2];
|
|
|
+
|
|
|
+assign CPHA[0] = Spi0Ctrl[1];
|
|
|
+assign CPHA[1] = Spi1Ctrl[1];
|
|
|
+assign CPHA[2] = Spi2Ctrl[1];
|
|
|
+assign CPHA[3] = Spi3Ctrl[1];
|
|
|
+assign CPHA[4] = Spi4Ctrl[1];
|
|
|
+assign CPHA[5] = Spi5Ctrl[1];
|
|
|
+assign CPHA[6] = Spi6Ctrl[1];
|
|
|
+
|
|
|
+assign endianSel[0] = Spi0Ctrl[8];
|
|
|
+assign endianSel[1] = Spi1Ctrl[8];
|
|
|
+assign endianSel[2] = Spi2Ctrl[8];
|
|
|
+assign endianSel[3] = Spi3Ctrl[8];
|
|
|
+assign endianSel[4] = Spi4Ctrl[8];
|
|
|
+assign endianSel[5] = Spi5Ctrl[8];
|
|
|
+assign endianSel[6] = Spi6Ctrl[8];
|
|
|
+
|
|
|
+assign selSt[0] = Spi0Ctrl[4];
|
|
|
+assign selSt[1] = Spi1Ctrl[4];
|
|
|
+assign selSt[2] = Spi2Ctrl[4];
|
|
|
+assign selSt[3] = Spi3Ctrl[4];
|
|
|
+assign selSt[4] = Spi4Ctrl[4];
|
|
|
+assign selSt[5] = Spi5Ctrl[4];
|
|
|
+assign selSt[6] = Spi6Ctrl[4];
|
|
|
+
|
|
|
+assign stopDelay[0] = Spi0CsDelay[7:2];
|
|
|
+assign stopDelay[1] = Spi1CsDelay[7:2];
|
|
|
+assign stopDelay[2] = Spi2CsDelay[7:2];
|
|
|
+assign stopDelay[3] = Spi3CsDelay[7:2];
|
|
|
+assign stopDelay[4] = Spi4CsDelay[7:2];
|
|
|
+assign stopDelay[5] = Spi5CsDelay[7:2];
|
|
|
+assign stopDelay[6] = Spi6CsDelay[7:2];
|
|
|
+
|
|
|
+assign leadx[0] = Spi0CsDelay[1];
|
|
|
+assign leadx[1] = Spi1CsDelay[1];
|
|
|
+assign leadx[2] = Spi2CsDelay[1];
|
|
|
+assign leadx[3] = Spi3CsDelay[1];
|
|
|
+assign leadx[4] = Spi4CsDelay[1];
|
|
|
+assign leadx[5] = Spi5CsDelay[1];
|
|
|
+assign leadx[6] = Spi6CsDelay[1];
|
|
|
+
|
|
|
+assign lagx[0] = Spi0CsDelay[0];
|
|
|
+assign lagx[1] = Spi1CsDelay[0];
|
|
|
+assign lagx[2] = Spi2CsDelay[0];
|
|
|
+assign lagx[3] = Spi3CsDelay[0];
|
|
|
+assign lagx[4] = Spi4CsDelay[0];
|
|
|
+assign lagx[5] = Spi5CsDelay[0];
|
|
|
+assign lagx[6] = Spi6CsDelay[0];
|
|
|
+
|
|
|
+assign baudRate[0] = Spi0Clk[15:0];
|
|
|
+assign baudRate[1] = Spi1Clk[15:0];
|
|
|
+assign baudRate[2] = Spi2Clk[15:0];
|
|
|
+assign baudRate[3] = Spi3Clk[15:0];
|
|
|
+assign baudRate[4] = Spi4Clk[15:0];
|
|
|
+assign baudRate[5] = Spi5Clk[15:0];
|
|
|
+assign baudRate[6] = Spi6Clk[15:0];
|
|
|
+
|
|
|
+
|
|
|
+assign SpiRst_o[0] = GPIOA[0];
|
|
|
+assign SpiRst_o[1] = GPIOA[1];
|
|
|
+assign SpiRst_o[2] = GPIOA[2];
|
|
|
+assign SpiRst_o[3] = GPIOA[3];
|
|
|
+assign SpiRst_o[4] = GPIOA[4];
|
|
|
+assign SpiRst_o[5] = GPIOA[5];
|
|
|
+assign SpiRst_o[6] = GPIOA[6];
|
|
|
+
|
|
|
+assign FifoRxRst[0] = Spi0RxFifoCtrl[0];
|
|
|
+assign FifoRxRst[1] = Spi1RxFifoCtrl[0];
|
|
|
+assign FifoRxRst[2] = Spi2RxFifoCtrl[0];
|
|
|
+assign FifoRxRst[3] = Spi3RxFifoCtrl[0];
|
|
|
+assign FifoRxRst[4] = Spi4RxFifoCtrl[0];
|
|
|
+assign FifoRxRst[5] = Spi5RxFifoCtrl[0];
|
|
|
+assign FifoRxRst[6] = Spi6RxFifoCtrl[0];
|
|
|
+
|
|
|
+assign FifoTxRst[0] = Spi0TxFifoCtrl[0];
|
|
|
+assign FifoTxRst[1] = Spi1TxFifoCtrl[0];
|
|
|
+assign FifoTxRst[2] = Spi2TxFifoCtrl[0];
|
|
|
+assign FifoTxRst[3] = Spi3TxFifoCtrl[0];
|
|
|
+assign FifoTxRst[4] = Spi4TxFifoCtrl[0];
|
|
|
+assign FifoTxRst[5] = Spi5TxFifoCtrl[0];
|
|
|
+assign FifoTxRst[6] = Spi6TxFifoCtrl[0];
|
|
|
+
|
|
|
+assign LD_i[0] = GPIOA[16];
|
|
|
+assign LD_i[1] = GPIOA[17];
|
|
|
+assign LD_i[2] = GPIOA[18];
|
|
|
+assign LD_i[3] = GPIOA[19];
|
|
|
+assign LD_i[4] = GPIOA[20];
|
|
|
+assign LD_i[5] = GPIOA[21];
|
|
|
+assign LD_i[6] = GPIOA[22];
|
|
|
+assign LD_o = LD_i[0]&LD_i[1]&LD_i[2]&LD_i[3]&LD_i[4]&LD_i[5]&LD_i[6];
|
|
|
+
|
|
|
+assign WordCntRx[0] = Spi0RxFifoCtrl[15:8];
|
|
|
+assign WordCntRx[1] = Spi1RxFifoCtrl[15:8];
|
|
|
+assign WordCntRx[2] = Spi2RxFifoCtrl[15:8];
|
|
|
+assign WordCntRx[3] = Spi3RxFifoCtrl[15:8];
|
|
|
+assign WordCntRx[4] = Spi4RxFifoCtrl[15:8];
|
|
|
+assign WordCntRx[5] = Spi5RxFifoCtrl[15:8];
|
|
|
+assign WordCntRx[6] = Spi6RxFifoCtrl[15:8];
|
|
|
+
|
|
|
+assign WordCntTx[0] = Spi0TxFifoCtrl[15:8];
|
|
|
+assign WordCntTx[1] = Spi1TxFifoCtrl[15:8];
|
|
|
+assign WordCntTx[2] = Spi2TxFifoCtrl[15:8];
|
|
|
+assign WordCntTx[3] = Spi3TxFifoCtrl[15:8];
|
|
|
+assign WordCntTx[4] = Spi4TxFifoCtrl[15:8];
|
|
|
+assign WordCntTx[5] = Spi5TxFifoCtrl[15:8];
|
|
|
+assign WordCntTx[6] = Spi6TxFifoCtrl[15:8];
|
|
|
|
|
|
|
|
|
//================================================================================
|
|
|
@@ -167,7 +309,7 @@ BUFG BUFG_inst (
|
|
|
);
|
|
|
|
|
|
|
|
|
- clk_wiz_0 ClkGen
|
|
|
+ clk_wiz_0 ClkGen
|
|
|
(
|
|
|
.s_axi_aclk (), // input s_axi_aclk
|
|
|
.s_axi_aresetn (), // input s_axi_aresetn,
|
|
|
@@ -190,11 +332,30 @@ BUFG BUFG_inst (
|
|
|
.s_axi_rready (), // input s_axi_rready,
|
|
|
// Clock out ports
|
|
|
.clk_out1(Clk100_i), // output clk_out1
|
|
|
+ // .clk_out2(clk61), // output clk_out2
|
|
|
// Status and control signals
|
|
|
.locked(), // output locked
|
|
|
// Clock in ports
|
|
|
.clk_in1(gclk)); // input clk_in1
|
|
|
|
|
|
+SmcDataMux SmcDataMuxer
|
|
|
+(
|
|
|
+ .Clk_i (gclk),
|
|
|
+ .Rst_i (initRst),
|
|
|
+
|
|
|
+ .SmcVal_i (1'b1),
|
|
|
+ .SmcData_i ({Data_i,Data_i}),
|
|
|
+ .SmcAddr_i ({Addr_i,1'b0}),
|
|
|
+
|
|
|
+ .ToRegMapVal_o (toRegMapVal),
|
|
|
+ .ToRegMapData_o (toRegMapData),
|
|
|
+ .ToRegMapAddr_o (toRegMapAddr),
|
|
|
+
|
|
|
+ .ToFifoVal_o (toFifoVal),
|
|
|
+ .ToFifoData_o (toFifoData)
|
|
|
+
|
|
|
+);
|
|
|
+
|
|
|
|
|
|
RegMap #(
|
|
|
.CmdRegWidth(32),
|
|
|
@@ -202,10 +363,10 @@ RegMap #(
|
|
|
)
|
|
|
RegMap_inst (
|
|
|
.Clk_i(gclk),
|
|
|
- .Rst_i(Rst_i),
|
|
|
- .Data_i(Data_i),
|
|
|
- .Addr_i(addr),
|
|
|
- .wrEn_i(writeEn_i),
|
|
|
+ .Rst_i(initRst),
|
|
|
+ .Data_i(toRegMapData),
|
|
|
+ .Addr_i(toRegMapAddr),
|
|
|
+ .wrEn_i(writeEn_i|toRegMapVal),
|
|
|
.rdEn_i(readEn_i),
|
|
|
.BE_i(BE_i),
|
|
|
.Led_o(Led_o),
|
|
|
@@ -286,23 +447,42 @@ genvar i;
|
|
|
|
|
|
generate
|
|
|
for (i = 0; i < SpiNum; i = i + 1) begin: SpiGen
|
|
|
+
|
|
|
+ DataFifoWrapper DataFifoWrapepr
|
|
|
+ (
|
|
|
+ .WrClk_i (gclk),
|
|
|
+ .RdClk_i (Clk100_i),
|
|
|
+ .Rst_i (initRst | FifoRxRst[i]),
|
|
|
+ .readEn_i (readEn_i),
|
|
|
+
|
|
|
+ .ToFifoVal_i (toFifoVal[i]),
|
|
|
+ .ToFifoData_i (toFifoData[32*i+:32]),
|
|
|
+
|
|
|
+ .ToSpiVal_o (toSpiVal[i]),
|
|
|
+ .ToSpiData_o (toSpiData[i])
|
|
|
+ );
|
|
|
+
|
|
|
QuadSPIm QuadSPIm_inst (
|
|
|
.Clk_i(Clk100_i),
|
|
|
.Start_i(ten[i]),
|
|
|
- .Rst_i(Rst_i|SpiRst_i[i]),
|
|
|
- .SPIdata(32'h2aaa00aa),
|
|
|
+ .Rst_i(initRst),
|
|
|
+ .SpiDataVal_i (toSpiVal),
|
|
|
+ // .SPIdata(32'h2aaa00aa),
|
|
|
+ .SPIdata(toSpiData[i]),
|
|
|
.Sck_o(Sck[i]),
|
|
|
.Ss_o(Ss[i]),
|
|
|
.Mosi0_i(Mosi0[i]),
|
|
|
.Mosi1_i(Mosi1[i]),
|
|
|
.Mosi2_i(Mosi2[i]),
|
|
|
.Mosi3_i(Mosi3[i]),
|
|
|
- .WidthSel_i(3),
|
|
|
- .PulsePol_i(0),
|
|
|
- .EndianSel_i(1),
|
|
|
- .LAG_i(0),
|
|
|
- .LEAD_i(0),
|
|
|
- .SELST_i(1)
|
|
|
+ .WidthSel_i(widthSel[i]),
|
|
|
+ .PulsePol_i(CPOL[i]),
|
|
|
+ .CPHA_i(CPHA[i]),
|
|
|
+ .EndianSel_i(endianSel[i]),
|
|
|
+ .LAG_i(lagx[i]),
|
|
|
+ .LEAD_i(leadx[i]),
|
|
|
+ .Stop_i(stopDelay[i]),
|
|
|
+ .SELST_i(selSt[i])
|
|
|
);
|
|
|
end
|
|
|
endgenerate
|
|
|
@@ -310,7 +490,7 @@ endgenerate
|
|
|
|
|
|
InitRst InitRst_inst (
|
|
|
.clk_i(gclk),
|
|
|
- .signal_o(Rst_i)
|
|
|
+ .signal_o(initRst)
|
|
|
|
|
|
);
|
|
|
|