Browse Source

Переработаны модули QuadSpiM и SpiM. Написан тестбенч для этих модулей. Требуется проверка в железе.

ChStepan 1 year ago
parent
commit
a4f8d1f619
3 changed files with 232 additions and 206 deletions
  1. 181 177
      sources_1/new/QuadSPI/QuadSPIm.v
  2. 28 10
      sources_1/new/QuadSPI/QuadSPImTb.v
  3. 23 19
      sources_1/new/SpiR/SPIm.v

+ 181 - 177
sources_1/new/QuadSPI/QuadSPIm.v

@@ -441,56 +441,56 @@ module QuadSPIm
             if (EndianSel_i) begin 
                 case (WidthSel_i) 
                     0 : begin 
-                        Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i) ) ? (mosiReg3[0]):1'b0;
-                        Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
-                        Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
-                        Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
+                        Mosi0_o = (!ss) ? (mosiReg3[0]):1'b0;
+                        Mosi1_o = (!ss) ? (mosiReg2[0]):1'b0;
+                        Mosi2_o = (!ss) ? (mosiReg1[0]):1'b0;
+                        Mosi3_o = (!ss) ? (mosiReg0[0]):1'b0;
                     end
                     1 : begin 
-                        Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
-                        Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
-                        Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
-                        Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
+                        Mosi0_o = (!ss) ? (mosiReg3[0]):1'b0;
+                        Mosi1_o = (!ss) ? (mosiReg2[0]):1'b0;
+                        Mosi2_o = (!ss) ? (mosiReg1[0]):1'b0;
+                        Mosi3_o = (!ss) ? (mosiReg0[0]):1'b0;
                     end
                     2 : begin 
-                        Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
-                        Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
-                        Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
-                        Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
+                        Mosi0_o = (!ss) ? (mosiReg3[0]):1'b0;
+                        Mosi1_o = (!ss) ? (mosiReg2[0]):1'b0;
+                        Mosi2_o = (!ss) ? (mosiReg1[0]):1'b0;
+                        Mosi3_o = (!ss) ? (mosiReg0[0]):1'b0;
                     end
                     3 : begin 
-                        Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
-                        Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
-                        Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
-                        Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
+                        Mosi0_o = (!ss) ? (mosiReg3[0]):1'b0;
+                        Mosi1_o = (!ss) ? (mosiReg2[0]):1'b0;
+                        Mosi2_o = (!ss) ? (mosiReg1[0]):1'b0;
+                        Mosi3_o = (!ss) ? (mosiReg0[0]):1'b0;
                     end
                 endcase
             end
             else begin 
                 case (WidthSel_i)
                     0 : begin
-                        Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[1]):1'b0;
-                        Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[1]):1'b0;
-                        Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[1]):1'b0;
-                        Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[1]):1'b0;
+                        Mosi0_o = (!ss)? (mosiReg0[1]):1'b0;
+                        Mosi1_o = (!ss)? (mosiReg1[1]):1'b0;
+                        Mosi2_o = (!ss)? (mosiReg2[1]):1'b0;
+                        Mosi3_o = (!ss)? (mosiReg3[1]):1'b0;
                     end
                     1 : begin
-                        Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[3]):1'b0;
-                        Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[3]):1'b0;
-                        Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[3]):1'b0;
-                        Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt >Lag_i))? (mosiReg3[3]):1'b0;
+                        Mosi0_o = (!ss)? (mosiReg0[3]):1'b0;
+                        Mosi1_o = (!ss)? (mosiReg1[3]):1'b0;
+                        Mosi2_o = (!ss)? (mosiReg2[3]):1'b0;
+                        Mosi3_o = (!ss)? (mosiReg3[3]):1'b0;
                     end
                     2 : begin
-                        Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[5]):1'b0;
-                        Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[5]):1'b0;
-                        Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[5]):1'b0;
-                        Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[5]):1'b0;
+                        Mosi0_o = (!ss)? (mosiReg0[5]):1'b0;
+                        Mosi1_o = (!ss)? (mosiReg1[5]):1'b0;
+                        Mosi2_o = (!ss)? (mosiReg2[5]):1'b0;
+                        Mosi3_o = (!ss)? (mosiReg3[5]):1'b0;
                     end
                     3 : begin
-                        Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
-                        Mosi1_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[7]):1'b0;
-                        Mosi2_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[7]):1'b0;
-                        Mosi3_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[7]):1'b0;
+                        Mosi0_o = (!ss)? (mosiReg0[7]):1'b0;
+                        Mosi1_o = (!ss)? (mosiReg1[7]):1'b0;
+                        Mosi2_o = (!ss)? (mosiReg2[7]):1'b0;
+                        Mosi3_o = (!ss)? (mosiReg3[7]):1'b0;
                     end
                 endcase
             end
@@ -499,56 +499,56 @@ module QuadSPIm
             if (EndianSel_i) begin 
                 case (WidthSel_i) 
                     0 : begin 
-                        Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i) )?(mosiReg3[0]):1'b0;
-                        Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
-                        Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
-                        Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
+                        Mosi0_o = (ss) ? (mosiReg3[0]):1'b0;
+                        Mosi1_o = (ss) ? (mosiReg2[0]):1'b0;
+                        Mosi2_o = (ss) ? (mosiReg1[0]):1'b0;
+                        Mosi3_o = (ss) ? (mosiReg0[0]):1'b0;
                     end
                     1 : begin 
-                        Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
-                        Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
-                        Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
-                        Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
+                        Mosi0_o = (ss) ? (mosiReg3[0]):1'b0;
+                        Mosi1_o = (ss) ? (mosiReg2[0]):1'b0;
+                        Mosi2_o = (ss) ? (mosiReg1[0]):1'b0;
+                        Mosi3_o = (ss) ? (mosiReg0[0]):1'b0;
                     end
                     2 : begin
-                        Mosi0_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
-                        Mosi1_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
-                        Mosi2_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
-                        Mosi3_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
+                        Mosi0_o = (ss) ? (mosiReg3[0]):1'b0;
+                        Mosi1_o = (ss) ? (mosiReg2[0]):1'b0;
+                        Mosi2_o = (ss) ? (mosiReg1[0]):1'b0;
+                        Mosi3_o = (ss) ? (mosiReg0[0]):1'b0;
                     end
                     3 : begin 
-                        Mosi0_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg3[0]):1'b0;
-                        Mosi1_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg2[0]):1'b0;
-                        Mosi2_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg1[0]):1'b0;
-                        Mosi3_o = (ss && (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i)) ? (mosiReg0[0]):1'b0;
+                        Mosi0_o = (ss) ? (mosiReg3[0]):1'b0;
+                        Mosi1_o = (ss) ? (mosiReg2[0]):1'b0;
+                        Mosi2_o = (ss) ? (mosiReg1[0]):1'b0;
+                        Mosi3_o = (ss) ? (mosiReg0[0]):1'b0;
                     end
                 endcase
             end
             else begin 
                 case (WidthSel_i)
                     0 : begin
-                        Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[1]):1'b0;
-                        Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[1]):1'b0;
-                        Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[1]):1'b0;
-                        Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[1]):1'b0;
+                        Mosi0_o = (ss)? (mosiReg0[1]):1'b0;
+                        Mosi1_o = (ss)? (mosiReg1[1]):1'b0;
+                        Mosi2_o = (ss)? (mosiReg2[1]):1'b0;
+                        Mosi3_o = (ss)? (mosiReg3[1]):1'b0;
                     end
                     1 : begin
-                        Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[3]):1'b0;
-                        Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[3]):1'b0;
-                        Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[3]):1'b0;
-                        Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt >Lag_i))? (mosiReg3[3]):1'b0;
+                        Mosi0_o = (ss)? (mosiReg0[3]):1'b0;
+                        Mosi1_o = (ss)? (mosiReg1[3]):1'b0;
+                        Mosi2_o = (ss)? (mosiReg2[3]):1'b0;
+                        Mosi3_o = (ss)? (mosiReg3[3]):1'b0;
                     end
                     2 : begin
-                        Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[5]):1'b0;
-                        Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[5]):1'b0;
-                        Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[5]):1'b0;
-                        Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[5]):1'b0;
+                        Mosi0_o = (ss)? (mosiReg0[5]):1'b0;
+                        Mosi1_o = (ss)? (mosiReg1[5]):1'b0;
+                        Mosi2_o = (ss)? (mosiReg2[5]):1'b0;
+                        Mosi3_o = (ss)? (mosiReg3[5]):1'b0;
                     end
                     3 : begin
-                        Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[7]):1'b0;
-                        Mosi1_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg1[7]):1'b0;
-                        Mosi2_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg2[7]):1'b0;
-                        Mosi3_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg3[7]):1'b0;
+                        Mosi0_o = (ss)? (mosiReg0[7]):1'b0;
+                        Mosi1_o = (ss)? (mosiReg1[7]):1'b0;
+                        Mosi2_o = (ss)? (mosiReg2[7]):1'b0;
+                        Mosi3_o = (ss)? (mosiReg3[7]):1'b0;
                     end
                 endcase
             end
@@ -564,7 +564,11 @@ module QuadSPIm
 			valReg <= 0;
 		end else begin
 			if (ssCnt == txLenght-2) begin
-				valReg <= 1;
+				if (!valReg) begin
+					valReg <= 1;
+				end else begin
+					valReg <= 0;
+				end
 			end else begin
 				valReg <= 0;
 			end
@@ -697,10 +701,10 @@ module QuadSPIm
                     if (SelSt_i) begin 
 						if (Lag_i != 0) begin
 							if (!ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[6:0],1'b0 };
-								mosiReg2 <= { mosiReg2[6:0],1'b0 };
-								mosiReg1 <= { mosiReg1[6:0],1'b0 };
-								mosiReg0 <= { mosiReg0[6:0],1'b0 };
+								mosiReg3 <= {mosiReg3[6:0],1'b0};
+								mosiReg2 <= {mosiReg2[6:0],1'b0};
+								mosiReg1 <= {mosiReg1[6:0],1'b0};
+								mosiReg0 <= {mosiReg0[6:0],1'b0};
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[7:0];
@@ -710,10 +714,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[6:0],1'b0 };
-								mosiReg2 <= { mosiReg2[6:0],1'b0 };
-								mosiReg1 <= { mosiReg1[6:0],1'b0 };
-								mosiReg0 <= { mosiReg0[6:0],1'b0 };
+								mosiReg3 <= {mosiReg3[6:0],1'b0};
+								mosiReg2 <= {mosiReg2[6:0],1'b0};
+								mosiReg1 <= {mosiReg1[6:0],1'b0};
+								mosiReg0 <= {mosiReg0[6:0],1'b0};
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[7:0];
@@ -726,10 +730,10 @@ module QuadSPIm
                     else begin 
 						if (Lag_i != 0) begin
 							if (ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[6:0],1'b0 };
-								mosiReg2 <= { mosiReg2[6:0],1'b0 };
-								mosiReg1 <= { mosiReg1[6:0],1'b0 };
-								mosiReg0 <= { mosiReg0[6:0],1'b0 };
+								mosiReg3 <= {mosiReg3[6:0],1'b0};
+								mosiReg2 <= {mosiReg2[6:0],1'b0};
+								mosiReg1 <= {mosiReg1[6:0],1'b0};
+								mosiReg0 <= {mosiReg0[6:0],1'b0};
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[7:0];
@@ -739,10 +743,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[6:0],1'b0 };
-								mosiReg2 <= { mosiReg2[6:0],1'b0 };
-								mosiReg1 <= { mosiReg1[6:0],1'b0 };
-								mosiReg0 <= { mosiReg0[6:0],1'b0 };
+								mosiReg3 <= {mosiReg3[6:0],1'b0};
+								mosiReg2 <= {mosiReg2[6:0],1'b0};
+								mosiReg1 <= {mosiReg1[6:0],1'b0};
+								mosiReg0 <= {mosiReg0[6:0],1'b0};
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[7:0];
@@ -819,10 +823,10 @@ module QuadSPIm
                     if (SelSt_i) begin  
 						if (Lag_i != 0) begin
 							if (!ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[4:0],1'b0 };
-								mosiReg2 <= { mosiReg2[4:0],1'b0 };
-								mosiReg1 <= { mosiReg1[4:0],1'b0 };
-								mosiReg0 <= { mosiReg0[4:0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[5:0];
@@ -832,10 +836,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[4:0],1'b0 };
-								mosiReg2 <= { mosiReg2[4:0],1'b0 };
-								mosiReg1 <= { mosiReg1[4:0],1'b0 };
-								mosiReg0 <= { mosiReg0[4:0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[5:0];
@@ -848,10 +852,10 @@ module QuadSPIm
                     else begin 
 						if (Lag_i != 0) begin
 							if (ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin 
-								mosiReg3 <= { mosiReg3[4:0],1'b0 };
-								mosiReg2 <= { mosiReg2[4:0],1'b0 };
-								mosiReg1 <= { mosiReg1[4:0],1'b0 };
-								mosiReg0 <= { mosiReg0[4:0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[5:0];
@@ -861,10 +865,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[4:0],1'b0 };
-								mosiReg2 <= { mosiReg2[4:0],1'b0 };
-								mosiReg1 <= { mosiReg1[4:0],1'b0 };
-								mosiReg0 <= { mosiReg0[4:0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[5:0];
@@ -879,10 +883,10 @@ module QuadSPIm
                     if (SelSt_i) begin  
 						if (Lag_i != 0) begin
 							if (!ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
-								mosiReg3 <= {1'b0, mosiReg3[5:1] };
-								mosiReg2 <= {1'b0, mosiReg2[5:1] };
-								mosiReg1 <= {1'b0, mosiReg1[5:1] };
-								mosiReg0 <= {1'b0, mosiReg0[5:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[5:0];
@@ -892,10 +896,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= {1'b0, mosiReg3[5:1] };
-								mosiReg2 <= {1'b0, mosiReg2[5:1] };
-								mosiReg1 <= {1'b0, mosiReg1[5:1] };
-								mosiReg0 <= {1'b0, mosiReg0[5:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[5:0];
@@ -908,10 +912,10 @@ module QuadSPIm
                     else begin 
 						if (Lag_i != 0) begin
 							if (ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin 
-								mosiReg3 <= {1'b0, mosiReg3[5:1] };
-								mosiReg2 <= {1'b0, mosiReg2[5:1] };
-								mosiReg1 <= {1'b0, mosiReg1[5:1] };
-								mosiReg0 <= {1'b0, mosiReg0[5:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[5:0];
@@ -921,10 +925,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= {1'b0, mosiReg3[5:1] };
-								mosiReg2 <= {1'b0, mosiReg2[5:1] };
-								mosiReg1 <= {1'b0, mosiReg1[5:1] };
-								mosiReg0 <= {1'b0, mosiReg0[5:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[5:0];
@@ -941,10 +945,10 @@ module QuadSPIm
                     if (SelSt_i) begin  
 						if (Lag_i != 0) begin
 							if (!ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[2:0],1'b0 };
-								mosiReg2 <= { mosiReg2[2:0],1'b0 };
-								mosiReg1 <= { mosiReg1[2:0],1'b0 };
-								mosiReg0 <= { mosiReg0[2:0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[3:0];
@@ -954,10 +958,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[2:0],1'b0 };
-								mosiReg2 <= { mosiReg2[2:0],1'b0 };
-								mosiReg1 <= { mosiReg1[2:0],1'b0 };
-								mosiReg0 <= { mosiReg0[2:0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[3:0];
@@ -970,10 +974,10 @@ module QuadSPIm
                     else begin 
 						if (Lag_i != 0) begin
 							if (ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin 
-								mosiReg3 <= { mosiReg3[2:0],1'b0 };
-								mosiReg2 <= { mosiReg2[2:0],1'b0 };
-								mosiReg1 <= { mosiReg1[2:0],1'b0 };
-								mosiReg0 <= { mosiReg0[2:0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[3:0];
@@ -983,10 +987,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[2:0],1'b0 };
-								mosiReg2 <= { mosiReg2[2:0],1'b0 };
-								mosiReg1 <= { mosiReg1[2:0],1'b0 };
-								mosiReg0 <= { mosiReg0[2:0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[3:0];
@@ -1001,10 +1005,10 @@ module QuadSPIm
                     if (SelSt_i) begin  
 						if (Lag_i != 0) begin
 							if (!ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
-								mosiReg3 <= {1'b0, mosiReg3[3:1] };
-								mosiReg2 <= {1'b0, mosiReg2[3:1] };
-								mosiReg1 <= {1'b0, mosiReg1[3:1] };
-								mosiReg0 <= {1'b0, mosiReg0[3:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[3:0];
@@ -1014,10 +1018,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= {1'b0, mosiReg3[3:1] };
-								mosiReg2 <= {1'b0, mosiReg2[3:1] };
-								mosiReg1 <= {1'b0, mosiReg1[3:1] };
-								mosiReg0 <= {1'b0, mosiReg0[3:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[3:0];
@@ -1030,10 +1034,10 @@ module QuadSPIm
                     else begin 
 						if (Lag_i != 0) begin
 							if (ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin 
-								mosiReg3 <= {1'b0, mosiReg3[3:1] };
-								mosiReg2 <= {1'b0, mosiReg2[3:1] };
-								mosiReg1 <= {1'b0, mosiReg1[3:1] };
-								mosiReg0 <= {1'b0, mosiReg0[3:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[3:0];
@@ -1043,10 +1047,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= {1'b0, mosiReg3[3:1] };
-								mosiReg2 <= {1'b0, mosiReg2[3:1] };
-								mosiReg1 <= {1'b0, mosiReg1[3:1] };
-								mosiReg0 <= {1'b0, mosiReg0[3:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[3:0];
@@ -1063,10 +1067,10 @@ module QuadSPIm
                     if (SelSt_i) begin  
 						if (Lag_i != 0) begin
 							if (!ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[0],1'b0 };
-								mosiReg2 <= { mosiReg2[0],1'b0 };
-								mosiReg1 <= { mosiReg1[0],1'b0 };
-								mosiReg0 <= { mosiReg0[0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[1:0];
@@ -1076,10 +1080,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[0],1'b0 };
-								mosiReg2 <= { mosiReg2[0],1'b0 };
-								mosiReg1 <= { mosiReg1[0],1'b0 };
-								mosiReg0 <= { mosiReg0[0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[1:0];
@@ -1092,10 +1096,10 @@ module QuadSPIm
                     else begin 
 						if (Lag_i != 0) begin
 							if (ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin 
-								mosiReg3 <= { mosiReg3[0],1'b0 };
-								mosiReg2 <= { mosiReg2[0],1'b0 };
-								mosiReg1 <= { mosiReg1[0],1'b0 };
-								mosiReg0 <= { mosiReg0[0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[1:0];
@@ -1105,10 +1109,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= { mosiReg3[0],1'b0 };
-								mosiReg2 <= { mosiReg2[0],1'b0 };
-								mosiReg1 <= { mosiReg1[0],1'b0 };
-								mosiReg0 <= { mosiReg0[0],1'b0 };
+								mosiReg3 <= mosiReg3 << 1;
+								mosiReg2 <= mosiReg2 << 1;
+								mosiReg1 <= mosiReg1 << 1;
+								mosiReg0 <= mosiReg0 << 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[1:0];
@@ -1123,10 +1127,10 @@ module QuadSPIm
                     if (SelSt_i) begin  
 						if (Lag_i != 0) begin
 							if (!ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin
-								mosiReg3 <= {1'b0, mosiReg3[1:1] };
-								mosiReg2 <= {1'b0, mosiReg2[1:1] };
-								mosiReg1 <= {1'b0, mosiReg1[1:1] };
-								mosiReg0 <= {1'b0, mosiReg0[1:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[1:0];
@@ -1136,10 +1140,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= {1'b0, mosiReg3[1:1] };
-								mosiReg2 <= {1'b0, mosiReg2[1:1] };
-								mosiReg1 <= {1'b0, mosiReg1[1:1] };
-								mosiReg0 <= {1'b0, mosiReg0[1:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[1:0];
@@ -1152,10 +1156,10 @@ module QuadSPIm
                     else begin 
 						if (Lag_i != 0) begin
 							if (ss&& (ssCnt > 0 && ssCnt < txLenght-1)) begin 
-								mosiReg3 <= {1'b0, mosiReg3[1:1] };
-								mosiReg2 <= {1'b0, mosiReg2[1:1] };
-								mosiReg1 <= {1'b0, mosiReg1[1:1] };
-								mosiReg0 <= {1'b0, mosiReg0[1:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[1:0];
@@ -1165,10 +1169,10 @@ module QuadSPIm
 							end
 						end else begin
 							if (!ss&& (ssCnt < txLenght-1)) begin
-								mosiReg3 <= {1'b0, mosiReg3[1:1] };
-								mosiReg2 <= {1'b0, mosiReg2[1:1] };
-								mosiReg1 <= {1'b0, mosiReg1[1:1] };
-								mosiReg0 <= {1'b0, mosiReg0[1:1] };
+								mosiReg3 <= mosiReg3 >> 1;
+								mosiReg2 <= mosiReg2 >> 1;
+								mosiReg1 <= mosiReg1 >> 1;
+								mosiReg0 <= mosiReg0 >> 1;
 							end
 							else begin 
 								mosiReg3 <= SpiData_i[1:0];

+ 28 - 10
sources_1/new/QuadSPI/QuadSPImTb.v

@@ -11,7 +11,7 @@ parameter CLK_PERIOD = 8.13; // Clock period in ns
 reg rst;
 reg clk;
 
-localparam [31:0] startData = 32'h1;
+localparam [31:0] startData = 32'h01010101;
 // localparam [31:0] startData = 32'h0A0B0C0D;
 
 reg [31:0] data;
@@ -21,9 +21,9 @@ wire [1:0] widthSel  = 2'h3;
 wire clockPol = 1'b0;
 wire clockPhase = 1'b0;
 wire endianSel = 1'b0;
-wire lag = 1'b0;
-wire lead = 1'b0;
-wire [5:0] stopDelay = 6'h0;
+wire lag = 1'b1;
+wire lead = 1'b1;
+wire [5:0] stopDelay = 6'h1;
 wire selSt = 1'b1;
 wire val;
 wire valS;
@@ -65,15 +65,33 @@ always @(posedge clk) begin
 	if (rst) begin
 		data <= startData;
 	end else if (val) begin
-		data <= data+32'h1000;
+		data <= data+32'h10;
 	end
 end
 
 always @(posedge clk) begin
 	if (rst) begin
-		dataS <= startData;
-	end else if (valS) begin
-		dataS <= dataS+32'h1000;
+		dataS <= 32'h0000000A;
+	// end else if (valS) begin
+	end else begin
+		case(widthSel) 
+			0:	begin
+					// dataS <= dataS+32'h10;
+					dataS <= 32'h0000000A;
+				end
+			1:	begin
+					// dataS <= dataS+32'h100;
+					dataS <= 32'h00000A0A;
+				end
+			2:	begin
+					// dataS <= dataS+32'h100;
+					dataS <= 32'h000A0A0A;
+				end
+			3:	begin
+					// dataS <= dataS+32'h100;
+					dataS <= 32'h0A0A0A0A;
+				end
+		endcase
 	end
 end
 
@@ -83,7 +101,7 @@ QuadSPIm QuadSPIm
 	.Start_i(start),
 	.Rst_i(rst),
 	.EmptyFlag_i(fifoEmpty),
-	.SpiData_i(data),
+	.SpiData_i(dataS),
 	.Sck_o(),
 	.Ss_o(),
 	.Mosi0_o(),
@@ -107,7 +125,7 @@ SPIm Spi
     .Rst_i			(rst),
     .Start_i		(start),
     .EmptyFlag_i	(fifoEmpty),
-    .ClockPhase_i	(clockPol),
+    .ClockPhase_i	(clockPhase),
     .SpiData_i		(dataS),
     .SelSt_i		(selSt),
     .WidthSel_i		(widthSel),

+ 23 - 19
sources_1/new/SpiR/SPIm.v

@@ -442,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)? mosiReg0[7]:1'b0;
                         end
                         1 : begin
-                            Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[15]):1'b0;
+                            Mosi0_o = (!ss)? (mosiReg0[15]):1'b0;
                         end
                         2 : begin
-                            Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[23]):1'b0;
+                            Mosi0_o = (!ss)? (mosiReg0[23]):1'b0;
                         end
                         3 : begin
-                            Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[31]):1'b0;
+                            Mosi0_o = (!ss)? (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)? mosiReg0[0]:1'b0;
                         end
                         1 : begin
-                            Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                            Mosi0_o = (!ss)? (mosiReg0[0]):1'b0;
                         end
                         2 : begin
-                            Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                            Mosi0_o = (!ss)? (mosiReg0[0]):1'b0;
                         end
                         3 : begin
-                            Mosi0_o = (!ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                            Mosi0_o = (!ss)? (mosiReg0[0]):1'b0;
                         end
                     endcase
                 end
@@ -476,32 +476,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)? (mosiReg0[7]):1'b0;
                         end
                         1 : begin
-                            Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[15]):1'b0;
+                            Mosi0_o = (ss)? (mosiReg0[15]):1'b0;
                         end
                         2 : begin
-                            Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[23]):1'b0;
+                            Mosi0_o = (ss)? (mosiReg0[23]):1'b0;
                         end
                         3 : begin
-                            Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[31]):1'b0;
+                            Mosi0_o = (ss)? (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)? (mosiReg0[0]):1'b0;
                         end
                         1 : begin
-                            Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                            Mosi0_o = (ss)? (mosiReg0[0]):1'b0;
                         end
                         2 : begin
-                            Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                            Mosi0_o = (ss)? (mosiReg0[0]):1'b0;
                         end
                         3 : begin
-                            Mosi0_o = (ss&& (ssCnt <= ssNum+Lag_i && ssCnt > Lag_i))? (mosiReg0[0]):1'b0;
+                            Mosi0_o = (ss)? (mosiReg0[0]):1'b0;
                         end
                     endcase
                 end
@@ -532,7 +532,11 @@ module SPIm
 			valReg <= 0;
 		end else begin
 			if (ssCnt == txLenght-2) begin
-				valReg <= 1;
+				if (!valReg) begin
+					valReg <= 1;
+				end else begin
+					valReg <= 0;
+				end
 			end else begin
 				valReg <= 0;
 			end
@@ -667,7 +671,7 @@ module SPIm
 						end
 					end else begin
 						if (!ss&& (ssCnt < txLenght-1)) begin
-							mosiReg0 <= mosiReg0 << 1;
+							mosiReg0 <= mosiReg0 >> 1;
 						end else begin 
 							mosiReg0 <= SpiData_i[31:0];
 						end
@@ -698,7 +702,7 @@ module SPIm
 						end
 					end else begin
 						if (ss&& (ssCnt < txLenght-1)) begin
-							mosiReg0 <= mosiReg0 << 1;
+							mosiReg0 <= mosiReg0 >> 1;
 						end else begin 
 							mosiReg0 <= SpiData_i[31:0];
 						end