Kaynağa Gözat

Перенёс проверку ParityBit после FIFO

Anatoliy Chigirinskiy 6 ay önce
ebeveyn
işleme
9163f58879
2 değiştirilmiş dosya ile 30 ekleme ve 19 silme
  1. 3 19
      src/src/FifoCtrl/FifoCtrl.v
  2. 27 0
      src/src/WrapFifoChain/DDSWrapper.v

+ 3 - 19
src/src/FifoCtrl/FifoCtrl.v

@@ -32,6 +32,7 @@ module FifoCtrl #(
     input FifoEmpty_i,
 
     output [OUT_WIDTH-1:0] Data_o,
+    output reg [9:0] ParityBits_o, // 10 bits for parity check
     output reg ReadEn_o,
     output reg  WriteEn_o,
     output reg ValRdData_o
@@ -47,9 +48,6 @@ localparam DATA_WIDTH = WR_NUM*IN_WIDTH;
 //================================================================================
 reg [DATA_WIDTH-1:0] dataReg;
 reg [1:0]  wrCnt;
-reg [9:0] parityErrors;      // Ошибки чётности для каждого байта
-wire [9:0] byteParityBits;   // Вычисленные биты чётности
-reg [9:0] storedParityBits;  // Сохранённые биты чётности
 //================================================================================
 //  ASSIGNMENTS
 //================================================================================
@@ -60,27 +58,13 @@ assign Data_o = dataReg[OUT_WIDTH-1:0];
 //================================================================================
 generate
     if (PARITY_CHECK) begin
-    /* Parity check for each byte */
-        assign byteParityBits[0] = ^dataReg[7:0];
-        assign byteParityBits[1] = ^dataReg[15:8];
-        assign byteParityBits[2] = ^dataReg[23:16];
-        assign byteParityBits[3] = ^dataReg[31:24];
-        assign byteParityBits[4] = ^dataReg[39:32];
-        assign byteParityBits[5] = ^dataReg[47:40];
-        assign byteParityBits[6] = ^dataReg[55:48];
-        assign byteParityBits[7] = ^dataReg[63:56];
-        assign byteParityBits[8] = ^dataReg[71:64];
-        assign byteParityBits[9] = ^dataReg[79:72];
-
         always @(posedge WrClk_i) begin 
                if (Rst_i) begin 
-                   parityErrors <= 0;
-                    storedParityBits <= 0;
+                    ParityBits_o <= 0;
                end
                else begin 
                    if (WriteEn_o) begin
-                       parityErrors <= (dataReg[95:86] ^ byteParityBits);
-                       storedParityBits <= dataReg[95:86];
+                       ParityBits_o <= dataReg[95:86];
                    end
                end
         end

+ 27 - 0
src/src/WrapFifoChain/DDSWrapper.v

@@ -68,15 +68,41 @@ reg plsToggleSyncB;
 reg ssPosEdge;
 wire ssPosEdgeSync;
 wire [63:0] dataFromDdsFifoCut;
+reg [9:0] parityErrors;      // Ошибки чётности для каждого байта
+wire [9:0] byteParityBits;   // Вычисленные биты чётности
+wire [9:0] storedParityBits; // Сохранённые биты чётности
 //================================================================================
 //	                                ASSIGNMENTS
 //================================================================================ 
 assign DdsWordNumReg_o = ddsWordNumReg;
 assign ssPosEdgeSync = plsToggleSyncB^plsToggleSyncA;
 assign dataFromDdsFifoCut = dataFromDdsFifo[63:0];
+/* Parity check for each byte */
+assign byteParityBits[0] = ^dataFromDdsFifo[7:0];
+assign byteParityBits[1] = ^dataFromDdsFifo[15:8];
+assign byteParityBits[2] = ^dataFromDdsFifo[23:16];
+assign byteParityBits[3] = ^dataFromDdsFifo[31:24];
+assign byteParityBits[4] = ^dataFromDdsFifo[39:32];
+assign byteParityBits[5] = ^dataFromDdsFifo[47:40];
+assign byteParityBits[6] = ^dataFromDdsFifo[55:48];
+assign byteParityBits[7] = ^dataFromDdsFifo[63:56];
+assign byteParityBits[8] = ^dataFromDdsFifo[71:64];
+assign byteParityBits[9] = ^dataFromDdsFifo[79:72];
 //==========================================================================//
 //									CODING									//
 //==========================================================================//
+/* Check parity bits */
+always @(posedge RdClk_i) begin 
+	if (Rst_i) begin 
+		parityErrors <= 10'h0;
+	end
+	else begin 
+		if (readEnDds) begin
+			parityErrors <= (storedParityBits ^ byteParityBits);
+		end
+	end
+end 
+
 always @(posedge WrClk_i) begin
 	if (Rst_i) begin 
 		ssR <= 1'b0;
@@ -195,6 +221,7 @@ FifoCtrl #(
 	.FifoFull_i		(ddsFifoFull),
 	.FifoEmpty_i	(ddsFifoEmpty),
 	.Data_o			(dataFromDdsFifoCtrl),
+	.ParityBits_o	(storedParityBits),
 	.ReadEn_o		(readEnDds),
 	.WriteEn_o		(writeEnDds),
 	.ValRdData_o	(valRdDataDDS)