| // 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_76_68_dec ( |
| input [75:0] data_i, |
| output logic [67:0] data_o, |
| output logic [7:0] syndrome_o, |
| output logic [1:0] err_o |
| ); |
| |
| always_comb begin : p_encode |
| // Syndrome calculation |
| syndrome_o[0] = ^(data_i & 76'h01AAB55555556AAAD5B); |
| syndrome_o[1] = ^(data_i & 76'h02CCD9999999B33366D); |
| syndrome_o[2] = ^(data_i & 76'h040F1E1E1E1E3C3C78E); |
| syndrome_o[3] = ^(data_i & 76'h08F01FE01FE03FC07F0); |
| syndrome_o[4] = ^(data_i & 76'h10001FFFE0003FFF800); |
| syndrome_o[5] = ^(data_i & 76'h20001FFFFFFFC000000); |
| syndrome_o[6] = ^(data_i & 76'h40FFE00000000000000); |
| syndrome_o[7] = ^(data_i & 76'hFFFFFFFFFFFFFFFFFFF); |
| |
| // Corrected output calculation |
| data_o[0] = (syndrome_o == 8'h83) ^ data_i[0]; |
| data_o[1] = (syndrome_o == 8'h85) ^ data_i[1]; |
| data_o[2] = (syndrome_o == 8'h86) ^ data_i[2]; |
| data_o[3] = (syndrome_o == 8'h87) ^ data_i[3]; |
| data_o[4] = (syndrome_o == 8'h89) ^ data_i[4]; |
| data_o[5] = (syndrome_o == 8'h8a) ^ data_i[5]; |
| data_o[6] = (syndrome_o == 8'h8b) ^ data_i[6]; |
| data_o[7] = (syndrome_o == 8'h8c) ^ data_i[7]; |
| data_o[8] = (syndrome_o == 8'h8d) ^ data_i[8]; |
| data_o[9] = (syndrome_o == 8'h8e) ^ data_i[9]; |
| data_o[10] = (syndrome_o == 8'h8f) ^ data_i[10]; |
| data_o[11] = (syndrome_o == 8'h91) ^ data_i[11]; |
| data_o[12] = (syndrome_o == 8'h92) ^ data_i[12]; |
| data_o[13] = (syndrome_o == 8'h93) ^ data_i[13]; |
| data_o[14] = (syndrome_o == 8'h94) ^ data_i[14]; |
| data_o[15] = (syndrome_o == 8'h95) ^ data_i[15]; |
| data_o[16] = (syndrome_o == 8'h96) ^ data_i[16]; |
| data_o[17] = (syndrome_o == 8'h97) ^ data_i[17]; |
| data_o[18] = (syndrome_o == 8'h98) ^ data_i[18]; |
| data_o[19] = (syndrome_o == 8'h99) ^ data_i[19]; |
| data_o[20] = (syndrome_o == 8'h9a) ^ data_i[20]; |
| data_o[21] = (syndrome_o == 8'h9b) ^ data_i[21]; |
| data_o[22] = (syndrome_o == 8'h9c) ^ data_i[22]; |
| data_o[23] = (syndrome_o == 8'h9d) ^ data_i[23]; |
| data_o[24] = (syndrome_o == 8'h9e) ^ data_i[24]; |
| data_o[25] = (syndrome_o == 8'h9f) ^ data_i[25]; |
| data_o[26] = (syndrome_o == 8'ha1) ^ data_i[26]; |
| data_o[27] = (syndrome_o == 8'ha2) ^ data_i[27]; |
| data_o[28] = (syndrome_o == 8'ha3) ^ data_i[28]; |
| data_o[29] = (syndrome_o == 8'ha4) ^ data_i[29]; |
| data_o[30] = (syndrome_o == 8'ha5) ^ data_i[30]; |
| data_o[31] = (syndrome_o == 8'ha6) ^ data_i[31]; |
| data_o[32] = (syndrome_o == 8'ha7) ^ data_i[32]; |
| data_o[33] = (syndrome_o == 8'ha8) ^ data_i[33]; |
| data_o[34] = (syndrome_o == 8'ha9) ^ data_i[34]; |
| data_o[35] = (syndrome_o == 8'haa) ^ data_i[35]; |
| data_o[36] = (syndrome_o == 8'hab) ^ data_i[36]; |
| data_o[37] = (syndrome_o == 8'hac) ^ data_i[37]; |
| data_o[38] = (syndrome_o == 8'had) ^ data_i[38]; |
| data_o[39] = (syndrome_o == 8'hae) ^ data_i[39]; |
| data_o[40] = (syndrome_o == 8'haf) ^ data_i[40]; |
| data_o[41] = (syndrome_o == 8'hb0) ^ data_i[41]; |
| data_o[42] = (syndrome_o == 8'hb1) ^ data_i[42]; |
| data_o[43] = (syndrome_o == 8'hb2) ^ data_i[43]; |
| data_o[44] = (syndrome_o == 8'hb3) ^ data_i[44]; |
| data_o[45] = (syndrome_o == 8'hb4) ^ data_i[45]; |
| data_o[46] = (syndrome_o == 8'hb5) ^ data_i[46]; |
| data_o[47] = (syndrome_o == 8'hb6) ^ data_i[47]; |
| data_o[48] = (syndrome_o == 8'hb7) ^ data_i[48]; |
| data_o[49] = (syndrome_o == 8'hb8) ^ data_i[49]; |
| data_o[50] = (syndrome_o == 8'hb9) ^ data_i[50]; |
| data_o[51] = (syndrome_o == 8'hba) ^ data_i[51]; |
| data_o[52] = (syndrome_o == 8'hbb) ^ data_i[52]; |
| data_o[53] = (syndrome_o == 8'hbc) ^ data_i[53]; |
| data_o[54] = (syndrome_o == 8'hbd) ^ data_i[54]; |
| data_o[55] = (syndrome_o == 8'hbe) ^ data_i[55]; |
| data_o[56] = (syndrome_o == 8'hbf) ^ data_i[56]; |
| data_o[57] = (syndrome_o == 8'hc1) ^ data_i[57]; |
| data_o[58] = (syndrome_o == 8'hc2) ^ data_i[58]; |
| data_o[59] = (syndrome_o == 8'hc3) ^ data_i[59]; |
| data_o[60] = (syndrome_o == 8'hc4) ^ data_i[60]; |
| data_o[61] = (syndrome_o == 8'hc5) ^ data_i[61]; |
| data_o[62] = (syndrome_o == 8'hc6) ^ data_i[62]; |
| data_o[63] = (syndrome_o == 8'hc7) ^ data_i[63]; |
| data_o[64] = (syndrome_o == 8'hc8) ^ data_i[64]; |
| data_o[65] = (syndrome_o == 8'hc9) ^ data_i[65]; |
| data_o[66] = (syndrome_o == 8'hca) ^ data_i[66]; |
| data_o[67] = (syndrome_o == 8'hcb) ^ data_i[67]; |
| |
| // err_o calc. bit0: single error, bit1: double error |
| err_o[0] = syndrome_o[7]; |
| err_o[1] = |syndrome_o[6:0] & ~syndrome_o[7]; |
| end |
| endmodule : prim_secded_hamming_76_68_dec |