瀏覽代碼

Актуализация FPGA_S проекта.

ChStepan 1 年之前
父節點
當前提交
80c5824d8f
共有 2 個文件被更改,包括 30 次插入4 次删除
  1. 6 0
      S5444_S/src/src/Math/Description.txt
  2. 24 4
      S5444_S/src/src/Math/SumAcc.v

+ 6 - 0
S5444_S/src/src/Math/Description.txt

@@ -0,0 +1,6 @@
+1. Модуль FpCustomMultiplier выполняет перемножение чисел в формате fp32. Работа модуля реализована по стандарту перемножения числе в формате fp32. (читай там как работает). 
+2. Модуль MultModule выполняет умножение данных с текущего канала АЦП с сигналами Sin и Cos сгенерированным CordicNco. Умножение знаковых чисел в формате fixedPoint.
+   По сути это квадратурный демодулятор, на выходе модуля две шины данных - результаты перемножения AdcCos (I) и AdcSin(Q).
+3. Модуль MyIntToFp выполняет преобразование чисел в формат fp32 (вообще имеет перестраиваемые параметры числа бит отводимых под экспоненту и мантиссу).
+4. Модуль SimpleMult выполняет умножие знаковых чисел в формате fixedPoint.
+5. Модуль SumAcc является аккумулятором. Реализован как сумматор входных отсчетов. Суммирование ведется с учетом знаков.

+ 24 - 4
S5444_S/src/src/Math/SumAcc.v

@@ -7,6 +7,7 @@ module SumAcc
     input	Clk_i,
     input	Rst_i,
     input	Val_i,
+    input	AccZeroing_i,
 	input	[IDataWidth-1:0]	Data_i,
 	
 	output	[ODataWidth-1:0]	Result_o,
@@ -22,22 +23,41 @@ module SumAcc
 	reg		resultVal;
 	wire	[ODataWidth-1:0]	extData	=	{{(ODataWidth - IDataWidth){Data_i[IDataWidth-1]}}, Data_i};	//sign extension
 	
+	reg		accZeroing;
+	reg		accZeroingR;
+	reg		accZeroingRR;
 //================================================================================
 //  ASSIGNMENTS
 	assign	Result_o	=	dataAcc;
 	assign	ResultVal_o	=	resultVal;
 //================================================================================
 //  CODING
+
+	always	@(posedge	Clk_i)	begin
+		if	(Rst_i)	begin
+			accZeroing		<=	0;
+			accZeroingR		<=	0;
+			accZeroingRR		<=	0;
+		end	else	begin
+			accZeroing		<=	AccZeroing_i;
+			accZeroingR		<=	accZeroing;
+			accZeroingRR	<=	accZeroingR;
+		end
+	end
+	
 	always	@(posedge	Clk_i)	begin
 		if	(Rst_i)	begin
 			dataAcc		<=	{ODataWidth{1'b0}};
-			resultVal	<=	1'b0;
 		end	else	if	(Val_i)	begin
-			dataAcc		<=	dataAcc+extData;
-			resultVal	<=	Val_i;
+			if	(!accZeroingRR)	begin
+				dataAcc		<=	dataAcc+extData;
+			end	else	begin
+				dataAcc		<=	0+extData;
+			end
+		resultVal	<=	accZeroingR;
 		end	else	begin
 			dataAcc		<=	0;
-			resultVal	<=	1'b0;
+			resultVal	<=	0;
 		end
 	end