Forráskód Böngészése

Коэфициенты фильтров подгружаются из памяти.

ChStepan 1 éve
szülő
commit
0ce2262ad3

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 34 - 11
src/constrs/S5243Top.xdc


+ 10 - 10
src/src/FftDataFiltering/DecimFilterWrapper.v

@@ -72,7 +72,7 @@ module	DecimFilterWrapper
 //================================================================================
 //	ASSIGNMENTS
 //================================================================================
-	assign oscWindVal = DataVal_i;
+	assign oscWindVal = DataVal_i&(!coefDataVal);
 
 	assign Data_o	=	(bypassFlag)? adcExtData[LsbForR1-1-:16]:decimData[17-:16];
 	assign DataVal_o	=	(bypassFlag)? DataVal_i:decimDataVal;
@@ -81,15 +81,15 @@ module	DecimFilterWrapper
 //	CODING
 //================================================================================
 
-// RomCtrl	RomCtrl
-// (
-	// .Clk_i		(Clk_i),
-	// .Rst_i		(Rst_i),
-	// .DataVal_i	(DataVal_i),
-	// .CoefDataVal_o	(coefDataVal),
-	// .DecimFactor_i	(DecimFactor_i),
-	// .CoefAddr_o	(coefAddr)
-// );
+RomCtrl	RomCtrl
+(
+	.Clk_i		(Clk_i),
+	.Rst_i		(Rst_i),
+	.OscWind_i	(DataVal_i),
+	.CoefDataVal_o	(coefDataVal),
+	.DecimFactor_i	(DecimFactor_i),
+	.CoefAddr_o	(coefAddr)
+);
 
 CoefROM CoefRom (
   .a(coefAddr),      // input wire [8 : 0] a

+ 60 - 43
src/src/FftDataFiltering/RomCtrl.v

@@ -21,12 +21,12 @@
 module RomCtrl
 #(	
 	parameter	OutWidth	=	9,
-	parameter [8:0] BaseAddrR2 = 0,
-	parameter [8:0] BaseAddrR3 = 35,
-	parameter [8:0] BaseAddrR4 = 70,
-	parameter [8:0] BaseAddrR5 = 105,
-	parameter [8:0] BaseAddrR6 = 140,
-	parameter [8:0] BaseAddrR7 = 175
+	parameter BaseAddrR2 = 0,
+	parameter BaseAddrR3 = 64,
+	parameter BaseAddrR4 = 70,
+	parameter BaseAddrR5 = 105,
+	parameter BaseAddrR6 = 140,
+	parameter BaseAddrR7 = 175
 )
 (
 	input Clk_i,
@@ -43,18 +43,18 @@ module RomCtrl
 //================================================================================
 reg	[2:0] decimFactor;
 reg [OutWidth-1:0] currBaseAddr;
+reg [OutWidth-1:0] currMaxAddr;
 reg [8:0] coefAddr;
 
 reg	changeFlag;
 reg	coefDataVal;
-reg	coefDataValReg;
 
 //================================================================================
 //	ASSIGNMENTS
 //================================================================================
 // assign changeFlag = (decimFactor!= DecimFactor_i);
 assign CoefAddr_o = coefAddr;
-assign CoefDataVal_o = coefDataValReg;
+assign CoefDataVal_o = coefDataVal;
 	
 //================================================================================
 //	CODING
@@ -84,7 +84,8 @@ always @(posedge Clk_i) begin
 		if (changeFlag) begin
 			coefDataVal <= 1'b1;
 		end 
-		if (coefAddr==currBaseAddr+34) begin
+		// if (coefAddr==currBaseAddr+63) begin
+		if (coefAddr==currMaxAddr) begin
 			coefDataVal <= 1'b0;
 		end
 	end else begin
@@ -94,54 +95,70 @@ end
 
 always @(posedge Clk_i) begin
 	if (!Rst_i) begin
-		coefDataValReg <= coefDataVal;
+		case (DecimFactor_i) 
+			1:	begin
+					currMaxAddr <= 9'd63;
+				end
+			2:	begin
+					currMaxAddr <= 9'd63;
+				end
+			3:	begin
+					currMaxAddr <= 9'd127;
+				end
+		endcase
 	end else begin
-		coefDataValReg <= 0;
+		currMaxAddr <= 0;
 	end 
-end
+end 
 
+// always @(posedge Clk_i) begin
+	// if (!Rst_i) begin
+		// if (changeFlag) begin
+			// case (DecimFactor_i) 
+				// 1:	begin
+						// currBaseAddr <= 9'd0;
+					// end
+				// 2:	begin
+						// currBaseAddr <= 9'd0;
+					// end
+				// 3:	begin
+						// currBaseAddr <= 9'd64;
+					// end
+				// 4:	begin
+						// currBaseAddr <= BaseAddrR4;
+					// end
+				// 5:	begin
+						// currBaseAddr <= BaseAddrR5;
+					// end
+				// 6:	begin
+						// currBaseAddr <= BaseAddrR6;
+					// end
+				// 7:	begin
+						// currBaseAddr <= BaseAddrR7;
+					// end
+			// endcase
+		// end
+	// end else begin
+		// currBaseAddr <= 0;
+	// end 
+// end 
 
 always @(posedge Clk_i) begin
 	if (!Rst_i) begin
-		if (changeFlag) begin
+		if (coefDataVal) begin
+			coefAddr<=coefAddr+1;
+		end else begin
 			case (DecimFactor_i) 
-				0:	begin
-						currBaseAddr <= BaseAddrR2;
-					end
 				1:	begin
-						currBaseAddr <= BaseAddrR2;
+						coefAddr <= 9'd0;
 					end
 				2:	begin
-						currBaseAddr <= BaseAddrR2;
+						coefAddr <= 9'd0;
 					end
 				3:	begin
-						currBaseAddr <= BaseAddrR3;
-					end
-				4:	begin
-						currBaseAddr <= BaseAddrR4;
-					end
-				5:	begin
-						currBaseAddr <= BaseAddrR5;
-					end
-				6:	begin
-						currBaseAddr <= BaseAddrR6;
-					end
-				7:	begin
-						currBaseAddr <= BaseAddrR7;
+						coefAddr <= 9'd64;
 					end
 			endcase
-		end
-	end else begin
-		currBaseAddr <= 0;
-	end 
-end 
-
-always @(posedge Clk_i) begin
-	if (!Rst_i) begin
-		if (coefDataValReg) begin
-			coefAddr<=coefAddr+1;
-		end else begin
-			coefAddr <= currBaseAddr;
 		end 
 	end else begin
 		coefAddr <=0;

+ 1 - 7
src/src/Sim/DecimFilterWrapperTb.v

@@ -129,13 +129,7 @@ always	@(posedge	Clk50)	begin
 			decimFactor	<= 2;
 		end else if (tbCnt == 6400) begin
 			decimFactor	<= 3;
-		end else if (tbCnt == 7400) begin
-			decimFactor	<= 5;
-		end else if (tbCnt == 8400) begin
-			decimFactor	<= 6;
-		end else if (tbCnt == 9400) begin
-			decimFactor	<= 7;
-		end 
+		end
 	end else begin
 	 decimFactor <= 2;
 	end 

+ 325 - 391
src/src/Sim/FiltersCoeffs.coe

@@ -1,391 +1,325 @@
-MEMORY_INITIALIZATION_RADIX =16;
-MEMORY_INITIALIZATION_VECTOR =002fd,
-00f3e,
-013ef,
-006f0,
-3f248,
-3f30a,
-00bcc,
-01664,
-3fa36,
-3de4b,
-3f843,
-02d1e,
-021a2,
-3c919,
-3a7f7,
-03d7b,
-13ec9,
-1c034,
-13ec9,
-03d7b,
-3a7f7,
-3c919,
-021a2,
-02d1e,
-3f843,
-3de4b,
-3fa36,
-01664,
-00bcc,
-3f30a,
-3f248,
-006f0,
-013ef,
-00f3e,
-002fd,
-00496,
-001e6,
-3fbce,
-3f219,
-3ea9f,
-3ec8e,
-3fab5,
-00f11,
-01c25,
-01515,
-3f855,
-3d54e,
-3c728,
-3e5cc,
-03549,
-09eb7,
-0f8b7,
-11c0e,
-0f8b7,
-09eb7,
-03549,
-3e5cc,
-3c728,
-3d54e,
-3f855,
-01515,
-01c25,
-00f11,
-3fab5,
-3ec8e,
-3ea9f,
-3f219,
-3fbce,
-001e6,
-00496,
-3ff9f,
-0022d,
-004f5,
-0067b,
-00592,
-00245,
-3fe3a,
-3fbee,
-3fd27,
-0017c,
-00622,
-0077d,
-003af,
-3fc6b,
-3f67d,
-3f6d3,
-3feb8,
-009e7,
-01063,
-00b8b,
-3fb89,
-3e93d,
-3e2a4,
-3f310,
-01b7e,
-04ffb,
-07c40,
-08d8a,
-07c40,
-04ffb,
-01b7e,
-3f310,
-3e2a4,
-3e93d,
-3fb89,
-00b8b,
-01063,
-009e7,
-3feb8,
-3f6d3,
-3f67d,
-3fc6b,
-003af,
-0077d,
-00622,
-0017c,
-3fd27,
-3fbee,
-3fe3a,
-00245,
-00592,
-0067b,
-004f5,
-0022d,
-3ff9f,
-3fe36,
-3fe08,
-3fe99,
-3ff4e,
-3ffc9,
-3fff0,
-3fffa,
-00026,
-00095,
-0015c,
-00279,
-003c3,
-004e5,
-00573,
-00505,
-00368,
-000c3,
-3fdaa,
-3fb06,
-3f9d3,
-3fac5,
-3fdf0,
-00298,
-00742,
-00a1a,
-0098e,
-004fb,
-3fd20,
-3f436,
-3ed7a,
-3ec58,
-3f350,
-0030c,
-019de,
-033ee,
-04c14,
-05d23,
-0634a,
-05d23,
-04c14,
-033ee,
-019de,
-0030c,
-3f350,
-3ec58,
-3ed7a,
-3f436,
-3fd20,
-004fb,
-0098e,
-00a1a,
-00742,
-00298,
-3fdf0,
-3fac5,
-3f9d3,
-3fb06,
-3fdaa,
-000c3,
-00368,
-00505,
-00573,
-004e5,
-003c3,
-00279,
-0015c,
-00095,
-00026,
-3fffa,
-3fff0,
-3ffe1,
-3ffb4,
-3ff67,
-3fefc,
-3fe7a,
-3fdf6,
-3fd8f,
-3fd6d,
-3fdb6,
-3fe87,
-3ffea,
-001c8,
-003e7,
-005ee,
-0076f,
-007f9,
-00734,
-004fa,
-0016d,
-3fcff,
-3f870,
-3f4b7,
-3f2df,
-3f3d5,
-3f83b,
-0003d,
-00b7b,
-01906,
-0277c,
-03535,
-04082,
-047f1,
-04a89,
-047f1,
-04082,
-03535,
-0277c,
-01906,
-00b7b,
-0003d,
-3f83b,
-3f3d5,
-3f2df,
-3f4b7,
-3f870,
-3fcff,
-0016d,
-004fa,
-00734,
-007f9,
-0076f,
-005ee,
-003e7,
-001c8,
-3ffea,
-3fe87,
-3fdb6,
-3fd6d,
-3fd8f,
-3fdf6,
-3fe7a,
-3fefc,
-3ff67,
-3ffb4,
-3ffe1,
-0001b,
-0003a,
-00072,
-000c2,
-0012c,
-001ab,
-00235,
-002b9,
-00323,
-00356,
-0033a,
-002b4,
-001b6,
-0003b,
-3fe51,
-3fc18,
-3f9c5,
-3f79f,
-3f5f6,
-3f524,
-3f578,
-3f737,
-3fa88,
-3ff72,
-005d4,
-00d64,
-015b5,
-01e3c,
-0265c,
-02d7a,
-03305,
-0368a,
-037bf,
-0368a,
-03305,
-02d7a,
-0265c,
-01e3c,
-015b5,
-00d64,
-005d4,
-3ff72,
-3fa88,
-3f737,
-3f578,
-3f524,
-3f5f6,
-3f79f,
-3f9c5,
-3fc18,
-3fe51,
-0003b,
-001b6,
-002b4,
-0033a,
-00356,
-00323,
-002b9,
-00235,
-001ab,
-0012c,
-000c2,
-00072,
-0003a,
-0001b,
-0000a,
-3fffb,
-3ffeb,
-3ffce,
-3ff9e,
-3ff56,
-3fef3,
-3fe72,
-3fdd3,
-3fd19,
-3fc4c,
-3fb77,
-3faaa,
-3f9f9,
-3f97d,
-3f94f,
-3f98a,
-3fa45,
-3fb96,
-3fd89,
-00026,
-00369,
-00742,
-00b97,
-01044,
-0151c,
-019ec,
-01e7b,
-02293,
-02600,
-02895,
-02a30,
-02abb,
-02a30,
-02895,
-02600,
-02293,
-01e7b,
-019ec,
-0151c,
-01044,
-00b97,
-00742,
-00369,
-00026,
-3fd89,
-3fb96,
-3fa45,
-3f98a,
-3f94f,
-3f97d,
-3f9f9,
-3faaa,
-3fb77,
-3fc4c,
-3fd19,
-3fdd3,
-3fe72,
-3fef3,
-3ff56,
-3ff9e,
-3ffce,
-3ffeb,
-3fffb,
-0000a;
+MEMORY_INITIALIZATION_RADIX =10;
+MEMORY_INITIALIZATION_VECTOR =282,
+992,
+1502,
+576,
+-1918,
+-3864,
+-2924,
+0,
+1188,
+-854,
+-2720,
+-932,
+2198,
+1528,
+-2386,
+-3088,
+1466,
+4232,
+-216,
+-5428,
+-1974,
+6014,
+4914,
+-5840,
+-8912,
+4236,
+14346,
+-76,
+-23122,
+-11268,
+48062,
+107194,
+107194,
+48062,
+-11268,
+-23122,
+-76,
+14346,
+4236,
+-8912,
+-5840,
+4914,
+6014,
+-1974,
+-5428,
+-216,
+4232,
+1466,
+-3088,
+-2386,
+1528,
+2198,
+-932,
+-2720,
+-854,
+1188,
+0,
+-2924,
+-3864,
+-1918,
+576,
+1502,
+992,
+282,
+-100,
+-282,
+-481,
+-481,
+-26,
+984,
+2303,
+3320,
+3340,
+2052,
+-97,
+-1976,
+-2374,
+-859,
+1727,
+3589,
+3111,
+127,
+-3626,
+-5391,
+-3288,
+2018,
+7172,
+7999,
+2469,
+-7133,
+-14541,
+-12632,
+2230,
+27222,
+53530,
+70347,
+70347,
+53530,
+27222,
+2230,
+-12632,
+-14541,
+-7133,
+2469,
+7999,
+7172,
+2018,
+-3288,
+-5391,
+-3626,
+127,
+3111,
+3589,
+1727,
+-859,
+-2374,
+-1976,
+-97,
+2052,
+3340,
+3320,
+2303,
+984,
+-26,
+-481,
+-481,
+-282,
+-100;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 18 - 3
src/src/Sim/firFilter/systolicFilter.v

@@ -22,7 +22,22 @@ module systolicFilter
 	wire	[17:0]	test2 = outData[35-:18];
 	
 	
-	systolicFilterBlockTest # (
+	// systolicFilterBlockTest # (
+		// .CoeffCount(CoeffCount)
+	// )
+	// systolicFilterBlockInst
+	// (
+		// .Clk_i(Clk_i),
+		// .Rst_i(Rst_i),
+		// .Data_i(Data_i),
+		// .DecimFactor_i(DecimFactor_i),
+		// .DataNd_i(DataNd_i),
+		// .DataNd_i(1'b1),
+		// .Data_o(outData),
+		// .DataValid_o(outDataValid)
+	// );
+	
+	systolicFilterBlock # (
 		.CoeffCount(CoeffCount)
 	)
 	systolicFilterBlockInst
@@ -30,9 +45,9 @@ module systolicFilter
 		.Clk_i(Clk_i),
 		.Rst_i(Rst_i),
 		.Data_i(Data_i),
-		.DecimFactor_i(DecimFactor_i),
+		.CoefData_i(CoefData_i),
+		.CoefDataVal_i(CoefDataVal_i),
 		.DataNd_i(DataNd_i),
-		// .DataNd_i(1'b1),
 		.Data_o(outData),
 		.DataValid_o(outDataValid)
 	);

+ 13 - 49
src/src/Sim/firFilter/systolicFilterBlock.v

@@ -13,17 +13,17 @@ module systolicFilterBlock # (
 );
 
 	reg signed [17:0] coeff[0:CoeffCount-1];
-
-
-
+	
 	wire signed [17:0] dataIn = Data_i;
-	reg [3:0] ndShReg;
+	reg [CoeffCount-1:0] ndShReg;
+	
+	wire comRst = (Rst_i|!(DataNd_i|DataValid_o));
 	
 	always @ (posedge Clk_i)
 		if (!Rst_i) begin
-			ndShReg <= {ndShReg[2:0], DataNd_i};
+			ndShReg <= {ndShReg[CoeffCount-2:0], DataNd_i};
 		end else begin
-			ndShReg <= 4'h0;
+			ndShReg <= 0;
 		end
 	
 	reg signed [17:0] inReg0[0:CoeffCount-1];
@@ -46,55 +46,19 @@ module systolicFilterBlock # (
 		end 
 	end
 	
-	always @(*) begin
+	always @(posedge Clk_i) begin
 		if (!Rst_i) begin
 			if (CoefDataVal_i) begin
-				coeff[addrCnt] = CoefData_i;
+				coeff[addrCnt] <= CoefData_i;
 			end
-		end else begin
-			coeff[0]  = 18'h002fd;
-			coeff[1]  = 18'h00f3e;
-			coeff[2]  = 18'h013ef;
-			coeff[3]  = 18'h006f0;
-			coeff[4]  = 18'h3f248;
-			coeff[5]  = 18'h3f30a;
-			coeff[6]  = 18'h00bcc;
-			coeff[7]  = 18'h01664;
-			coeff[8]  = 18'h3fa36;
-			coeff[9]  = 18'h3de4b;
-			coeff[10] = 18'h3f843;
-			coeff[11] = 18'h02d1e;
-			coeff[12] = 18'h021a2;
-			coeff[13] = 18'h3c919;
-			coeff[14] = 18'h3a7f7;
-			coeff[15] = 18'h03d7b;
-			coeff[16] = 18'h13ec9;
-			coeff[17] = 18'h1c034;
-			coeff[18] = 18'h13ec9;
-			coeff[19] = 18'h03d7b;
-			coeff[20] = 18'h3a7f7;
-			coeff[21] = 18'h3c919;
-			coeff[22] = 18'h021a2;
-			coeff[23] = 18'h02d1e;
-			coeff[24] = 18'h3f843;
-			coeff[25] = 18'h3de4b;
-			coeff[26] = 18'h3fa36;
-			coeff[27] = 18'h01664;
-			coeff[28] = 18'h00bcc;
-			coeff[29] = 18'h3f30a;
-			coeff[30] = 18'h3f248;
-			coeff[31] = 18'h006f0;
-			coeff[32] = 18'h013ef;
-			coeff[33] = 18'h00f3e;
-			coeff[34] = 18'h002fd;
-		end                 
+		end 
 	end
 	
 	genvar i;
 	generate
 		for (i = 0; i < CoeffCount; i = i + 1)begin 
 			always @ (posedge Clk_i) begin
-				if (!Rst_i) begin
+				if (!comRst) begin
 					if (DataNd_i) begin
 						if (i == 0) begin
 							inReg0[i] <= 0;
@@ -105,11 +69,11 @@ module systolicFilterBlock # (
 						end
 					end
 				
-					if (ndShReg[0]) begin
+					if (ndShReg[0]|ndShReg[CoeffCount-2]) begin
 						multResult[i] <= inReg1[i] * coeff[i];
 					end
 					
-					if (ndShReg[1]) begin
+					if (ndShReg[1]|ndShReg[CoeffCount-1]) begin
 						if (i == 0) begin
 							sumResult[i] <= multResult[i];
 						end else begin
@@ -127,6 +91,6 @@ module systolicFilterBlock # (
 	endgenerate
 
 	assign Data_o = sumResult[CoeffCount-1];
-	assign DataValid_o = ndShReg[2];
+	assign DataValid_o = ndShReg[CoeffCount-1];
 
 endmodule