浏览代码

Тестовые изменения.

ChStepan 1 年之前
父节点
当前提交
463a3b116a

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

@@ -25,7 +25,10 @@ module	DecimFilterWrapper
 	parameter	M	=	2,
 	parameter	FilteredDataWidth	=	38,
 	parameter	FirOutDataWidth		=	48,
-	parameter	FirOutCutBit		=	42
+	parameter	FirOutCutBit		=	42,
+	parameter	LsbForR1	=	10'd16,
+	parameter	LsbForR2	=	10'd16,
+	parameter	LsbForR4	=	10'd16
 )
 (
 	input	Clk_i,
@@ -71,13 +74,13 @@ module	DecimFilterWrapper
 	
 	localparam	extendBitNum	=	FilteredDataWidth-AdcDataWidth;
 	
-	localparam	maxWidthForR1	=	10'd16;	//msb for R = 2;
-	localparam	maxWidthForR2	=	10'd23;	//msb for R = 2;
-	localparam	maxWidthForR3	=	10'd26;	//msb for R = 3;
-	localparam	maxWidthForR4	=	10'd30;	//msb for R = 4;
-	localparam	maxWidthForR5	=	10'd31;	//msb for R = 5;
-	localparam	maxWidthForR6	=	10'd33;	//msb for R = 6;
-	localparam	maxWidthForR7	=	10'd34;	//msb for R = 7;
+	// localparam	maxWidthForR1	=	10'd16;	//msb for R = 2;
+	// localparam	maxWidthForR2	=	10'd16;	//msb for R = 2;
+	// localparam	maxWidthForR3	=	10'd26;	//msb for R = 3;
+	// localparam	maxWidthForR4	=	10'd30;	//msb for R = 4;
+	// localparam	maxWidthForR5	=	10'd31;	//msb for R = 5;
+	// localparam	maxWidthForR6	=	10'd33;	//msb for R = 6;
+	// localparam	maxWidthForR7	=	10'd34;	//msb for R = 7;
 	// localparam	maxWidthForR8	=	5'd26;	//msb for R = 8;
 	// localparam	maxWidthForR9	=	5'd27;	//msb for R = 9;
 	// localparam	maxWidthForR10	=	5'd28;	//msb for R = 10;
@@ -89,9 +92,9 @@ module	DecimFilterWrapper
 //	ASSIGNMENTS
 //================================================================================
 
-	// assign	FilteredAdcDataI_o	=	outDataI;
+	assign	FilteredAdcDataI_o	=	outDataI;
+	// assign	FilteredAdcDataI_o	=	(bypassData)?{{2{AdcData_i[AdcDataWidth-1]}},AdcData_i}:firData[33-:16];
 	// assign	FilteredAdcDataI_o	=	(bypassData)?{{2{AdcData_i[AdcDataWidth-1]}},AdcData_i}:firData[33-:16];
-	assign	FilteredAdcDataI_o	=	(bypassData)?{{2{AdcData_i[AdcDataWidth-1]}},AdcData_i}:firData[33-:16];
 
 	assign	FilteredDataVal_o	=	decimDataValIR;
 	// assign	FilteredDataVal_o	=	(bypassData)?1'b1:firDataVal;
@@ -107,40 +110,37 @@ always	@(posedge	Clk_i)	begin
 	if	(!Rst_i)	begin
 		case(DecimFactor_i)
 			3'd0:	begin
-						// outDataI	<=	{{2{AdcData_i[AdcDataWidth-1]}},AdcData_i};
-						outDataI	<=	AdcData_i;
+						outDataI		<=	decimDataI[LsbForR1-1-:16];
 						decimDataValIR	<=	OscWind_i;
 					end
 			3'd1:	begin
-						// outDataI	<=	{{2{AdcData_i[AdcDataWidth-1]}},AdcData_i};
-						outDataI	<=	decimDataI[maxWidthForR1-1-:16];
+						outDataI		<=	decimDataI[LsbForR1-1-:16];
 						decimDataValIR	<=	OscWind_i;
 					end
 			3'd2:	begin
-						outDataI	<=	decimDataI[maxWidthForR2-1-:16];
-						// decimDataValIR	<=	1'b1;
-						decimDataValIR	<=	decimDataValI;
-					end
-			3'd3:	begin
-						outDataI	<=	decimDataI[maxWidthForR3-1-:16];
+						outDataI		<=	decimDataI[LsbForR2-1-:16];
 						decimDataValIR	<=	decimDataValI;
 					end
+			// 3'd3:	begin
+						// outDataI	<=	decimDataI[maxWidthForR3-1-:16];
+						// decimDataValIR	<=	decimDataValI;
+					// end
 			3'd4:	begin
-						outDataI	<=	decimDataI[maxWidthForR4-1-:16];
-						decimDataValIR	<=	decimDataValI;
-					end
-			3'd5:	begin
-						outDataI	<=	decimDataI[maxWidthForR5-1-:16];
-						decimDataValIR	<=	decimDataValI;
-					end
-			3'd6:	begin
-						outDataI	<=	decimDataI[maxWidthForR6-1-:16];
-						decimDataValIR	<=	decimDataValI;
-					end
-			3'd7:	begin
-						outDataI	<=	decimDataI[maxWidthForR7-:16];
+						outDataI	<=	decimDataI[LsbForR4-1-:16];
 						decimDataValIR	<=	decimDataValI;
 					end
+			// 3'd5:	begin
+						// outDataI	<=	decimDataI[maxWidthForR5-1-:16];
+						// decimDataValIR	<=	decimDataValI;
+					// end
+			// 3'd6:	begin
+						// outDataI	<=	decimDataI[maxWidthForR6-1-:16];
+						// decimDataValIR	<=	decimDataValI;
+					// end
+			// 3'd7:	begin
+						// outDataI	<=	decimDataI[maxWidthForR7-:16];
+						// decimDataValIR	<=	decimDataValI;
+					// end
 		endcase
 	end	else	begin
 		outDataI	<=	16'd0;

+ 47 - 16
src/src/Sim/DecimFilterWrapperTb.v

@@ -21,9 +21,8 @@ wire	oscWind	=	(tbCnt>=4500&tbCnt<=6499)?	1'b1:1'b0;
 // wire	oscWind	=	(tbCnt>=1&)?	1'b1:1'b0;
 
 wire	signed	[13:0]	ncoSin1;
-wire	signed	[13:0]	ncoCos1;
 wire	signed	[13:0]	ncoSin2;
-wire	signed	[13:0]	ncoCos2;
+wire	signed	[13:0]	ncoSin3;
 
 wire	signed	[15:0]	filteredDataOut;
 wire	signed	[15:0]	impResponse;
@@ -36,7 +35,8 @@ wire	respVal;
 wire	signed	[27:0]	adcDataMixed	=	(ncoSin1*ncoSin2);
 wire	signed	[13:0]	adcDataMixedCut	=	adcDataMixed[27-:14];
 
-wire	signed	[13:0]	sinAdd	=	(ncoSin1>>>1)+(ncoSin2>>>1);
+wire	signed	[13:0]	sinAdd	=	(ncoSin1>>>2)+(ncoSin2>>>2)+(ncoSin3>>>2);
+// wire	signed	[13:0]	sinAdd	=	(ncoSin1>>>1)+(ncoSin2>>>1);
 
 reg		signed	[13:0]	currTestData;
 
@@ -50,10 +50,10 @@ always	#10 Clk50	=	~Clk50;
 
 //==========================================================================================
 
-parameter	N	=	8;
+parameter	N	=	1;
 parameter	M	=	1;
 
-parameter	MaxWidth	=	23;
+parameter	MaxWidth	=	16;
 
 initial begin
 	Clk50		=	1'b1;
@@ -118,12 +118,12 @@ ncoInst1
 	.Clk_i		(Clk50),
 	.Rst_i		(Rst),
 	.Val_i		(1'b1),
-	.PhaseInc_i	(32'h20000000),
+	.PhaseInc_i	(32'h0f5c28f5),
 	.WindVal_i	(1'b1),
 	.WinType_i	(),
 	.Wind_o		(),
 	.Sin_o		(ncoSin1),
-	.Cos_o		(ncoCos1),
+	.Cos_o		(),
 	.Val_o		()
 );
 
@@ -139,12 +139,33 @@ ncoInst2
 	.Clk_i		(Clk50),
 	.Rst_i		(Rst),
 	.Val_i		(1'b1),
-	.PhaseInc_i	(32'h3851eb85),
+	.PhaseInc_i	(32'h33333333),
 	.WindVal_i	(1'b1),
 	.WinType_i	(),
 	.Wind_o		(),
 	.Sin_o		(ncoSin2),
-	.Cos_o		(ncoCos2),
+	.Cos_o		(),
+	.Val_o		()
+);
+
+CordicNco		
+#(	
+	.ODatWidth	(14),
+	.PhIncWidth	(32),
+	.IterNum	(10),
+	.EnSinN		(1)
+)
+ncoInst3
+(
+	.Clk_i		(Clk50),
+	.Rst_i		(Rst),
+	.Val_i		(1'b1),
+	.PhaseInc_i	(32'h4ccccccc),
+	.WindVal_i	(1'b1),
+	.WinType_i	(),
+	.Wind_o		(),
+	.Sin_o		(ncoSin3),
+	.Cos_o		(),
 	.Val_o		()
 );
 
@@ -156,7 +177,10 @@ DecimFilterWrapper
 	.M	(M),
 	.FilteredDataWidth	(MaxWidth),
 	.FirOutDataWidth	(48),
-	.FirOutCutBit		(42)
+	.FirOutCutBit		(42),
+	.LsbForR1		(10'd16),
+	.LsbForR2		(10'd16),
+	.LsbForR4		(10'd16)
 )
 DecimFilter
 (
@@ -169,7 +193,8 @@ DecimFilter
 	.IfFtwH_i		(24'h23),
 	
 	// .AdcData_i		(sinAdd),
-	.AdcData_i		(adcData),
+	.AdcData_i		(adcDataMixedCut),
+	// .AdcData_i		(adcData),
 	
 	.FilteredAdcDataI_o	(filteredDataOut),
 	.FilteredAdcDataQ_o	(),
@@ -183,7 +208,10 @@ DecimFilterWrapper
 	.M	(M),
 	.FilteredDataWidth	(MaxWidth),
 	.FirOutDataWidth	(48),
-	.FirOutCutBit		(42)
+	.FirOutCutBit		(42),
+	.LsbForR1		(10'd16),
+	.LsbForR2		(10'd16),
+	.LsbForR4		(10'd16)
 )
 ImpulseResponseFilter
 (
@@ -266,16 +294,19 @@ always	@(posedge	Clk50)	begin
 	end	else	begin
 		if	(oscWind)	begin
 			// $display("AdcData is %d", sinAdd);
-			$fwrite(inSignal,"%d\n",   sinAdd);
+			// $fwrite(inSignal,"%d\n",   sinAdd);
+			$fwrite(inSignal,"%d\n",   adcDataMixed);
 		end	
 	end	
 end
 
 reg	[31:0]	testCnt;
+wire	[10:0]	test = N*2+N*2+decimFactor;
+wire	writeEn	=	(oscWindDelay[N*2+N*2+decimFactor-1]);
 
 always	@(posedge	Clk50)begin
 	if	(!Rst)	begin
-		if	(oscWindDelay[6])	begin
+		if	(writeEn)	begin
 			testCnt	<=	testCnt	+1;
 		end
 	end	else	begin
@@ -287,7 +318,7 @@ always	@(posedge	Clk50)	begin
 	if	(Rst)	begin
 		filteredData = $fopen("C:/S5243_FFT_REPO/src/src/Sim/FilteredData.txt","w");
 	end	else	begin
-		if	(oscWindDelay[6]	&testCnt<=999)	begin
+		if	(writeEn)	begin
 			$fwrite(filteredData,"%d\n",   filteredDataOut);
 		end	
 	end	
@@ -298,7 +329,7 @@ always	@(posedge	Clk50)	begin
 	if	(Rst)	begin
 		impResp = $fopen("C:/S5243_FFT_REPO/src/src/Sim/ImpResp.txt","w");
 	end	else	begin
-		if	(oscWindDelay[6]	&testCnt<=999)	begin
+		if	(writeEn)	begin
 			$fwrite(impResp,"%d\n",   impResponse);
 		end	
 	end

+ 23 - 23
src/src/Sim/FFTTest.m

@@ -1,11 +1,11 @@
 FormatSpec = '%d';
 
-N = 8;
+N = 1;
 R = 2;
 B = 16;
 M = 1;
 
-PointsNum = 1000;
+PointsNum = 2000;
 FilteredDataPNum    =   PointsNum/R;
 
 Bmax = ceil(log2(((R*M)^N)/R)+B)
@@ -37,7 +37,7 @@ fclose(ReadFilterCoefsId);
 
 #########################################################################################################################
 
-FreqBandOrig = Fs/2*(1:(PointsNum))/PointsNum;
+FreqBandOrig = Fs*(1:(PointsNum))/PointsNum;
 FreqbandDecim = (Fs/2*R)*(1:(PointsNum))/PointsNum;
 
 InDataFft = abs(fft(InDataSignal+randn(size(InDataSignal)))/PointsNum);
@@ -53,26 +53,26 @@ ImpuseRespFftDb = ImpuseRespFftDb-max(ImpuseRespFftDb);
 
 
 #########################################################################################################################
-##figure('name','In Data Time/Freq', 'Numbertitle', 'off')
-##subplot(2,1,1)
-##plot(x, InDataSignal)
-##grid on;
-##grid minor;
-##title("In Signal")
-##xlabel("Time")
-##ylabel("Amp")
-##
-##subplot(2,1,2)
-##plot(FreqsDecim,InDataFftDb)
-##grid on;
-##grid minor;
-##title("Single-Sided Amplitude Spectrum of InData")
-##xlabel("f (Hz)")
-##ylabel("Amp")
-##
+figure('name','In Data Time/Freq', 'Numbertitle', 'off')
+subplot(2,1,1)
+plot(x, InDataSignal)
+grid on;
+grid minor;
+title("In Signal")
+xlabel("Time")
+ylabel("Amp")
+
+subplot(2,1,2)
+plot(FreqBandOrig,InDataFftDb)
+grid on;
+grid minor;
+title("Single-Sided Amplitude Spectrum of InData")
+xlabel("f (Hz)")
+ylabel("Amp")
+
 figure('name','Frequency compare', 'Numbertitle', 'off')
 subplot(3,1,1)
-plot(InDataFftDb)
+plot(FreqBandOrig,InDataFftDb)
 grid on;
 grid minor;
 ##axis([0 25 -70 80]);
@@ -81,7 +81,7 @@ xlabel("Time")
 ylabel("Amp")
 
 subplot(3,1,2)
-plot(ImpuseRespFftDb)
+plot(FreqBandOrig,ImpuseRespFftDb)
 grid on;
 grid minor;
 ##axis([0 50 -60 1]);
@@ -90,7 +90,7 @@ xlabel("f (Hz)")
 ylabel("Amp")
 
 subplot(3,1,3)
-plot(FilteredDataFftDb)
+plot(FreqBandOrig,FilteredDataFftDb)
 grid on;
 grid minor;
 ##axis([0 25 -70 80]);

文件差异内容过多而无法显示
+ 2000 - 1000
src/src/Sim/FilteredData.txt


文件差异内容过多而无法显示
+ 2000 - 1000
src/src/Sim/ImpResp.txt


文件差异内容过多而无法显示
+ 2000 - 2000
src/src/Sim/InputSignal.txt


+ 1 - 1
src/src/Sim/KapitanovScriptForCicComp.m

@@ -53,7 +53,7 @@ clear all;
 %  ------------------------------------------------------------------------
 
 R = 2;         % Decimation factor
-N = 2;         % Number opkg f stages
+N = 1;         % Number opkg f stages
 M = 1;         % Differential delay (only 1)
 
 %% ------------------------------------------------------------------------