module QuadSPIm( input Clk_i, input Rst_i, input Start_i, input EmptyFlag_i, input ClockPhase_i, input [31:0] SpiData_i, input SpiDataVal_i, input SelSt_i, input [1:0] WidthSel_i, input Lag_i, input Lead_i, input EndianSel_i, input [5:0] Stop_i, input PulsePol_i, output reg Mosi0_i, output reg Mosi1_i, output reg Mosi2_i, output reg Mosi3_i, output reg Sck_o, output reg Val_o, output Ss_o ); //================================================================================ // REG/WIRE //================================================================================ reg startFlag; reg startR; reg [31:0] trCnt; reg valReg; reg lineBusy; reg [5:0] ssCnt; reg ss; reg ssR; reg [31:0] spiDataR; reg oldDataFlag; reg [7:0] mosiReg0; reg [7:0] mosiReg1; reg [7:0] mosiReg2; reg [7:0] mosiReg3; reg [3:0] ssNum; reg [2:0] delayCnt; reg stopFlag; //================================================================================ // ASSIGNMENTS //================================================================================ assign Ss_o = ss; //================================================================================ // CODING //================================================================================ always @(*) begin if (Start_i) begin Val_o = valReg; end else begin Val_o = 1'b0; end end always @(*) begin if (SelSt_i) begin if (!ss) begin lineBusy = 1'b1; end else begin lineBusy = 1'b0; end end else begin if (ss) begin lineBusy = 1'b1; end else begin lineBusy = 1'b0; end end end // always @(posedge Clk_i) begin // if (Rst_i) begin // trCnt <= 1'b0; // end // else begin // if ( ssCnt == (ssNum + Lead_i + Lag_i)) begin // trCnt <= trCnt + 1'b1; // end // else if (oldDataFlag) begin // trCnt <= 1'b0; // end // end // end always @(posedge Clk_i) begin if (Rst_i) begin delayCnt <= 1'b0; end else begin if (stopFlag &&delayCnt < Stop_i) begin delayCnt <= delayCnt + 1'b1; end else begin delayCnt <= 1'b0; end end end always @(posedge Clk_i) begin if (Rst_i) begin stopFlag <= 1'b0; end else begin if (SelSt_i) begin if (ss && !ssR) begin stopFlag <= 1'b1; end else if ( delayCnt == Stop_i) begin stopFlag <= 1'b0; end end else begin if (!ss && ssR) begin stopFlag <= 1'b1; end else if (delayCnt == Stop_i) begin stopFlag <= 1'b0; end end end end always @(*) begin if (SelSt_i) begin if (PulsePol_i) begin if (ClockPhase_i) begin if (Lead_i == 0) begin if (!ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin Sck_o = ~(~Clk_i); end else begin Sck_o = 1'b0; end end else begin if (!ss && (ssCnt < ssNum+Lag_i+Lead_i && ssCnt > Lag_i)) begin Sck_o = ~(~Clk_i); end else begin Sck_o = 1'b0; end end end else begin if (Lead_i == 0) begin if (!ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin Sck_o = ~(Clk_i); end else begin Sck_o = 1'b0; end end else begin if (!ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin Sck_o = ~(Clk_i); end else begin Sck_o = 1'b0; end end end end else begin if (ClockPhase_i) begin if (Lead_i == 0) begin if (!ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin Sck_o = ~(Clk_i); end else begin Sck_o = 1'b0; end end else begin if (!ss && (ssCnt Lag_i)) begin Sck_o = ~(Clk_i); end else begin Sck_o = 1'b0; end end end else begin if (Lead_i == 0) begin if (!ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin Sck_o = ~(~Clk_i); end else begin Sck_o = 1'b0; end end else begin if (!ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin Sck_o = ~(~Clk_i); end else begin Sck_o = 1'b0; end end end end end else begin if (PulsePol_i) begin if (ClockPhase_i) begin if (Lead_i == 0) begin if (ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin Sck_o = ~(~Clk_i); end else begin Sck_o = 1'b0; end end else begin if (ss && (ssCnt < ssNum+Lag_i+Lead_i && ssCnt > Lag_i)) begin Sck_o = ~(~Clk_i); end else begin Sck_o = 1'b0; end end end else begin if (Lead_i == 0) begin if (ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin Sck_o = ~(Clk_i); end else begin Sck_o = 1'b0; end end else begin if (ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin Sck_o = ~(Clk_i); end else begin Sck_o = 1'b0; end end end end else begin if (ClockPhase_i) begin if (Lead_i == 0) begin if (ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin Sck_o = ~(Clk_i); end else begin Sck_o = 1'b0; end end else begin if (ss && (ssCnt Lag_i)) begin Sck_o = ~(Clk_i); end else begin Sck_o = 1'b0; end end end else begin if (Lead_i == 0) begin if (ss && (ssCnt <= ssNum+Lag_i+Lead_i && ssCnt > Lag_i) ) begin Sck_o = ~(~Clk_i); end else begin Sck_o = 1'b0; end end else begin if (ss && (ssCnt < ssNum + Lag_i + Lead_i && ssCnt > Lag_i)) begin Sck_o = ~(~Clk_i); end else begin Sck_o = 1'b0; end end end end end end always @(*) begin if (SelSt_i) begin if (EndianSel_i) begin case (WidthSel_i) 0 : begin Mosi0_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i) ) ? (mosiReg3[0]):1'b0; Mosi1_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0; Mosi2_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0; Mosi3_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0; end 1 : begin Mosi0_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0; Mosi1_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0; Mosi2_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0; Mosi3_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0; end 2 : begin Mosi0_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0; Mosi1_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0; Mosi2_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0; Mosi3_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0; end 3 : begin Mosi0_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0; Mosi1_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0; Mosi2_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0; Mosi3_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0; end endcase end else begin case (WidthSel_i) 0 : begin Mosi0_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[1]):1'b0; Mosi1_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[1]):1'b0; Mosi2_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[1]):1'b0; Mosi3_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[1]):1'b0; end 1 : begin Mosi0_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[3]):1'b0; Mosi1_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[3]):1'b0; Mosi2_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[3]):1'b0; Mosi3_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt >Lag_i))? (mosiReg3[3]):1'b0; end 2 : begin Mosi0_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[5]):1'b0; Mosi1_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[5]):1'b0; Mosi2_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[5]):1'b0; Mosi3_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[5]):1'b0; end 3 : begin Mosi0_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0; Mosi1_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[7]):1'b0; Mosi2_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[7]):1'b0; Mosi3_i = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[7]):1'b0; end endcase end end else begin if (EndianSel_i) begin case (WidthSel_i) 0 : begin Mosi0_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i) )?(mosiReg3[0]):1'b0; Mosi1_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0; Mosi2_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0; Mosi3_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0; end 1 : begin Mosi0_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0; Mosi1_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0; Mosi2_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0; Mosi3_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0; end 2 : begin Mosi0_i = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0; Mosi1_i = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0; Mosi2_i = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0; Mosi3_i = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0; end 3 : begin Mosi0_i = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0; Mosi1_i = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0; Mosi2_i = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0; Mosi3_i = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0; end endcase end else begin case (WidthSel_i) 0 : begin Mosi0_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[1]):1'b0; Mosi1_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[1]):1'b0; Mosi2_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[1]):1'b0; Mosi3_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[1]):1'b0; end 1 : begin Mosi0_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[3]):1'b0; Mosi1_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[3]):1'b0; Mosi2_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[3]):1'b0; Mosi3_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt >Lag_i))? (mosiReg3[3]):1'b0; end 2 : begin Mosi0_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[5]):1'b0; Mosi1_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[5]):1'b0; Mosi2_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[5]):1'b0; Mosi3_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[5]):1'b0; end 3 : begin Mosi0_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0; Mosi1_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[7]):1'b0; Mosi2_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[7]):1'b0; Mosi3_i = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[7]):1'b0; end endcase end end end always @(posedge Clk_i) begin ssR <= ss; end always @(*) begin if (SelSt_i) begin if (ss && !ssR) begin valReg = 1'b1; end else begin valReg = 1'b0; end end else begin if (!ss&& ssR) begin valReg = 1'b1; end else begin valReg = 1'b0; end end end always @(posedge Clk_i) begin if (valReg) begin spiDataR <= SpiData_i; end end // always @(*) begin // if (Rst_i) begin // oldDataFlag = 1'b0; // end // else begin // if (spiDataR == SpiData_i && (SpiData_i != 0) || EmptyFlag_i ) begin // oldDataFlag = 1'b1; // end // else begin // oldDataFlag = 1'b0; // end // end // end always @(*) begin if (Rst_i) begin startFlag = 1'b0; end else begin if (Start_i && !stopFlag && !EmptyFlag_i && !oldDataFlag ) begin startFlag = 1'b1; end else begin startFlag = 1'b0; end end end always @(*) begin if (Rst_i) begin ssNum = 1'b0; end else begin case (WidthSel_i) 0 : begin ssNum = 2; end 1 : begin ssNum = 4; end 2 : begin ssNum = 6; end 3 : begin ssNum = 8; end endcase end end always @(negedge Clk_i) begin if (Rst_i) begin ssCnt <= 1'b0; end else if (ssCnt < (ssNum+Lag_i+Lead_i) && startFlag ) begin ssCnt <= ssCnt + 1'b1; end else begin if (ssCnt == ssNum-1 || !startFlag) begin ssCnt <= 1'b0; end end end always @(negedge Clk_i) begin if (SelSt_i) begin if (Rst_i) begin ss <= 1'b1; end else begin if (ssCnt < (ssNum+Lag_i+Lead_i) && startFlag ) begin ss <= 1'b0; end else begin ss <= 1'b1; end end end else begin if (Rst_i) begin ss <= 1'b0; end else begin if (ssCnt < (ssNum+Lag_i+Lead_i) && startFlag ) begin ss <= 1'b1; end else begin ss <= 1'b0; end end end end always @(negedge Clk_i) begin if (Rst_i) begin mosiReg0 <= SpiData_i[31:24]; end else begin case (WidthSel_i) 3: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR && (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= { mosiReg0[6:0],1'b0 }; end else begin mosiReg0 <= SpiData_i[31:24]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= { mosiReg0[6:0],1'b0 }; end else begin mosiReg0 <= SpiData_i[31:24]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= {1'b0, mosiReg0[7:1] }; end else begin mosiReg0 <= SpiData_i[31:24]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= {1'b0, mosiReg0[7:1] }; end else begin mosiReg0 <= SpiData_i[31:24]; end end end end 2: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= { mosiReg0[4:0],1'b0 }; end else begin mosiReg0 <= SpiData_i[23:18]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= { mosiReg0[4:0],1'b0 }; end else begin mosiReg0 <= SpiData_i[23:18]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= {1'b0, mosiReg0[5:1] }; end else begin mosiReg0 <= SpiData_i[23:18]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= {1'b0, mosiReg0[5:1] }; end else begin mosiReg0 <= SpiData_i[23:18]; end end end end 1: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= { mosiReg0[2:0],1'b0 }; end else begin mosiReg0 <= SpiData_i[15:12]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= { mosiReg0[2:0],1'b0 }; end else begin mosiReg0 <= SpiData_i[15:12]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= {1'b0, mosiReg0[3:1] }; end else begin mosiReg0 <= SpiData_i[15:12]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= {1'b0, mosiReg0[3:1] }; end else begin mosiReg0 <= SpiData_i[15:12]; end end end end 0: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= { mosiReg0[0],1'b0 }; end else begin mosiReg0 <= SpiData_i[7:6]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= { mosiReg0[0],1'b0 }; end else begin mosiReg0 <= SpiData_i[7:6]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= {1'b0, mosiReg0[1:1] }; end else begin mosiReg0 <= SpiData_i[7:6]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg0 <= {1'b0, mosiReg0[1:1] }; end else begin mosiReg0 <= SpiData_i[7:6]; end end end end endcase end end always @(negedge Clk_i) begin if (Rst_i) begin mosiReg1 <= SpiData_i[23:16]; end else begin case(WidthSel_i) 3: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= { mosiReg1[6:0],1'b0 }; end else begin mosiReg1 <= SpiData_i[23:16]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= { mosiReg1[6:0],1'b0 }; end else begin mosiReg1 <= SpiData_i[23:16]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= {1'b0, mosiReg1[7:1] }; end else begin mosiReg1 <= SpiData_i[23:16]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= {1'b0, mosiReg1[7:1] }; end else begin mosiReg1 <= SpiData_i[23:16]; end end end end 2: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= { mosiReg1[4:0],1'b0 }; end else begin mosiReg1 <= SpiData_i[17:12]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= { mosiReg1[4:0],1'b0 }; end else begin mosiReg1 <= SpiData_i[17:12]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= {1'b0, mosiReg1[5:1] }; end else begin mosiReg1 <= SpiData_i[17:12]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= {1'b0, mosiReg1[5:1] }; end else begin mosiReg1 <= SpiData_i[17:12]; end end end end 1: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= { mosiReg1[2:0],1'b0 }; end else begin mosiReg1 <= SpiData_i[11:8]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= { mosiReg1[2:0],1'b0 }; end else begin mosiReg1 <= SpiData_i[11:8]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= {1'b0, mosiReg1[3:1] }; end else begin mosiReg1 <= SpiData_i[11:8]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= {1'b0, mosiReg1[3:1] }; end else begin mosiReg1 <= SpiData_i[11:8]; end end end end 0: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= { mosiReg1[0],1'b0 }; end else begin mosiReg1 <= SpiData_i[5:4]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= { mosiReg1[0],1'b0 }; end else begin mosiReg1 <= SpiData_i[5:4]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= {1'b0, mosiReg1[1:1] }; end else begin mosiReg1 <= SpiData_i[5:4]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg1 <= {1'b0, mosiReg1[1:1] }; end else begin mosiReg1 <= SpiData_i[5:4]; end end end end endcase end end always @(negedge Clk_i) begin if (Rst_i) begin mosiReg2 <= SpiData_i[15:8]; end else begin case(WidthSel_i) 3 : begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= { mosiReg2[6:0],1'b0 }; end else begin mosiReg2 <= SpiData_i[15:8]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= { mosiReg2[6:0],1'b0 }; end else begin mosiReg2 <= SpiData_i[15:8]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= {1'b0, mosiReg2[7:1] }; end else begin mosiReg2 <= SpiData_i[15:8]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= {1'b0, mosiReg2[7:1] }; end else begin mosiReg2 <= SpiData_i[15:8]; end end end end 2 : begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= { mosiReg2[4:0],1'b0 }; end else begin mosiReg2 <= SpiData_i[11:6]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= { mosiReg2[4:0],1'b0 }; end else begin mosiReg2 <= SpiData_i[11:6]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= {1'b0, mosiReg2[5:1] }; end else begin mosiReg2 <= SpiData_i[11:6]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= {1'b0, mosiReg2[5:1] }; end else begin mosiReg2 <= SpiData_i[11:6]; end end end end 1 : begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= { mosiReg2[2:0],1'b0 }; end else begin mosiReg2 <= SpiData_i[7:4]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= { mosiReg2[2:0],1'b0 }; end else begin mosiReg2 <= SpiData_i[7:4]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= {1'b0, mosiReg2[3:1] }; end else begin mosiReg2 <= SpiData_i[7:4]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= {1'b0, mosiReg2[3:1] }; end else begin mosiReg2 <= SpiData_i[7:4]; end end end end 0 : begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= { mosiReg2[0],1'b0 }; end else begin mosiReg2 <= SpiData_i[3:2]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= { mosiReg2[0],1'b0 }; end else begin mosiReg2 <= SpiData_i[3:2]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= {1'b0, mosiReg2[1:1] }; end else begin mosiReg2 <= SpiData_i[3:2]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg2 <= {1'b0, mosiReg2[1:1] }; end else begin mosiReg2 <= SpiData_i[3:2]; end end end end endcase end end always @(negedge Clk_i) begin if (Rst_i) begin mosiReg3 <= SpiData_i[7:0]; end else begin case (WidthSel_i) 3: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= { mosiReg3[6:0],1'b0 }; end else begin mosiReg3 <= SpiData_i[7:0]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= { mosiReg3[6:0],1'b0 }; end else begin mosiReg3 <= SpiData_i[7:0]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= {1'b0, mosiReg3[7:1] }; end else begin mosiReg3 <= SpiData_i[7:0]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= {1'b0, mosiReg3[7:1] }; end else begin mosiReg3 <= SpiData_i[7:0]; end end end end 2: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= { mosiReg3[4:0],1'b0 }; end else begin mosiReg3 <= SpiData_i[5:0]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= { mosiReg3[4:0],1'b0 }; end else begin mosiReg3 <= SpiData_i[5:0]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= {1'b0, mosiReg3[5:1] }; end else begin mosiReg3 <= SpiData_i[5:0]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= {1'b0, mosiReg3[5:1] }; end else begin mosiReg3 <= SpiData_i[5:0]; end end end end 1: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= { mosiReg3[2:0],1'b0 }; end else begin mosiReg3 <= SpiData_i[3:0]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= { mosiReg3[2:0],1'b0 }; end else begin mosiReg3 <= SpiData_i[3:0]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= {1'b0, mosiReg3[3:1] }; end else begin mosiReg3 <= SpiData_i[3:0]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= {1'b0, mosiReg3[3:1] }; end else begin mosiReg3 <= SpiData_i[3:0]; end end end end 0: begin if (!EndianSel_i) begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= { mosiReg3[0],1'b0 }; end else begin mosiReg3 <= SpiData_i[1:0]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= { mosiReg3[0],1'b0 }; end else begin mosiReg3 <= SpiData_i[1:0]; end end end else begin if (SelSt_i) begin if (!ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= {1'b0, mosiReg3[1:1] }; end else begin mosiReg3 <= SpiData_i[1:0]; end end else begin if (ssR&& (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin mosiReg3 <= {1'b0, mosiReg3[1:1] }; end else begin mosiReg3 <= SpiData_i[1:0]; end end end end endcase end end endmodule