blob: 135dc2fde98612d805f99084d802bce4bdf07f98 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// SECDED decoder generated by util/design/secded_gen.py
module prim_secded_hamming_22_16_dec (
input [21:0] data_i,
output logic [15:0] data_o,
output logic [5:0] syndrome_o,
output logic [1:0] err_o
);
always_comb begin : p_encode
// Syndrome calculation
syndrome_o[0] = ^(data_i & 22'h01AD5B);
syndrome_o[1] = ^(data_i & 22'h02366D);
syndrome_o[2] = ^(data_i & 22'h04C78E);
syndrome_o[3] = ^(data_i & 22'h0807F0);
syndrome_o[4] = ^(data_i & 22'h10F800);
syndrome_o[5] = ^(data_i & 22'h3FFFFF);
// Corrected output calculation
data_o[0] = (syndrome_o == 6'h23) ^ data_i[0];
data_o[1] = (syndrome_o == 6'h25) ^ data_i[1];
data_o[2] = (syndrome_o == 6'h26) ^ data_i[2];
data_o[3] = (syndrome_o == 6'h27) ^ data_i[3];
data_o[4] = (syndrome_o == 6'h29) ^ data_i[4];
data_o[5] = (syndrome_o == 6'h2a) ^ data_i[5];
data_o[6] = (syndrome_o == 6'h2b) ^ data_i[6];
data_o[7] = (syndrome_o == 6'h2c) ^ data_i[7];
data_o[8] = (syndrome_o == 6'h2d) ^ data_i[8];
data_o[9] = (syndrome_o == 6'h2e) ^ data_i[9];
data_o[10] = (syndrome_o == 6'h2f) ^ data_i[10];
data_o[11] = (syndrome_o == 6'h31) ^ data_i[11];
data_o[12] = (syndrome_o == 6'h32) ^ data_i[12];
data_o[13] = (syndrome_o == 6'h33) ^ data_i[13];
data_o[14] = (syndrome_o == 6'h34) ^ data_i[14];
data_o[15] = (syndrome_o == 6'h35) ^ data_i[15];
// err_o calc. bit0: single error, bit1: double error
err_o[0] = syndrome_o[5];
err_o[1] = |syndrome_o[4:0] & ~syndrome_o[5];
end
endmodule : prim_secded_hamming_22_16_dec