Procházet zdrojové kódy

Переработан алгоритм обновления коэфициентов фильтров для разных коэфициентов децимации.

ChStepan před 1 rokem
rodič
revize
99034aa917

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 66 - 46
src/constrs/S5243Top.xdc


+ 1 - 0
src/src/FftDataFiltering/DecimFilterWrapper.v

@@ -116,6 +116,7 @@ systolicFilter DataFitler (
 	.Clk_i(Clk_i), 
 	.Rst_i(Rst_i), 
 	.CoefData_i(coefData),
+	.DecimFactor_i(DecimFactor_i),
 	.CoefDataVal_i(coefDataVal),
 	.Data_i(adcExtData), 
 	.DataNd_i(oscWindVal), 

+ 12 - 9
src/src/FftDataFiltering/RomCtrl.v

@@ -22,11 +22,11 @@ module RomCtrl
 #(	
 	parameter	OutWidth	=	9,
 	parameter [8:0] BaseAddrR2 = 0,
-	parameter [8:0] BaseAddrR3 = 64,
-	parameter [8:0] BaseAddrR4 = 128,
-	parameter [8:0] BaseAddrR5 = 192,
-	parameter [8:0] BaseAddrR6 = 256,
-	parameter [8:0] BaseAddrR7 = 320
+	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
 )
 (
 	input Clk_i,
@@ -84,7 +84,7 @@ always @(posedge Clk_i) begin
 		if (changeFlag) begin
 			coefDataVal <= 1'b1;
 		end 
-		if (coefAddr==currBaseAddr+63) begin
+		if (coefAddr==currBaseAddr+34) begin
 			coefDataVal <= 1'b0;
 		end
 	end else begin
@@ -105,6 +105,12 @@ always @(posedge Clk_i) begin
 	if (!Rst_i) begin
 		if (changeFlag) begin
 			case (DecimFactor_i) 
+				0:	begin
+						currBaseAddr <= BaseAddrR2;
+					end
+				1:	begin
+						currBaseAddr <= BaseAddrR2;
+					end
 				2:	begin
 						currBaseAddr <= BaseAddrR2;
 					end
@@ -123,9 +129,6 @@ always @(posedge Clk_i) begin
 				7:	begin
 						currBaseAddr <= BaseAddrR7;
 					end
-				default: begin
-							currBaseAddr	<=	BaseAddrR2;
-						 end
 			endcase
 		end
 	end else begin

+ 3 - 5
src/src/Sim/BitWidthCalc.m

@@ -16,17 +16,15 @@ Bmax = ceil(log2(((R*M)^N)/R)+B);
 MaxWidthR2 = ceil(log2(((2*M)^N)/2)+B);
 MaxWidthR4 = ceil(log2(((4*M)^N)/4)+B);
 
-ReadFilterCoefsId = fopen('C:\S5243_FFT_REPO\src\src\Sim\2.fcf','r');
+ReadFilterCoefsId = fopen('C:\S5243_FFT_REPO\src\src\Sim\R2Test.fcf','r');
 FilterCoefs = fscanf(ReadFilterCoefsId,FormatSpecR);
 fclose(ReadFilterCoefsId);
 
 CorrValue = 2^17;
 
 CorrCoeffs = FilterCoefs*CorrValue;
-CorrCoeffs = dec2hex(int32(CorrCoeffs));
-
+CorrCoeffs = int32(CorrCoeffs);
 
 WriteFilterCoefsId = fopen('C:\S5243_FFT_REPO\src\src\Sim\untitled.txt','w');
-fprintf(WriteFilterCoefsId, CorrCoeffs);
+fprintf(WriteFilterCoefsId,'%X\n', CorrCoeffs);
 fclose(WriteFilterCoefsId);
-

+ 67 - 0
src/src/Sim/CoeffsForR2.vh

@@ -0,0 +1,67 @@
+
+wire signed [17:0] coeffForR2[0:CoeffCount-1];
+
+assign coeffForR2[0]  = 18'h0008d;
+assign coeffForR2[1]  = 18'h001f0;
+assign coeffForR2[2]  = 18'h002ef;
+assign coeffForR2[3]  = 18'h00120;
+assign coeffForR2[4]  = 18'h3fc41;
+assign coeffForR2[5]  = 18'h3f874;
+assign coeffForR2[6]  = 18'h3fa4a;
+assign coeffForR2[7]  = 18'h00000;
+assign coeffForR2[8]  = 18'h00252;
+assign coeffForR2[9]  = 18'h3fe55;
+assign coeffForR2[10] = 18'h3fab0;
+assign coeffForR2[11] = 18'h3fe2e;
+assign coeffForR2[12] = 18'h0044b;
+assign coeffForR2[13] = 18'h002fc;
+assign coeffForR2[14] = 18'h3fb57;
+assign coeffForR2[15] = 18'h3f9f8;
+assign coeffForR2[16] = 18'h002dd;
+assign coeffForR2[17] = 18'h00844;
+assign coeffForR2[18] = 18'h3ff94;
+assign coeffForR2[19] = 18'h3f566;
+assign coeffForR2[20] = 18'h3fc25;
+assign coeffForR2[21] = 18'h00bbf;
+assign coeffForR2[22] = 18'h00999;
+assign coeffForR2[23] = 18'h3f498;
+assign coeffForR2[24] = 18'h3ee98;
+assign coeffForR2[25] = 18'h00846;
+assign coeffForR2[26] = 18'h01c05;
+assign coeffForR2[27] = 18'h3ffda;
+assign coeffForR2[28] = 18'h3d2d7;
+assign coeffForR2[29] = 18'h3e9fe;
+assign coeffForR2[30] = 18'h05ddf;
+assign coeffForR2[31] = 18'h0d15d;
+assign coeffForR2[32] = 18'h0d15d;
+assign coeffForR2[33] = 18'h05ddf;
+assign coeffForR2[34] = 18'h3e9fe;
+assign coeffForR2[35] = 18'h3d2d7;
+assign coeffForR2[36] = 18'h3ffda;
+assign coeffForR2[37] = 18'h01c05;
+assign coeffForR2[38] = 18'h00846;
+assign coeffForR2[39] = 18'h3ee98;
+assign coeffForR2[40] = 18'h3f498;
+assign coeffForR2[41] = 18'h00999;
+assign coeffForR2[42] = 18'h00bbf;
+assign coeffForR2[43] = 18'h3fc25;
+assign coeffForR2[44] = 18'h3f566;
+assign coeffForR2[45] = 18'h3ff94;
+assign coeffForR2[46] = 18'h00844;
+assign coeffForR2[47] = 18'h002dd;
+assign coeffForR2[48] = 18'h3f9f8;
+assign coeffForR2[49] = 18'h3fb57;
+assign coeffForR2[50] = 18'h002fc;
+assign coeffForR2[51] = 18'h0044b;
+assign coeffForR2[52] = 18'h3fe2e;
+assign coeffForR2[53] = 18'h3fab0;
+assign coeffForR2[54] = 18'h3fe55;
+assign coeffForR2[55] = 18'h00252;
+assign coeffForR2[56] = 18'h00000;
+assign coeffForR2[57] = 18'h3fa4a;
+assign coeffForR2[58] = 18'h3f874;
+assign coeffForR2[59] = 18'h3fc41;
+assign coeffForR2[60] = 18'h00120;
+assign coeffForR2[61] = 18'h002ef;
+assign coeffForR2[62] = 18'h001f0;
+assign coeffForR2[63] = 18'h0008d;

+ 67 - 0
src/src/Sim/CoeffsForR3.vh

@@ -0,0 +1,67 @@
+
+wire signed [17:0] coeffForR3[0:CoeffCount-1];
+
+assign coeffForR3[0]  = 18'h3ffce;
+assign coeffForR3[1]  = 18'h3ff73;
+assign coeffForR3[2]  = 18'h3ff10;
+assign coeffForR3[3]  = 18'h3ff10;
+assign coeffForR3[4]  = 18'h3fff3;
+assign coeffForR3[5]  = 18'h001ec;
+assign coeffForR3[6]  = 18'h0047f;
+assign coeffForR3[7]  = 18'h0067c;
+assign coeffForR3[8]  = 18'h00686;
+assign coeffForR3[9]  = 18'h00402;
+assign coeffForR3[10] = 18'h3ffcf;
+assign coeffForR3[11] = 18'h3fc24;
+assign coeffForR3[12] = 18'h3fb5d;
+assign coeffForR3[13] = 18'h3fe53;
+assign coeffForR3[14] = 18'h00360;
+assign coeffForR3[15] = 18'h00702;
+assign coeffForR3[16] = 18'h00614;
+assign coeffForR3[17] = 18'h0003f;
+assign coeffForR3[18] = 18'h3f8eb;
+assign coeffForR3[19] = 18'h3f579;
+assign coeffForR3[20] = 18'h3f994;
+assign coeffForR3[21] = 18'h003f1;
+assign coeffForR3[22] = 18'h00e02;
+assign coeffForR3[23] = 18'h00fa0;
+assign coeffForR3[24] = 18'h004d3;
+assign coeffForR3[25] = 18'h3f212;
+assign coeffForR3[26] = 18'h3e399;
+assign coeffForR3[27] = 18'h3e754;
+assign coeffForR3[28] = 18'h0045b;
+assign coeffForR3[29] = 18'h0352b;
+assign coeffForR3[30] = 18'h0688d;
+assign coeffForR3[31] = 18'h08966;
+assign coeffForR3[32] = 18'h08966;
+assign coeffForR3[33] = 18'h0688d;
+assign coeffForR3[34] = 18'h0352b;
+assign coeffForR3[35] = 18'h0045b;
+assign coeffForR3[36] = 18'h3e754;
+assign coeffForR3[37] = 18'h3e399;
+assign coeffForR3[38] = 18'h3f212;
+assign coeffForR3[39] = 18'h004d3;
+assign coeffForR3[40] = 18'h00fa0;
+assign coeffForR3[41] = 18'h00e02;
+assign coeffForR3[42] = 18'h003f1;
+assign coeffForR3[43] = 18'h3f994;
+assign coeffForR3[44] = 18'h3f579;
+assign coeffForR3[45] = 18'h3f8eb;
+assign coeffForR3[46] = 18'h0003f;
+assign coeffForR3[47] = 18'h00614;
+assign coeffForR3[48] = 18'h00702;
+assign coeffForR3[49] = 18'h00360;
+assign coeffForR3[50] = 18'h3fe53;
+assign coeffForR3[51] = 18'h3fb5d;
+assign coeffForR3[52] = 18'h3fc24;
+assign coeffForR3[53] = 18'h3ffcf;
+assign coeffForR3[54] = 18'h00402;
+assign coeffForR3[55] = 18'h00686;
+assign coeffForR3[56] = 18'h0067c;
+assign coeffForR3[57] = 18'h0047f;
+assign coeffForR3[58] = 18'h001ec;
+assign coeffForR3[59] = 18'h3fff3;
+assign coeffForR3[60] = 18'h3ff10;
+assign coeffForR3[61] = 18'h3ff10;
+assign coeffForR3[62] = 18'h3ff73;
+assign coeffForR3[63] = 18'h3ffce;

+ 67 - 0
src/src/Sim/CoeffsForR4.vh

@@ -0,0 +1,67 @@
+
+wire signed [17:0] coeffForR4[0:CoeffCount-1];
+
+assign coeffForR4[0]  = 18'h3fff9;
+assign coeffForR4[1]  = 18'h0001b;
+assign coeffForR4[2]  = 18'h0006b;
+assign coeffForR4[3]  = 18'h0010a;
+assign coeffForR4[4]  = 18'h001ff;
+assign coeffForR4[5]  = 18'h00335;
+assign coeffForR4[6]  = 18'h0046d;
+assign coeffForR4[7]  = 18'h00543;
+assign coeffForR4[8]  = 18'h0054b;
+assign coeffForR4[9]  = 18'h00438;
+assign coeffForR4[10] = 18'h00203;
+assign coeffForR4[11] = 18'h3ff0f;
+assign coeffForR4[12] = 18'h3fc1e;
+assign coeffForR4[13] = 18'h3fa29;
+assign coeffForR4[14] = 18'h3fa10;
+assign coeffForR4[15] = 18'h3fc38;
+assign coeffForR4[16] = 18'h0004b;
+assign coeffForR4[17] = 18'h00524;
+assign coeffForR4[18] = 18'h0090e;
+assign coeffForR4[19] = 18'h00a45;
+assign coeffForR4[20] = 18'h007a3;
+assign coeffForR4[21] = 18'h00134;
+assign coeffForR4[22] = 18'h3f87c;
+assign coeffForR4[23] = 18'h3f04a;
+assign coeffForR4[24] = 18'h3ec0e;
+assign coeffForR4[25] = 18'h3eed8;
+assign coeffForR4[26] = 18'h3fa4d;
+assign coeffForR4[27] = 18'h00dec;
+assign coeffForR4[28] = 18'h026e2;
+assign coeffForR4[29] = 18'h04092;
+assign coeffForR4[30] = 18'h055ac;
+assign coeffForR4[31] = 18'h0618f;
+assign coeffForR4[32] = 18'h0618f;
+assign coeffForR4[33] = 18'h055ac;
+assign coeffForR4[34] = 18'h04092;
+assign coeffForR4[35] = 18'h026e2;
+assign coeffForR4[36] = 18'h00dec;
+assign coeffForR4[37] = 18'h3fa4d;
+assign coeffForR4[38] = 18'h3eed8;
+assign coeffForR4[39] = 18'h3ec0e;
+assign coeffForR4[40] = 18'h3f04a;
+assign coeffForR4[41] = 18'h3f87c;
+assign coeffForR4[42] = 18'h00134;
+assign coeffForR4[43] = 18'h007a3;
+assign coeffForR4[44] = 18'h00a45;
+assign coeffForR4[45] = 18'h0090e;
+assign coeffForR4[46] = 18'h00524;
+assign coeffForR4[47] = 18'h0004b;
+assign coeffForR4[48] = 18'h3fc38;
+assign coeffForR4[49] = 18'h3fa10;
+assign coeffForR4[50] = 18'h3fa29;
+assign coeffForR4[51] = 18'h3fc1e;
+assign coeffForR4[52] = 18'h3ff0f;
+assign coeffForR4[53] = 18'h00203;
+assign coeffForR4[54] = 18'h00438;
+assign coeffForR4[55] = 18'h0054b;
+assign coeffForR4[56] = 18'h00543;
+assign coeffForR4[57] = 18'h0046d;
+assign coeffForR4[58] = 18'h00335;
+assign coeffForR4[59] = 18'h001ff;
+assign coeffForR4[60] = 18'h0010a;
+assign coeffForR4[61] = 18'h0006b;
+assign coeffForR4[62] = 18'h0001b;
+assign coeffForR4[63] = 18'h3fff9;

+ 67 - 0
src/src/Sim/CoeffsForR5.vh

@@ -0,0 +1,67 @@
+
+wire signed [17:0] coeffForR5[0:CoeffCount-1];
+
+assign coeffForR5[0]  = 18'h3ffe0;
+assign coeffForR5[1]  = 18'h3ffb6;
+assign coeffForR5[2]  = 18'h3ff70;
+assign coeffForR5[3]  = 18'h3ff15;
+assign coeffForR5[4]  = 18'h3feb0;
+assign coeffForR5[5]  = 18'h3fe5a;
+assign coeffForR5[6]  = 18'h3fe33;
+assign coeffForR5[7]  = 18'h3fe5d;
+assign coeffForR5[8]  = 18'h3fef9;
+assign coeffForR5[9]  = 18'h00018;
+assign coeffForR5[10] = 18'h001b1;
+assign coeffForR5[11] = 18'h0039d;
+assign coeffForR5[12] = 18'h00594;
+assign coeffForR5[13] = 18'h00733;
+assign coeffForR5[14] = 18'h0080e;
+assign coeffForR5[15] = 18'h007c4;
+assign coeffForR5[16] = 18'h00617;
+assign coeffForR5[17] = 18'h00308;
+assign coeffForR5[18] = 18'h3fee3;
+assign coeffForR5[19] = 18'h3fa43;
+assign coeffForR5[20] = 18'h3f605;
+assign coeffForR5[21] = 18'h3f32b;
+assign coeffForR5[22] = 18'h3f2b0;
+assign coeffForR5[23] = 18'h3f55e;
+assign coeffForR5[24] = 18'h3fb9b;
+assign coeffForR5[25] = 18'h0054c;
+assign coeffForR5[26] = 18'h011c7;
+assign coeffForR5[27] = 18'h01fe3;
+assign coeffForR5[28] = 18'h02e16;
+assign coeffForR5[29] = 18'h03ab1;
+assign coeffForR5[30] = 18'h04422;
+assign coeffForR5[31] = 18'h0492f;
+assign coeffForR5[32] = 18'h0492f;
+assign coeffForR5[33] = 18'h04422;
+assign coeffForR5[34] = 18'h03ab1;
+assign coeffForR5[35] = 18'h02e16;
+assign coeffForR5[36] = 18'h01fe3;
+assign coeffForR5[37] = 18'h011c7;
+assign coeffForR5[38] = 18'h0054c;
+assign coeffForR5[39] = 18'h3fb9b;
+assign coeffForR5[40] = 18'h3f55e;
+assign coeffForR5[41] = 18'h3f2b0;
+assign coeffForR5[42] = 18'h3f32b;
+assign coeffForR5[43] = 18'h3f605;
+assign coeffForR5[44] = 18'h3fa43;
+assign coeffForR5[45] = 18'h3fee3;
+assign coeffForR5[46] = 18'h00308;
+assign coeffForR5[47] = 18'h00617;
+assign coeffForR5[48] = 18'h007c4;
+assign coeffForR5[49] = 18'h0080e;
+assign coeffForR5[50] = 18'h00733;
+assign coeffForR5[51] = 18'h00594;
+assign coeffForR5[52] = 18'h0039d;
+assign coeffForR5[53] = 18'h001b1;
+assign coeffForR5[54] = 18'h00018;
+assign coeffForR5[55] = 18'h3fef9;
+assign coeffForR5[56] = 18'h3fe5d;
+assign coeffForR5[57] = 18'h3fe33;
+assign coeffForR5[58] = 18'h3fe5a;
+assign coeffForR5[59] = 18'h3feb0;
+assign coeffForR5[60] = 18'h3ff15;
+assign coeffForR5[61] = 18'h3ff70;
+assign coeffForR5[62] = 18'h3ffb6;
+assign coeffForR5[63] = 18'h3ffe0;

+ 67 - 0
src/src/Sim/CoeffsForR6.vh

@@ -0,0 +1,67 @@
+
+wire signed [17:0] coeffForR6[0:CoeffCount-1];
+
+assign coeffForR6[0]  = 18'h0001d;
+assign coeffForR6[1]  = 18'h0003d;
+assign coeffForR6[2]  = 18'h00074;
+assign coeffForR6[3]  = 18'h000c2;
+assign coeffForR6[4]  = 18'h00126;
+assign coeffForR6[5]  = 18'h00199;
+assign coeffForR6[6]  = 18'h0020f;
+assign coeffForR6[7]  = 18'h00277;
+assign coeffForR6[8]  = 18'h002b9;
+assign coeffForR6[9]  = 18'h002bb;
+assign coeffForR6[10] = 18'h00265;
+assign coeffForR6[11] = 18'h001a1;
+assign coeffForR6[12] = 18'h00066;
+assign coeffForR6[13] = 18'h3feb8;
+assign coeffForR6[14] = 18'h3fcac;
+assign coeffForR6[15] = 18'h3fa6c;
+assign coeffForR6[16] = 18'h3f835;
+assign coeffForR6[17] = 18'h3f652;
+assign coeffForR6[18] = 18'h3f518;
+assign coeffForR6[19] = 18'h3f4dc;
+assign coeffForR6[20] = 18'h3f5ea;
+assign coeffForR6[21] = 18'h3f877;
+assign coeffForR6[22] = 18'h3fc9d;
+assign coeffForR6[23] = 18'h0024e;
+assign coeffForR6[24] = 18'h00957;
+assign coeffForR6[25] = 18'h0115b;
+assign coeffForR6[26] = 18'h019dc;
+assign coeffForR6[27] = 18'h02246;
+assign coeffForR6[28] = 18'h029fb;
+assign coeffForR6[29] = 18'h03062;
+assign coeffForR6[30] = 18'h034f8;
+assign coeffForR6[31] = 18'h0375c;
+assign coeffForR6[32] = 18'h0375c;
+assign coeffForR6[33] = 18'h034f8;
+assign coeffForR6[34] = 18'h03062;
+assign coeffForR6[35] = 18'h029fb;
+assign coeffForR6[36] = 18'h02246;
+assign coeffForR6[37] = 18'h019dc;
+assign coeffForR6[38] = 18'h0115b;
+assign coeffForR6[39] = 18'h00957;
+assign coeffForR6[40] = 18'h0024e;
+assign coeffForR6[41] = 18'h3fc9d;
+assign coeffForR6[42] = 18'h3f877;
+assign coeffForR6[43] = 18'h3f5ea;
+assign coeffForR6[44] = 18'h3f4dc;
+assign coeffForR6[45] = 18'h3f518;
+assign coeffForR6[46] = 18'h3f652;
+assign coeffForR6[47] = 18'h3f835;
+assign coeffForR6[48] = 18'h3fa6c;
+assign coeffForR6[49] = 18'h3fcac;
+assign coeffForR6[50] = 18'h3feb8;
+assign coeffForR6[51] = 18'h00066;
+assign coeffForR6[52] = 18'h001a1;
+assign coeffForR6[53] = 18'h00265;
+assign coeffForR6[54] = 18'h002bb;
+assign coeffForR6[55] = 18'h002b9;
+assign coeffForR6[56] = 18'h00277;
+assign coeffForR6[57] = 18'h0020f;
+assign coeffForR6[58] = 18'h00199;
+assign coeffForR6[59] = 18'h00126;
+assign coeffForR6[60] = 18'h000c2;
+assign coeffForR6[61] = 18'h00074;
+assign coeffForR6[62] = 18'h0003d;
+assign coeffForR6[63] = 18'h0001d;

+ 67 - 0
src/src/Sim/CoeffsForR7.vh

@@ -0,0 +1,67 @@
+
+wire signed [17:0] coeffForR7[0:CoeffCount-1];
+
+assign coeffForR7[0]  = 18'h0000d;
+assign coeffForR7[1]  = 18'h3ffff;
+assign coeffForR7[2]  = 18'h3fff1;
+assign coeffForR7[3]  = 18'h3ffd4;
+assign coeffForR7[4]  = 18'h3ffa4;
+assign coeffForR7[5]  = 18'h3ff5b;
+assign coeffForR7[6]  = 18'h3fef4;
+assign coeffForR7[7]  = 18'h3fe6c;
+assign coeffForR7[8]  = 18'h3fdc3;
+assign coeffForR7[9]  = 18'h3fcfc;
+assign coeffForR7[10] = 18'h3fc1f;
+assign coeffForR7[11] = 18'h3fb39;
+assign coeffForR7[12] = 18'h3fa5c;
+assign coeffForR7[13] = 18'h3f9a0;
+assign coeffForR7[14] = 18'h3f91d;
+assign coeffForR7[15] = 18'h3f8f3;
+assign coeffForR7[16] = 18'h3f93d;
+assign coeffForR7[17] = 18'h3fa16;
+assign coeffForR7[18] = 18'h3fb94;
+assign coeffForR7[19] = 18'h3fdc5;
+assign coeffForR7[20] = 18'h000ae;
+assign coeffForR7[21] = 18'h00448;
+assign coeffForR7[22] = 18'h0087e;
+assign coeffForR7[23] = 18'h00d32;
+assign coeffForR7[24] = 18'h01237;
+assign coeffForR7[25] = 18'h01759;
+assign coeffForR7[26] = 18'h01c5d;
+assign coeffForR7[27] = 18'h02105;
+assign coeffForR7[28] = 18'h02516;
+assign coeffForR7[29] = 18'h02858;
+assign coeffForR7[30] = 18'h02a9f;
+assign coeffForR7[31] = 18'h02bca;
+assign coeffForR7[32] = 18'h02bca;
+assign coeffForR7[33] = 18'h02a9f;
+assign coeffForR7[34] = 18'h02858;
+assign coeffForR7[35] = 18'h02516;
+assign coeffForR7[36] = 18'h02105;
+assign coeffForR7[37] = 18'h01c5d;
+assign coeffForR7[38] = 18'h01759;
+assign coeffForR7[39] = 18'h01237;
+assign coeffForR7[40] = 18'h00d32;
+assign coeffForR7[41] = 18'h0087e;
+assign coeffForR7[42] = 18'h00448;
+assign coeffForR7[43] = 18'h000ae;
+assign coeffForR7[44] = 18'h3fdc5;
+assign coeffForR7[45] = 18'h3fb94;
+assign coeffForR7[46] = 18'h3fa16;
+assign coeffForR7[47] = 18'h3f93d;
+assign coeffForR7[48] = 18'h3f8f3;
+assign coeffForR7[49] = 18'h3f91d;
+assign coeffForR7[50] = 18'h3f9a0;
+assign coeffForR7[51] = 18'h3fa5c;
+assign coeffForR7[52] = 18'h3fb39;
+assign coeffForR7[53] = 18'h3fc1f;
+assign coeffForR7[54] = 18'h3fcfc;
+assign coeffForR7[55] = 18'h3fdc3;
+assign coeffForR7[56] = 18'h3fe6c;
+assign coeffForR7[57] = 18'h3fef4;
+assign coeffForR7[58] = 18'h3ff5b;
+assign coeffForR7[59] = 18'h3ffa4;
+assign coeffForR7[60] = 18'h3ffd4;
+assign coeffForR7[61] = 18'h3fff1;
+assign coeffForR7[62] = 18'h3ffff;
+assign coeffForR7[63] = 18'h0000d;

+ 126 - 114
src/src/Sim/DecimFilterWrapperTb.v

@@ -17,7 +17,7 @@ real	signal;
 reg		[31:0]	tbCnt;
 reg		[31:0]	pNumCnt;
 // wire	oscWind	=	(tbCnt==4505)?	1'b1:1'b0;
-wire	oscWind	=	(tbCnt>=4500&tbCnt<=6499)?	1'b1:1'b0;
+wire	oscWind	=	(tbCnt>=4500&tbCnt<=4999)||(tbCnt>=5500&tbCnt<=5999)||(tbCnt>=6500&tbCnt<=6999)||(tbCnt>=7500&tbCnt<=7999)||(tbCnt>=8500&tbCnt<=8999)||(tbCnt>=9500&tbCnt<=9999)?	1'b1:1'b0;
 // wire	oscWind	=	(tbCnt>=1&)?	1'b1:1'b0;
 
 wire	signed	[13:0]	ncoSin1;
@@ -108,21 +108,33 @@ always	@(posedge	Clk50)	begin
 end
 
 always @ (posedge Clk50)	begin
-	if (tbCnt >= 4505)	begin
+	if (oscWind)	begin
 			phase = phase + phaseInc;
 			phaseInc <= phaseInc + 0.0005;
 			signal = $sin(2*pi*phase);
 			adcData = 2**12 * signal;
 	end	else	begin
 		adcData = 0;
+		phase	=	0;
+		phaseInc	=	0.001;
 	end
 end
 	
 always	@(posedge	Clk50)	begin
 	if	(!Rst)	begin
 		if (tbCnt == 100) begin
-			decimFactor	<=	1;
-		end
+			decimFactor	<= 2;
+		end else if (tbCnt == 5400) begin
+			decimFactor	<= 3;
+		end else if (tbCnt == 6400) begin
+			decimFactor	<= 4;
+		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 else begin
 	 decimFactor <= 0;
 	end 
@@ -208,7 +220,7 @@ DecimFilter
 (
 	.Clk_i			(Clk50),
 	.DecimFactor_i	(decimFactor),
-	.Rst_i			(Rst),
+	.Rst_i			(Rst|!oscWind),
 	.OscWind_i		(oscWind),
 	
 	.IfFtwL_i		(24'h51eb85),
@@ -223,137 +235,137 @@ DecimFilter
 	.FilteredDataVal_o	(resultVal)
 );
 
-DecimFilterWrapper	
-#(	
-	.AdcDataWidth	(14),
-	.N	(N),
-	.M	(M),
-	.FilteredDataWidth	(MaxWidth),
-	.FirOutDataWidth	(48),
-	.FirOutCutBit		(42),
-	.LsbForR1			(LsbForR1),
-	.LsbForR2			(LsbForR2),
-	.LsbForR4			(LsbForR4)
-)
-ImpulseResponseFilter
-(
-	.Clk_i			(Clk50),
-	.DecimFactor_i	(decimFactor),
-	.Rst_i			(Rst),
-	.OscWind_i		(oscWind),
+// DecimFilterWrapper	
+// #(	
+	// .AdcDataWidth	(14),
+	// .N	(N),
+	// .M	(M),
+	// .FilteredDataWidth	(MaxWidth),
+	// .FirOutDataWidth	(48),
+	// .FirOutCutBit		(42),
+	// .LsbForR1			(LsbForR1),
+	// .LsbForR2			(LsbForR2),
+	// .LsbForR4			(LsbForR4)
+// )
+// ImpulseResponseFilter
+// (
+	// .Clk_i			(Clk50),
+	// .DecimFactor_i	(decimFactor),
+	// .Rst_i			(Rst),
+	// .OscWind_i		(oscWind),
 	
-	.IfFtwL_i		(24'h51eb85),
-	.IfFtwH_i		(24'h23),
+	// .IfFtwL_i		(24'h51eb85),
+	// .IfFtwH_i		(24'h23),
 	
-	.AdcData_i		(singlePulse),
+	// .AdcData_i		(singlePulse),
 	
-	.FilteredAdcDataI_o	(impResponse),
-	.FilteredAdcDataQ_o	(),
-	.FilteredDataVal_o	()
-);
+	// .FilteredAdcDataI_o	(impResponse),
+	// .FilteredAdcDataQ_o	(),
+	// .FilteredDataVal_o	()
+// );
 
-reg		[32-1:0]	windArg;
-wire	[31:0]	WindPhInc		=	32'h418937<<<decimFactor-2;
+// reg		[32-1:0]	windArg;
+// wire	[31:0]	WindPhInc		=	32'h418937<<<decimFactor-2;
 
-always	@(posedge	Clk50)	begin
-	if	(!Rst)	begin
-		if	(resultVal)	begin
-			windArg	<=	windArg+WindPhInc;
-		end
-	end	else	begin
-		windArg	<=	WindPhInc>>1;
-	end
-end	
+// always	@(posedge	Clk50)	begin
+	// if	(!Rst)	begin
+		// if	(resultVal)	begin
+			// windArg	<=	windArg+WindPhInc;
+		// end
+	// end	else	begin
+		// windArg	<=	WindPhInc>>1;
+	// end
+// end	
 
-reg	[1:0]	valReg;
-always	@(posedge	Clk50)	begin
-	if	(!Rst)	begin
-		valReg[0]	<=	resultVal;
-		valReg[1]	<=	valReg[0];
-	end	else	begin
-		valReg	<=	2'b0;
-	end
-end
+// reg	[1:0]	valReg;
+// always	@(posedge	Clk50)	begin
+	// if	(!Rst)	begin
+		// valReg[0]	<=	resultVal;
+		// valReg[1]	<=	valReg[0];
+	// end	else	begin
+		// valReg	<=	2'b0;
+	// end
+// end
 	
 
 
-integer inSignal,filteredData, impResp;
-parameter	PNum	=	5000;
+// integer inSignal,filteredData, impResp;
+// parameter	PNum	=	5000;
 
-wire	signed	[17:0]	firDataOut;
-wire	signed	[17:0]	firRespout;
-wire	firDataVal;
-wire	firRespVal;
+// wire	signed	[17:0]	firDataOut;
+// wire	signed	[17:0]	firRespout;
+// wire	firDataVal;
+// wire	firRespVal;
 
-systolicFilter DataFitler (
-	.Clk_i(Clk50), 
-	.Rst_i(Rst), 
-	.Data_i(sinAddExt18), 
-	.DataNd_i(oscWind), 
-	.Data_o(firDataOut), 
-	.DataValid_o(firDataVal)
-);
+// systolicFilter DataFitler (
+	// .Clk_i(Clk50), 
+	// .Rst_i(Rst), 
+	// .Data_i(sinAddExt18), 
+	// .DataNd_i(oscWind), 
+	// .Data_o(firDataOut), 
+	// .DataValid_o(firDataVal)
+// );
 
-systolicFilter RespFilter (
-	.Clk_i(Clk50), 
-	.Rst_i(Rst), 
-	.Data_i(singlePulseExt), 
-	.DataNd_i(oscWind), 
-	.Data_o(firRespout), 
-	.DataValid_o(firRespVal)
-);
+// systolicFilter RespFilter (
+	// .Clk_i(Clk50), 
+	// .Rst_i(Rst), 
+	// .Data_i(singlePulseExt), 
+	// .DataNd_i(oscWind), 
+	// .Data_o(firRespout), 
+	// .DataValid_o(firRespVal)
+// );
 
 
 
-always	@(posedge	Clk50)	begin
-	if	(Rst)	begin
-		inSignal = $fopen("C:/S5243_FFT_REPO/src/src/Sim/InputSignal.txt","w");
-	end	else	begin
-		if	(oscWind)	begin
+// always	@(posedge	Clk50)	begin
+	// if	(Rst)	begin
+		// inSignal = $fopen("C:/S5243_FFT_REPO/src/src/Sim/InputSignal.txt","w");
+	// end	else	begin
+		// if	(oscWind)	begin
 			// $display("AdcData is %d", sinAdd);
-			$fwrite(inSignal,"%d\n",   sinAddExt18);
+			// $fwrite(inSignal,"%d\n",   sinAddExt18);
 			// $fwrite(inSignal,"%d\n",   sinAdd);
-		end	
-	end	
-end
-
-reg	[31:0]	testCnt;
-wire	[10:0]	test = N*2+N*2+decimFactor;
-wire	[10:0]	test1 = N*2+N*2+decimFactor-1;
-wire	writeEn	=	(oscWindDelay[N*2+N*2+decimFactor]);
-
-always	@(posedge	Clk50)begin
-	if	(!Rst)	begin
-		if	(writeEn)	begin
-			testCnt	<=	testCnt	+1;
-		end
-	end	else	begin
-		testCnt	<=	0;
-	end
-end
+		// end	
+	// end	
+// end
+
+// reg	[31:0]	testCnt;
+// wire	[10:0]	test = N*2+N*2+decimFactor;
+// wire	[10:0]	test1 = N*2+N*2+decimFactor-1;
+// wire	writeEn	=	(oscWindDelay[N*2+N*2+decimFactor]);
+
+// always	@(posedge	Clk50)begin
+	// if	(!Rst)	begin
+		// if	(writeEn)	begin
+			// testCnt	<=	testCnt	+1;
+		// end
+	// end	else	begin
+		// testCnt	<=	0;
+	// end
+// end
 
-always	@(posedge	Clk50)	begin
-	if	(Rst)	begin
-		filteredData = $fopen("C:/S5243_FFT_REPO/src/src/Sim/FilteredData.txt","w");
-	end	else	begin
-		if	(firDataVal)	begin
+// always	@(posedge	Clk50)	begin
+	// if	(Rst)	begin
+		// filteredData = $fopen("C:/S5243_FFT_REPO/src/src/Sim/FilteredData.txt","w");
+	// end	else	begin
+		// if	(firDataVal)	begin
 			// $fwrite(filteredData,"%d\n",   filteredDataOut);
-			$fwrite(filteredData,"%d\n",   firDataOut);
-		end	
-	end	
-end
+			// $fwrite(filteredData,"%d\n",   firDataOut);
+		// end	
+	// end	
+// end
  
 
-always	@(posedge	Clk50)	begin
-	if	(Rst)	begin
-		impResp = $fopen("C:/S5243_FFT_REPO/src/src/Sim/ImpResp.txt","w");
-	end	else	begin
-		if	(firDataVal)	begin
-			$fwrite(impResp,"%d\n",   firRespout);
+// always	@(posedge	Clk50)	begin
+	// if	(Rst)	begin
+		// impResp = $fopen("C:/S5243_FFT_REPO/src/src/Sim/ImpResp.txt","w");
+	// end	else	begin
+		// if	(firDataVal)	begin
+			// $fwrite(impResp,"%d\n",   firRespout);
 			// $fwrite(impResp,"%d\n",   m_axis_data_tdata_imp);
-		end	
-	end
-end 
+		// end	
+	// end
+// end 
 
 // always	@(posedge	Clk50)	begin
 	// if	(Rst)	begin

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4000 - 2000
src/src/Sim/FilteredData.txt


+ 70 - 70
src/src/Sim/FiltersCoeffs.coe

@@ -1,74 +1,74 @@
 MEMORY_INITIALIZATION_RADIX =16;
-MEMORY_INITIALIZATION_VECTOR =00071,
-0023f,
-00520,
-00693,
-003e2,
-3fe88,
-3fc0d,
-3ff54,
-00396,
-00238,
-3fced,
-3fc35,
-00212,
-0055a,
-3ffac,
-3f963,
-3fdbe,
-00732,
-005aa,
-3f95c,
-3f64b,
-00476,
-00e1b,
-3ffee,
-3ed82,
-3f88a,
-01677,
-0144f,
-3e65f,
-3d178,
-01bac,
-0a04e,
-0e39e,
-0a04e,
-01bac,
-3d178,
-3e65f,
-0144f,
-01677,
-3f88a,
-3ed82,
-3ffee,
-00e1b,
-00476,
-3f64b,
-3f95c,
-005aa,
-00732,
-3fdbe,
-3f963,
-3ffac,
-0055a,
-00212,
-3fc35,
-3fced,
-00238,
-00396,
-3ff54,
-3fc0d,
-3fe88,
-003e2,
-00693,
-00520,
-0023f,
-00071,
-3ffc9,
-3ff4e,
-3fe99,
-3fe08,
-3fe36,
+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,

binární
src/src/Sim/FiltersParameters.xlsx


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4000 - 2000
src/src/Sim/ImpResp.txt


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2000 - 0
src/src/Sim/InputSignal.txt


+ 49 - 0
src/src/Sim/R2Test.fcf

@@ -0,0 +1,49 @@
+ 0.00232696533203125                                                           
+ 0.00856781005859375                                                           
+ 0.01430511474609375                                                           
+ 0.0113067626953125                                                            
+-0.00147247314453125                                                           
+-0.01067352294921875                                                           
+-0.00383758544921875                                                           
+ 0.0105438232421875                                                            
+ 0.0098724365234375                                                            
+-0.008392333984375                                                             
+-0.0169525146484375                                                            
+ 0.00243377685546875                                                           
+ 0.02350616455078125                                                           
+ 0.00861358642578125                                                           
+-0.0272979736328125                                                            
+-0.02559661865234375                                                           
+ 0.0251312255859375                                                            
+ 0.05007171630859375                                                           
+-0.01154327392578125                                                           
+-0.08837890625                                                                 
+-0.0316009521484375                                                            
+ 0.1885223388671875                                                            
+ 0.39971923828125                                                              
+ 0.39971923828125                                                              
+ 0.1885223388671875                                                            
+-0.0316009521484375                                                            
+-0.08837890625                                                                 
+-0.01154327392578125                                                           
+ 0.05007171630859375                                                           
+ 0.0251312255859375                                                            
+-0.02559661865234375                                                           
+-0.0272979736328125                                                            
+ 0.00861358642578125                                                           
+ 0.02350616455078125                                                           
+ 0.00243377685546875                                                           
+-0.0169525146484375                                                            
+-0.008392333984375                                                             
+ 0.0098724365234375                                                            
+ 0.0105438232421875                                                            
+-0.00383758544921875                                                           
+-0.01067352294921875                                                           
+-0.00147247314453125                                                           
+ 0.0113067626953125                                                            
+ 0.01430511474609375                                                           
+ 0.00856781005859375                                                           
+ 0.00232696533203125                                                           
+
+                                                                              
+

+ 6 - 4
src/src/Sim/S5243TopSpectrumTb.v

@@ -37,7 +37,7 @@ module S5243TopSpectrumTb;
 	localparam	[4:0]	MUXFASTMODCMD	=	5'd1;
 	localparam	[4:0]	GATINGMUXCMD	=	5'd2;
 	localparam	[4:0]	SMPLSTRBMUXCMD	=	5'd3;
-	localparam	[6:0]	DECIMFACTOR		=	7'd7;
+	localparam	[6:0]	DECIMFACTOR		=	7'd2;
 	
 	localparam	[1:0]	CURRADCCHANNEL	=	2'h3;
 	//COMMANDS	FOR REG_MAP
@@ -209,7 +209,9 @@ ncoInst2
 	.Clk_i		(Clk50),
 	.Rst_i		(rst),
 	.Val_i		(1'b1),
-	.PhaseInc_i	(32'h33333333),
+	// .PhaseInc_i	(32'h33333333),
+	// .PhaseInc_i	(32'h4ccccccc),
+	.PhaseInc_i	(32'h40000000),
 	.WindVal_i	(1'b1),
 	.WinType_i	(),
 	.Wind_o		(),
@@ -321,8 +323,8 @@ S5243Top MasterFpga
 	.AmpEn_o				(),	//	0-adc1ChA 1-adc1ChB 2-adc2ChA 3-adc2ChB
 	// .AdcData_i				(sin_value[17-:14])
 	// .AdcData_i			(DelpaPulse)
-	// .AdcData_i			(sinAdd)
-	.AdcData_i			(Data_i)
+	.AdcData_i			(sinAdd)
+	// .AdcData_i			(Data_i)
 );
 parameter	IDLE	=	2'h0;
 parameter	CMD		=	2'h1;

+ 4 - 4
src/src/Sim/firFilter/systolicFilter.v

@@ -2,12 +2,13 @@ module systolicFilter
 #(	parameter	filteredDataWidth	=	38,
 	parameter	inOutDataWidth	=	18,
 	parameter	decimCntWidth	=	7,
-	parameter	CoeffCount		=	65
+	parameter	CoeffCount		=	64
 )
 (
 	input Clk_i,
 	input Rst_i,
 	input [inOutDataWidth-1:0] CoefData_i,
+	input [3-1:0] DecimFactor_i,
 	input CoefDataVal_i,
 	input [inOutDataWidth-1:0] Data_i,
 	input DataNd_i,
@@ -17,7 +18,7 @@ module systolicFilter
 
 	wire [47:0] outData;
 	wire outDataValid;
-	systolicFilterBlock # (
+	systolicFilterBlockTest # (
 		.CoeffCount(CoeffCount)
 	)
 	systolicFilterBlockInst
@@ -25,8 +26,7 @@ module systolicFilter
 		.Clk_i(Clk_i),
 		.Rst_i(Rst_i),
 		.Data_i(Data_i),
-		.CoefData_i(CoefData_i),
-		.CoefDataVal_i(CoefDataVal_i),
+		.DecimFactor_i(DecimFactor_i),
 		.DataNd_i(DataNd_i),
 		.Data_o(outData),
 		.DataValid_o(outDataValid)

+ 37 - 1
src/src/Sim/firFilter/systolicFilterBlock.v

@@ -51,7 +51,43 @@ module systolicFilterBlock # (
 			if (CoefDataVal_i) begin
 				coeff[addrCnt] = CoefData_i;
 			end
-		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
 	
 	genvar i;

+ 102 - 0
src/src/Sim/firFilter/systolicFilterBlockTest.v

@@ -0,0 +1,102 @@
+module systolicFilterBlockTest # (
+	parameter CoeffCount = 64
+)
+(
+	input Clk_i,
+	input Rst_i,
+	input [17:0] Data_i,
+	input [2:0]  DecimFactor_i,
+	input DataNd_i,
+	output [47:0] Data_o,
+	output DataValid_o
+);
+
+	`include "CoeffsForR2.vh"
+	`include "CoeffsForR3.vh"
+	`include "CoeffsForR4.vh"
+	`include "CoeffsForR5.vh"
+	`include "CoeffsForR6.vh"
+	`include "CoeffsForR7.vh"
+
+	// wire signed [17:0] coeff[0:CoeffCount-1];
+	reg	 signed [17:0] coeff[0:CoeffCount-1];
+	wire signed [17:0] dataIn = Data_i;
+	reg [3:0] ndShReg;
+	
+	always @ (posedge Clk_i)
+		if (!Rst_i) begin
+			ndShReg <= {ndShReg[2:0], DataNd_i};
+		end else begin
+			ndShReg <= 4'h0;
+		end
+	
+	reg signed [17:0] inReg0[0:CoeffCount-1];
+	reg signed [17:0] inReg1[0:CoeffCount-1];
+	reg signed [34:0] multResult[0:CoeffCount-1];
+	reg signed [47:0] sumResult[0:CoeffCount-1];
+	
+	genvar i;
+	generate
+		for (i = 0; i < CoeffCount; i = i + 1)begin 
+			always @ (posedge Clk_i) begin
+				if (!Rst_i) begin
+					if (DataNd_i) begin
+						if (i == 0) begin
+							inReg0[i] <= 0;
+							inReg1[i] <= dataIn;
+						end else begin
+							inReg0[i] <= inReg1[i-1];
+							inReg1[i] <= inReg0[i];
+						end
+					end
+				
+					if (ndShReg[0]) begin
+						case (DecimFactor_i) 
+							0:	begin
+									multResult[i] <= inReg1[i] * coeffForR2[i];
+								end
+							1:	begin
+									multResult[i] <= inReg1[i] * coeffForR2[i];
+								end
+							2:	begin
+									multResult[i] <= inReg1[i] * coeffForR2[i];
+								end
+							3:	begin
+									multResult[i] <= inReg1[i] * coeffForR3[i];
+								end
+							4:	begin
+									multResult[i] <= inReg1[i] * coeffForR4[i];
+								end
+							5:	begin
+									multResult[i] <= inReg1[i] * coeffForR5[i];
+								end
+							6:	begin
+									multResult[i] <= inReg1[i] * coeffForR6[i];
+								end
+							7:	begin
+									multResult[i] <= inReg1[i] * coeffForR7[i];
+								end
+						endcase
+					end
+					
+					if (ndShReg[1]) begin
+						if (i == 0) begin
+							sumResult[i] <= multResult[i];
+						end else begin
+							sumResult[i] <= multResult[i] + sumResult[i-1];
+						end
+					end
+				end else begin
+					sumResult[i] <= 0;
+					multResult[i] <= 0;
+					inReg0[i] <= 0;
+					inReg1[i] <= 0;
+				end
+			end 
+		end
+	endgenerate
+
+	assign Data_o = sumResult[CoeffCount-1];
+	assign DataValid_o = ndShReg[2];
+
+endmodule

+ 65 - 66
src/src/Sim/fir_filter2.coe

@@ -1,70 +1,69 @@
 ; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
 ; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
-; Generated on: 02-Feb-2024 15:24:05
+; Generated on: 27-Feb-2024 14:18:47
 Radix = 16; 
 Coefficient_Width = 18; 
-CoefData = 00071,
-0023f,
-00520,
-00693,
-003e2,
-3fe88,
-3fc0d,
-3ff54,
-00396,
-00238,
-3fced,
-3fc35,
-00212,
-0055a,
-3ffac,
-3f963,
-3fdbe,
-00732,
-005aa,
-3f95c,
-3f64b,
-00476,
-00e1b,
-3ffee,
-3ed82,
-3f88a,
-01677,
-0144f,
-3e65f,
-3d178,
-01bac,
-0a04e,
-0e39e,
-0a04e,
-01bac,
-3d178,
-3e65f,
-0144f,
-01677,
-3f88a,
-3ed82,
-3ffee,
-00e1b,
-00476,
-3f64b,
-3f95c,
-005aa,
-00732,
-3fdbe,
-3f963,
-3ffac,
-0055a,
-00212,
-3fc35,
-3fced,
-00238,
-00396,
-3ff54,
-3fc0d,
-3fe88,
-003e2,
-00693,
-00520,
-0023f,
-00071;
+CoefData = 0008d,
+001f0,
+002ef,
+00120,
+3fc41,
+3f874,
+3fa4a,
+00000,
+00252,
+3fe55,
+3fab0,
+3fe2e,
+0044b,
+002fc,
+3fb57,
+3f9f8,
+002dd,
+00844,
+3ff94,
+3f566,
+3fc25,
+00bbf,
+00999,
+3f498,
+3ee98,
+00846,
+01c05,
+3ffda,
+3d2d7,
+3e9fe,
+05ddf,
+0d15d,
+0d15d,
+05ddf,
+3e9fe,
+3d2d7,
+3ffda,
+01c05,
+00846,
+3ee98,
+3f498,
+00999,
+00bbf,
+3fc25,
+3f566,
+3ff94,
+00844,
+002dd,
+3f9f8,
+3fb57,
+002fc,
+0044b,
+3fe2e,
+3fab0,
+3fe55,
+00252,
+00000,
+3fa4a,
+3f874,
+3fc41,
+00120,
+002ef,
+001f0,
+0008d;

+ 65 - 66
src/src/Sim/fir_filter3.coe

@@ -1,70 +1,69 @@
 ; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
 ; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
-; Generated on: 02-Feb-2024 15:37:19
+; Generated on: 27-Feb-2024 15:55:00
 Radix = 16; 
 Coefficient_Width = 18; 
-CoefData = 3ffc9,
-3ff4e,
-3fe99,
-3fe08,
-3fe36,
-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;
+CoefData = 3ffce,
+3ff73,
+3ff10,
+3ff10,
+3fff3,
+001ec,
+0047f,
+0067c,
+00686,
+00402,
+3ffcf,
+3fc24,
+3fb5d,
+3fe53,
+00360,
+00702,
+00614,
+0003f,
+3f8eb,
+3f579,
+3f994,
+003f1,
+00e02,
+00fa0,
+004d3,
+3f212,
+3e399,
+3e754,
+0045b,
+0352b,
+0688d,
+08966,
+08966,
+0688d,
+0352b,
+0045b,
+3e754,
+3e399,
+3f212,
+004d3,
+00fa0,
+00e02,
+003f1,
+3f994,
+3f579,
+3f8eb,
+0003f,
+00614,
+00702,
+00360,
+3fe53,
+3fb5d,
+3fc24,
+3ffcf,
+00402,
+00686,
+0067c,
+0047f,
+001ec,
+3fff3,
+3ff10,
+3ff10,
+3ff73,
+3ffce;

+ 65 - 66
src/src/Sim/fir_filter4.coe

@@ -1,70 +1,69 @@
 ; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
 ; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
-; Generated on: 02-Feb-2024 15:38:03
+; Generated on: 27-Feb-2024 15:55:30
 Radix = 16; 
 Coefficient_Width = 18; 
-CoefData = 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;
+CoefData = 3fff9,
+0001b,
+0006b,
+0010a,
+001ff,
+00335,
+0046d,
+00543,
+0054b,
+00438,
+00203,
+3ff0f,
+3fc1e,
+3fa29,
+3fa10,
+3fc38,
+0004b,
+00524,
+0090e,
+00a45,
+007a3,
+00134,
+3f87c,
+3f04a,
+3ec0e,
+3eed8,
+3fa4d,
+00dec,
+026e2,
+04092,
+055ac,
+0618f,
+0618f,
+055ac,
+04092,
+026e2,
+00dec,
+3fa4d,
+3eed8,
+3ec0e,
+3f04a,
+3f87c,
+00134,
+007a3,
+00a45,
+0090e,
+00524,
+0004b,
+3fc38,
+3fa10,
+3fa29,
+3fc1e,
+3ff0f,
+00203,
+00438,
+0054b,
+00543,
+0046d,
+00335,
+001ff,
+0010a,
+0006b,
+0001b,
+3fff9;

+ 65 - 66
src/src/Sim/fir_filter5.coe

@@ -1,70 +1,69 @@
 ; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
 ; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
-; Generated on: 02-Feb-2024 15:38:32
+; Generated on: 27-Feb-2024 15:55:49
 Radix = 16; 
 Coefficient_Width = 18; 
-CoefData = 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;
+CoefData = 3ffe0,
+3ffb6,
+3ff70,
+3ff15,
+3feb0,
+3fe5a,
+3fe33,
+3fe5d,
+3fef9,
+00018,
+001b1,
+0039d,
+00594,
+00733,
+0080e,
+007c4,
+00617,
+00308,
+3fee3,
+3fa43,
+3f605,
+3f32b,
+3f2b0,
+3f55e,
+3fb9b,
+0054c,
+011c7,
+01fe3,
+02e16,
+03ab1,
+04422,
+0492f,
+0492f,
+04422,
+03ab1,
+02e16,
+01fe3,
+011c7,
+0054c,
+3fb9b,
+3f55e,
+3f2b0,
+3f32b,
+3f605,
+3fa43,
+3fee3,
+00308,
+00617,
+007c4,
+0080e,
+00733,
+00594,
+0039d,
+001b1,
+00018,
+3fef9,
+3fe5d,
+3fe33,
+3fe5a,
+3feb0,
+3ff15,
+3ff70,
+3ffb6,
+3ffe0;

+ 61 - 62
src/src/Sim/fir_filter6.coe

@@ -1,70 +1,69 @@
 ; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
 ; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
-; Generated on: 02-Feb-2024 15:38:58
+; Generated on: 27-Feb-2024 15:56:03
 Radix = 16; 
 Coefficient_Width = 18; 
-CoefData = 0001b,
-0003a,
-00072,
+CoefData = 0001d,
+0003d,
+00074,
 000c2,
-0012c,
-001ab,
-00235,
+00126,
+00199,
+0020f,
+00277,
 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,
+002bb,
+00265,
+001a1,
+00066,
+3feb8,
+3fcac,
+3fa6c,
+3f835,
+3f652,
+3f518,
+3f4dc,
+3f5ea,
+3f877,
+3fc9d,
+0024e,
+00957,
+0115b,
+019dc,
+02246,
+029fb,
+03062,
+034f8,
+0375c,
+0375c,
+034f8,
+03062,
+029fb,
+02246,
+019dc,
+0115b,
+00957,
+0024e,
+3fc9d,
+3f877,
+3f5ea,
+3f4dc,
+3f518,
+3f652,
+3f835,
+3fa6c,
+3fcac,
+3feb8,
+00066,
+001a1,
+00265,
+002bb,
 002b9,
-00235,
-001ab,
-0012c,
+00277,
+0020f,
+00199,
+00126,
 000c2,
-00072,
-0003a,
-0001b;
+00074,
+0003d,
+0001d;

+ 65 - 66
src/src/Sim/fir_filter7.coe

@@ -1,70 +1,69 @@
 ; XILINX CORE Generator(tm)Distributed Arithmetic FIR filter coefficient (.COE) File
 ; Generated by MATLAB(R) 9.13 and DSP System Toolbox 9.15.
-; Generated on: 02-Feb-2024 15:39:39
+; Generated on: 27-Feb-2024 15:56:15
 Radix = 16; 
 Coefficient_Width = 18; 
-CoefData = 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;
+CoefData = 0000d,
+3ffff,
+3fff1,
+3ffd4,
+3ffa4,
+3ff5b,
+3fef4,
+3fe6c,
+3fdc3,
+3fcfc,
+3fc1f,
+3fb39,
+3fa5c,
+3f9a0,
+3f91d,
+3f8f3,
+3f93d,
+3fa16,
+3fb94,
+3fdc5,
+000ae,
+00448,
+0087e,
+00d32,
+01237,
+01759,
+01c5d,
+02105,
+02516,
+02858,
+02a9f,
+02bca,
+02bca,
+02a9f,
+02858,
+02516,
+02105,
+01c5d,
+01759,
+01237,
+00d32,
+0087e,
+00448,
+000ae,
+3fdc5,
+3fb94,
+3fa16,
+3f93d,
+3f8f3,
+3f91d,
+3f9a0,
+3fa5c,
+3fb39,
+3fc1f,
+3fcfc,
+3fdc3,
+3fe6c,
+3fef4,
+3ff5b,
+3ffa4,
+3ffd4,
+3fff1,
+3ffff,
+0000d;

+ 46 - 1
src/src/Sim/untitled.txt

@@ -1 +1,46 @@
-000FFFF00FF000FF000000FF000FF00FFFF000000FFFF00FF000FF000000FF000FF00FFFF000000FFFF00FF000FF000000FF000FF00FFFF000000FFFF00FF000FF000000FF000FF00FFFF000000FFFF00FF010ED06BB60DE010FF00FFFF000010B56F857104FB506EE605BF401758F65B010DFEEE45516CDF06BCCCCCCB60FDC61554EEEFDB5E4F2BCED79216CCDCCDCC61297DECB2F4E5B
+131
+463
+753
+5CA
+-1.930000e+02
+-1.399000e+03
+-5.030000e+02
+566
+50E
+-1.100000e+03
+-2.222000e+03
+13F
+C09
+469
+-3.578000e+03
+-3.355000e+03
+CDE
+19A3
+-1.513000e+03
+-1.158400e+04
+-4.142000e+03
+6086
+CCA8
+CCA8
+6086
+-4.142000e+03
+-1.158400e+04
+-1.513000e+03
+19A3
+CDE
+-3.355000e+03
+-3.578000e+03
+469
+C09
+13F
+-2.222000e+03
+-1.100000e+03
+50E
+566
+-5.030000e+02
+-1.399000e+03
+-1.930000e+02
+5CA
+753
+463
+131

+ 9 - 9
src/src/Top/S5243Top.v

@@ -679,15 +679,15 @@ ExternalDspInterface
 	
 	.OscDataRdFlag_o	(oscDataRdFlag),
 	
-	.Adc1ChT1Data_i		(adc1ChT1Data),	
-	.Adc1ChR1Data_i		(adc1ChR1Data),	
-	.Adc2ChR2Data_i		(adc2ChT2Data),	
-	.Adc2ChT2Data_i		(adc2ChR2Data),	
-
-	// .Adc1ChT1Data_i		(AdcData_i),	
-	// .Adc1ChR1Data_i		(AdcData_i),	
-	// .Adc2ChR2Data_i		(AdcData_i),	
-	// .Adc2ChT2Data_i		(AdcData_i),	
+	// .Adc1ChT1Data_i		(adc1ChT1Data),	
+	// .Adc1ChR1Data_i		(adc1ChR1Data),	
+	// .Adc2ChR2Data_i		(adc2ChT2Data),	
+	// .Adc2ChT2Data_i		(adc2ChR2Data),	
+
+	.Adc1ChT1Data_i		(AdcData_i),	
+	.Adc1ChR1Data_i		(AdcData_i),	
+	.Adc2ChR2Data_i		(AdcData_i),	
+	.Adc2ChT2Data_i		(AdcData_i),	
 	
 	// .Adc1ChT1Data_i		(sinAdd),	
 	// .Adc1ChR1Data_i		(sinAdd),