|
|
@@ -1,4 +1,5 @@
|
|
|
-module SPIm (
|
|
|
+module SPIm
|
|
|
+(
|
|
|
input Clk_i,
|
|
|
input Rst_i,
|
|
|
input Start_i,
|
|
|
@@ -26,15 +27,10 @@ module SPIm (
|
|
|
//================================================================================
|
|
|
|
|
|
reg startFlag;
|
|
|
- reg startR;
|
|
|
- reg [31:0] trCnt;
|
|
|
reg valReg;
|
|
|
- reg valToRxFifo1;
|
|
|
reg lineBusy;
|
|
|
reg [5:0] ssCnt;
|
|
|
- reg Ss;
|
|
|
- reg [31:0]spiDataR;
|
|
|
- reg oldDataFlag;
|
|
|
+ reg ss;
|
|
|
|
|
|
reg ssR;
|
|
|
reg SSR;
|
|
|
@@ -43,15 +39,13 @@ module SPIm (
|
|
|
reg [2:0] delayCnt;
|
|
|
reg stopFlag;
|
|
|
|
|
|
- wire ssPol = SelSt_i ? Ss : ~Ss;
|
|
|
-
|
|
|
-
|
|
|
+ wire [31:0] txLenght = ssNum+Lag_i+Lead_i;
|
|
|
//================================================================================
|
|
|
// ASSIGNMENTS
|
|
|
//================================================================================
|
|
|
|
|
|
|
|
|
- assign Ss_o = ssPol;
|
|
|
+ assign Ss_o = ss;
|
|
|
|
|
|
//================================================================================
|
|
|
// CODING
|
|
|
@@ -66,7 +60,6 @@ module SPIm (
|
|
|
end
|
|
|
end
|
|
|
|
|
|
-
|
|
|
always @(*) begin
|
|
|
if (SelSt_i) begin
|
|
|
if (!Ss_o) begin
|
|
|
@@ -86,249 +79,359 @@ module SPIm (
|
|
|
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 @(posedge Clk_i) begin
|
|
|
- startR <= Start_i;
|
|
|
- end
|
|
|
-
|
|
|
- always @(*) begin
|
|
|
- if (Rst_i) begin
|
|
|
- valToRxFifo1 = 1'b0;
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (Start_i && !startR) begin
|
|
|
- valToRxFifo1 = 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- valToRxFifo1 = 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
- end
|
|
|
-
|
|
|
- always @(negedge Clk_i) begin
|
|
|
+ always @(negedge 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 else begin
|
|
|
+ if (stopFlag) begin
|
|
|
+ delayCnt <= delayCnt + 1'b1;
|
|
|
+ end else begin
|
|
|
+ delayCnt <= 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
|
|
|
- always @(posedge Clk_i) begin
|
|
|
+ always @(*) begin
|
|
|
if (Rst_i) begin
|
|
|
- stopFlag <= 1'b0;
|
|
|
+ stopFlag = 1'b0;
|
|
|
end
|
|
|
else begin
|
|
|
- if (SelSt_i) begin
|
|
|
- if (ssPol && !ssR) begin
|
|
|
- stopFlag <= 1'b1;
|
|
|
- end
|
|
|
- else if ( delayCnt == Stop_i) begin
|
|
|
- stopFlag <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (!ssPol && ssR) begin
|
|
|
- stopFlag <= 1'b1;
|
|
|
- end
|
|
|
- else if (delayCnt == Stop_i) begin
|
|
|
- stopFlag <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
+ if (Stop_i != 0) begin
|
|
|
+ if (SelSt_i) begin
|
|
|
+ if (ss && !ssR) begin
|
|
|
+ stopFlag = 1'b1;
|
|
|
+ end
|
|
|
+ else if (delayCnt == Stop_i-1) begin
|
|
|
+ stopFlag = 1'b0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ if (!ss && ssR) begin
|
|
|
+ stopFlag = 1'b1;
|
|
|
+ end
|
|
|
+ else if (delayCnt == Stop_i-1) begin
|
|
|
+ stopFlag = 1'b0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ stopFlag = 1'b0;
|
|
|
+ end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ reg [2:0] clkCtrlReg;
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
+ if (Rst_i) begin
|
|
|
+ clkCtrlReg <= 0;
|
|
|
+ end else begin
|
|
|
+ clkCtrlReg <= {SelSt_i,PulsePol_i,ClockPhase_i};
|
|
|
+ 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 <ssNum + Lag_i + Lag_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
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (PulsePol_i) begin
|
|
|
- if (ClockPhase_i) begin
|
|
|
- if (Lead_i == 0) begin
|
|
|
- if (ssPol && (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 (ssPol && (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 (ssPol && (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 (ssPol && (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 (ssPol && (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 (ssPol && (ssCnt <ssNum + Lag_i + Lag_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 (ssPol && (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 (ssPol && (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
|
|
|
-
|
|
|
+ if (Rst_i) begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end else begin
|
|
|
+ if (Stop_i!=0) begin
|
|
|
+ case (clkCtrlReg)
|
|
|
+ 0: begin
|
|
|
+ if (!Lag_i) begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (ssCnt > 0) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt >0 && ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ 1: begin
|
|
|
+ if (!Lag_i) begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (ssCnt > 0) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt >0 && ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ 2: begin
|
|
|
+ if (!Lag_i) begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (ssCnt > 0) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt >0 && ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ 3: begin
|
|
|
+ if (!Lag_i) begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (ssCnt > 0) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt >0 && ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ 4: begin
|
|
|
+ if (!Lag_i) begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ Sck_o = ~Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (ssCnt > 0) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt >0 && ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ 5: begin
|
|
|
+ if (!Lag_i) begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (ssCnt > 0) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt >0 && ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ 6: begin
|
|
|
+ if (!Lag_i) begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (ssCnt > 0) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt >0 && ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = !Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ 7: begin
|
|
|
+ if (!Lag_i) begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!Lead_i) begin
|
|
|
+ if (ssCnt > 0) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt >0 && ssCnt < txLenght-1) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ endcase
|
|
|
+ end else begin
|
|
|
+ if (startFlag) begin
|
|
|
+ if (SelSt_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ if (PulsePol_i) begin
|
|
|
+ if (ClockPhase_i) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ Sck_o = ~Clk_i;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ClockPhase_i) begin
|
|
|
+ Sck_o = ~Clk_i;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ Sck_o = 1'b0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ss) begin
|
|
|
+ if (PulsePol_i) begin
|
|
|
+ if (ClockPhase_i) begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ Sck_o = ~Clk_i;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ClockPhase_i) begin
|
|
|
+ Sck_o = ~Clk_i;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ Sck_o = Clk_i;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ Sck_o = 1'b0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ Sck_o = 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
|
|
|
always @(*) begin
|
|
|
if (Rst_i) begin
|
|
|
@@ -339,32 +442,32 @@ module SPIm (
|
|
|
if (!EndianSel_i) begin
|
|
|
case (WidthSel_i)
|
|
|
0 : begin
|
|
|
- Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
|
|
|
+ Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
|
|
|
end
|
|
|
1 : begin
|
|
|
- Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[15]):1'b0;
|
|
|
+ Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[15]):1'b0;
|
|
|
end
|
|
|
2 : begin
|
|
|
- Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[23]):1'b0;
|
|
|
+ Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[23]):1'b0;
|
|
|
end
|
|
|
3 : begin
|
|
|
- Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[31]):1'b0;
|
|
|
+ Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[31]):1'b0;
|
|
|
end
|
|
|
endcase
|
|
|
end
|
|
|
else begin
|
|
|
case (WidthSel_i)
|
|
|
0 : begin
|
|
|
- Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
+ Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
end
|
|
|
1 : begin
|
|
|
- Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
+ Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
end
|
|
|
2 : begin
|
|
|
- Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
+ Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
end
|
|
|
3 : begin
|
|
|
- Mosi0_o = (!Ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
+ Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
end
|
|
|
endcase
|
|
|
end
|
|
|
@@ -373,53 +476,49 @@ module SPIm (
|
|
|
if (!EndianSel_i) begin
|
|
|
case (WidthSel_i)
|
|
|
0 : begin
|
|
|
- Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
|
|
|
+ Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
|
|
|
end
|
|
|
1 : begin
|
|
|
- Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[15]):1'b0;
|
|
|
+ Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[15]):1'b0;
|
|
|
end
|
|
|
2 : begin
|
|
|
- Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[23]):1'b0;
|
|
|
+ Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[23]):1'b0;
|
|
|
end
|
|
|
3 : begin
|
|
|
- Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[31]):1'b0;
|
|
|
+ Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[31]):1'b0;
|
|
|
end
|
|
|
endcase
|
|
|
end
|
|
|
else begin
|
|
|
case (WidthSel_i)
|
|
|
0 : begin
|
|
|
- Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
+ Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
end
|
|
|
1 : begin
|
|
|
- Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
+ Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
end
|
|
|
2 : begin
|
|
|
- Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
+ Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
end
|
|
|
3 : begin
|
|
|
- Mosi0_o = (ssPol&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
+ Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
|
|
|
end
|
|
|
endcase
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
always @(posedge Clk_i) begin
|
|
|
- ssR <= ssPol;
|
|
|
- SSR <= Ss;
|
|
|
+ ssR <= ss;
|
|
|
end
|
|
|
|
|
|
-
|
|
|
always @(*) begin
|
|
|
if (Rst_i) begin
|
|
|
startFlag = 1'b0;
|
|
|
end
|
|
|
else begin
|
|
|
- if (Start_i && !stopFlag && !EmptyFlag_i) begin
|
|
|
+ if (Start_i && !stopFlag && !EmptyFlag_i ) begin
|
|
|
startFlag = 1'b1;
|
|
|
end
|
|
|
else begin
|
|
|
@@ -428,26 +527,18 @@ module SPIm (
|
|
|
end
|
|
|
end
|
|
|
|
|
|
- always @(*) begin
|
|
|
- if (SelSt_i) begin
|
|
|
- if (Ss_o && !ssR) begin
|
|
|
- valReg = 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- valReg = 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (!Ss_o&& ssR) begin
|
|
|
- valReg = 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- valReg = 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
+ always @(posedge Clk_i) begin
|
|
|
+ if (Rst_i) begin
|
|
|
+ valReg <= 0;
|
|
|
+ end else begin
|
|
|
+ if (ssCnt == txLenght-2) begin
|
|
|
+ valReg <= 1;
|
|
|
+ end else begin
|
|
|
+ valReg <= 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
|
|
|
-
|
|
|
always @(*) begin
|
|
|
if (Rst_i) begin
|
|
|
ssNum = 1'b0;
|
|
|
@@ -471,66 +562,150 @@ module SPIm (
|
|
|
end
|
|
|
|
|
|
|
|
|
- always @(negedge Clk_i) begin
|
|
|
+ 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;
|
|
|
+ ssCnt <= 0;
|
|
|
end
|
|
|
else begin
|
|
|
- if (ssCnt == ssNum-1 || !startFlag) begin
|
|
|
- ssCnt <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
+ if (SelSt_i) begin
|
|
|
+ if (!ss) begin
|
|
|
+ if (ssCnt != txLenght-1) begin
|
|
|
+ ssCnt <= ssCnt + 1;
|
|
|
+ end else begin
|
|
|
+ ssCnt <= 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ ssCnt <= 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ss) begin
|
|
|
+ if (ssCnt != txLenght-1) begin
|
|
|
+ ssCnt <= ssCnt + 1;
|
|
|
+ end else begin
|
|
|
+ ssCnt <= 0;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ ssCnt <= 0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- always @(negedge Clk_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
|
|
|
+ always @(negedge Clk_i) begin
|
|
|
+ if (Rst_i) begin
|
|
|
+ ss <= 1'b1;
|
|
|
+ end else begin
|
|
|
+ if (Stop_i != 0) begin
|
|
|
+ if (startFlag) begin
|
|
|
+ if (SelSt_i) begin
|
|
|
+ if (ssCnt != txLenght-1) begin
|
|
|
+ ss <= 1'b0;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ ss <= 1'b1;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ssCnt != txLenght-1) begin
|
|
|
+ ss <= 1'b1;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ ss <= 1'b0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (SelSt_i) begin
|
|
|
+ ss <= 1'b1;
|
|
|
+ end else begin
|
|
|
+ ss <= 1'b0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (startFlag) begin
|
|
|
+ if (SelSt_i) begin
|
|
|
+ ss <= 1'b0;
|
|
|
+ end else begin
|
|
|
+ ss <= 1'b1;
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (SelSt_i) begin
|
|
|
+ ss <= 1'b1;
|
|
|
+ end else begin
|
|
|
+ ss <= 1'b0;
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
-
|
|
|
always @(negedge Clk_i) begin
|
|
|
if (Rst_i) begin
|
|
|
mosiReg0 <= SpiData_i[31:0];
|
|
|
end
|
|
|
else begin
|
|
|
- if (!EndianSel_i) begin
|
|
|
- if (!SSR && (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
|
|
|
- mosiReg0 <= mosiReg0 << 1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- mosiReg0 <= SpiData_i[31:0];
|
|
|
- end
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (!SSR && (ssCnt > Lag_i && ssCnt < ssNum + Lag_i + Lead_i)) begin
|
|
|
- mosiReg0 <= mosiReg0 >> 1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- mosiReg0 <= SpiData_i[31:0];
|
|
|
- end
|
|
|
- end
|
|
|
+ if (SelSt_i) begin
|
|
|
+ if (!EndianSel_i) begin
|
|
|
+ if (Lag_i!=0) begin
|
|
|
+ if (!ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
|
|
|
+ mosiReg0 <= mosiReg0 << 1;
|
|
|
+ end else begin
|
|
|
+ mosiReg0 <= SpiData_i[31:0];
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!ss&& (ssCnt < txLenght-1)) begin
|
|
|
+ mosiReg0 <= mosiReg0 << 1;
|
|
|
+ end else begin
|
|
|
+ mosiReg0 <= SpiData_i[31:0];
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (Lag_i!=0) begin
|
|
|
+ if (!ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
|
|
|
+ mosiReg0 <= mosiReg0 >> 1;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ mosiReg0 <= SpiData_i[31:0];
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!ss&& (ssCnt < txLenght-1)) begin
|
|
|
+ mosiReg0 <= mosiReg0 << 1;
|
|
|
+ end else begin
|
|
|
+ mosiReg0 <= SpiData_i[31:0];
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (!EndianSel_i) begin
|
|
|
+ if (Lag_i!=0) begin
|
|
|
+ if (ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
|
|
|
+ mosiReg0 <= mosiReg0 << 1;
|
|
|
+ end else begin
|
|
|
+ mosiReg0 <= SpiData_i[31:0];
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ss&& (ssCnt < txLenght-1)) begin
|
|
|
+ mosiReg0 <= mosiReg0 << 1;
|
|
|
+ end else begin
|
|
|
+ mosiReg0 <= SpiData_i[31:0];
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (Lag_i!=0) begin
|
|
|
+ if (ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
|
|
|
+ mosiReg0 <= mosiReg0 >> 1;
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ mosiReg0 <= SpiData_i[31:0];
|
|
|
+ end
|
|
|
+ end else begin
|
|
|
+ if (ss&& (ssCnt < txLenght-1)) begin
|
|
|
+ mosiReg0 <= mosiReg0 << 1;
|
|
|
+ end else begin
|
|
|
+ mosiReg0 <= SpiData_i[31:0];
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
end
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- endmodule
|
|
|
+
|
|
|
+endmodule
|