|
@@ -68,15 +68,41 @@ reg plsToggleSyncB;
|
|
|
reg ssPosEdge;
|
|
reg ssPosEdge;
|
|
|
wire ssPosEdgeSync;
|
|
wire ssPosEdgeSync;
|
|
|
wire [63:0] dataFromDdsFifoCut;
|
|
wire [63:0] dataFromDdsFifoCut;
|
|
|
|
|
+reg [9:0] parityErrors; // Ошибки чётности для каждого байта
|
|
|
|
|
+wire [9:0] byteParityBits; // Вычисленные биты чётности
|
|
|
|
|
+wire [9:0] storedParityBits; // Сохранённые биты чётности
|
|
|
//================================================================================
|
|
//================================================================================
|
|
|
// ASSIGNMENTS
|
|
// ASSIGNMENTS
|
|
|
//================================================================================
|
|
//================================================================================
|
|
|
assign DdsWordNumReg_o = ddsWordNumReg;
|
|
assign DdsWordNumReg_o = ddsWordNumReg;
|
|
|
assign ssPosEdgeSync = plsToggleSyncB^plsToggleSyncA;
|
|
assign ssPosEdgeSync = plsToggleSyncB^plsToggleSyncA;
|
|
|
assign dataFromDdsFifoCut = dataFromDdsFifo[63:0];
|
|
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 //
|
|
// 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
|
|
always @(posedge WrClk_i) begin
|
|
|
if (Rst_i) begin
|
|
if (Rst_i) begin
|
|
|
ssR <= 1'b0;
|
|
ssR <= 1'b0;
|
|
@@ -195,6 +221,7 @@ FifoCtrl #(
|
|
|
.FifoFull_i (ddsFifoFull),
|
|
.FifoFull_i (ddsFifoFull),
|
|
|
.FifoEmpty_i (ddsFifoEmpty),
|
|
.FifoEmpty_i (ddsFifoEmpty),
|
|
|
.Data_o (dataFromDdsFifoCtrl),
|
|
.Data_o (dataFromDdsFifoCtrl),
|
|
|
|
|
+ .ParityBits_o (storedParityBits),
|
|
|
.ReadEn_o (readEnDds),
|
|
.ReadEn_o (readEnDds),
|
|
|
.WriteEn_o (writeEnDds),
|
|
.WriteEn_o (writeEnDds),
|
|
|
.ValRdData_o (valRdDataDDS)
|
|
.ValRdData_o (valRdDataDDS)
|