Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: axis_ecc_gen.v | |
4 | // Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved | |
5 | // 4150 Network Circle, Santa Clara, California 95054, U.S.A. | |
6 | // | |
7 | // * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
8 | // | |
9 | // This program is free software; you can redistribute it and/or modify | |
10 | // it under the terms of the GNU General Public License as published by | |
11 | // the Free Software Foundation; version 2 of the License. | |
12 | // | |
13 | // This program is distributed in the hope that it will be useful, | |
14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | // GNU General Public License for more details. | |
17 | // | |
18 | // You should have received a copy of the GNU General Public License | |
19 | // along with this program; if not, write to the Free Software | |
20 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 | // | |
22 | // For the avoidance of doubt, and except that if any non-GPL license | |
23 | // choice is available it will apply instead, Sun elects to use only | |
24 | // the General Public License version 2 (GPLv2) at this time for any | |
25 | // software where a choice of GPL license versions is made | |
26 | // available with the language indicating that GPLv2 or any later version | |
27 | // may be used, or where a choice of which version of the GPL is applied is | |
28 | // otherwise unspecified. | |
29 | // | |
30 | // Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, | |
31 | // CA 95054 USA or visit www.sun.com if you need additional information or | |
32 | // have any questions. | |
33 | // | |
34 | // ========== Copyright Header End ============================================ | |
35 | module dram_ecc_gen (/*AUTOARG*/ | |
36 | // Inputs | |
37 | data, | |
38 | // Outputs | |
39 | result, | |
40 | ecc | |
41 | ); | |
42 | ||
43 | // Input Declarations | |
44 | input [127:0] data; | |
45 | ||
46 | // Output Declarations | |
47 | output [111:0] result; | |
48 | output [15:0] ecc; | |
49 | ||
50 | // Wire Declarations | |
51 | ||
52 | wire [3:0] w0; | |
53 | wire [3:0] w1; | |
54 | wire [3:0] w2; | |
55 | wire [3:0] w3; | |
56 | wire [3:0] w4; | |
57 | wire [3:0] w5; | |
58 | wire [3:0] w6; | |
59 | wire [3:0] w7; | |
60 | wire [3:0] w8; | |
61 | wire [3:0] w9; | |
62 | wire [3:0] w10; | |
63 | wire [3:0] w11; | |
64 | wire [3:0] w12; | |
65 | wire [3:0] w13; | |
66 | wire [3:0] w14; | |
67 | wire [3:0] w15; | |
68 | wire [3:0] w16; | |
69 | wire [3:0] w17; | |
70 | wire [3:0] w18; | |
71 | wire [3:0] w19; | |
72 | wire [3:0] w20; | |
73 | wire [3:0] w21; | |
74 | wire [3:0] w22; | |
75 | wire [3:0] w23; | |
76 | wire [3:0] w24; | |
77 | wire [3:0] w25; | |
78 | wire [3:0] w26; | |
79 | wire [3:0] w27; | |
80 | wire [3:0] w28; | |
81 | wire [3:0] w29; | |
82 | wire [3:0] w30; | |
83 | wire [3:0] w31; | |
84 | ||
85 | //wire [3:0] pw0; | |
86 | wire [3:0] pw1; | |
87 | wire [3:0] pw2; | |
88 | wire [3:0] pw3; | |
89 | wire [3:0] pw4; | |
90 | wire [3:0] pw5; | |
91 | wire [3:0] pw6; | |
92 | wire [3:0] pw7; | |
93 | wire [3:0] pw8; | |
94 | wire [3:0] pw9; | |
95 | wire [3:0] pw10; | |
96 | wire [3:0] pw11; | |
97 | wire [3:0] pw12; | |
98 | wire [3:0] pw13; | |
99 | wire [3:0] pw14; | |
100 | //wire [3:0] pw15; | |
101 | wire [3:0] pw16; | |
102 | wire [3:0] pw17; | |
103 | wire [3:0] pw18; | |
104 | wire [3:0] pw19; | |
105 | wire [3:0] pw20; | |
106 | wire [3:0] pw21; | |
107 | wire [3:0] pw22; | |
108 | wire [3:0] pw23; | |
109 | wire [3:0] pw24; | |
110 | wire [3:0] pw25; | |
111 | wire [3:0] pw26; | |
112 | wire [3:0] pw27; | |
113 | wire [3:0] pw28; | |
114 | wire [3:0] pw29; | |
115 | //wire [3:0] pw30; | |
116 | //wire [3:0] pw31; | |
117 | ||
118 | wire [3:0] pw_1; | |
119 | wire [3:0] pw_2; | |
120 | wire [3:0] pw_3; | |
121 | wire [3:0] pw_4; | |
122 | wire [3:0] pw_5; | |
123 | wire [3:0] pw_6; | |
124 | wire [3:0] pw_7; | |
125 | wire [3:0] pw_8; | |
126 | wire [3:0] pw_9; | |
127 | wire [3:0] pw_10; | |
128 | wire [3:0] pw_11; | |
129 | wire [3:0] pw_12; | |
130 | wire [3:0] pw_13; | |
131 | wire [3:0] pw_14; | |
132 | wire [3:0] pw_16; | |
133 | wire [3:0] pw_17; | |
134 | wire [3:0] pw_18; | |
135 | wire [3:0] pw_19; | |
136 | wire [3:0] pw_20; | |
137 | wire [3:0] pw_21; | |
138 | wire [3:0] pw_22; | |
139 | wire [3:0] pw_23; | |
140 | wire [3:0] pw_24; | |
141 | wire [3:0] pw_25; | |
142 | wire [3:0] pw_26; | |
143 | wire [3:0] pw_27; | |
144 | wire [3:0] pw_28; | |
145 | wire [3:0] pw_29; | |
146 | ||
147 | /////////////////////////////// | |
148 | ////// Code Begins Here /////// | |
149 | /////////////////////////////// | |
150 | ||
151 | assign w0[3:0] = data[3:0]; | |
152 | assign w1[3:0] = data[7:4]; | |
153 | assign w2[3:0] = data[11:8]; | |
154 | assign w3[3:0] = data[15:12]; | |
155 | assign w4[3:0] = data[19:16]; | |
156 | assign w5[3:0] = data[23:20]; | |
157 | assign w6[3:0] = data[27:24]; | |
158 | assign w7[3:0] = data[31:28]; | |
159 | assign w8[3:0] = data[35:32]; | |
160 | assign w9[3:0] = data[39:36]; | |
161 | assign w10[3:0] = data[43:40]; | |
162 | assign w11[3:0] = data[47:44]; | |
163 | assign w12[3:0] = data[51:48]; | |
164 | assign w13[3:0] = data[55:52]; | |
165 | assign w14[3:0] = data[59:56]; | |
166 | assign w15[3:0] = data[63:60]; | |
167 | assign w16[3:0] = data[67:64]; | |
168 | assign w17[3:0] = data[71:68]; | |
169 | assign w18[3:0] = data[75:72]; | |
170 | assign w19[3:0] = data[79:76]; | |
171 | assign w20[3:0] = data[83:80]; | |
172 | assign w21[3:0] = data[87:84]; | |
173 | assign w22[3:0] = data[91:88]; | |
174 | assign w23[3:0] = data[95:92]; | |
175 | assign w24[3:0] = data[99:96]; | |
176 | assign w25[3:0] = data[103:100]; | |
177 | assign w26[3:0] = data[107:104]; | |
178 | assign w27[3:0] = data[111:108]; | |
179 | assign w28[3:0] = data[115:112]; | |
180 | assign w29[3:0] = data[119:116]; | |
181 | assign w30[3:0] = data[123:120]; | |
182 | assign w31[3:0] = data[127:124]; | |
183 | ||
184 | ///////////////////////////// | |
185 | /// Galois Multiplication by 4 | |
186 | ///////////////////////////// | |
187 | ||
188 | // 2*w1 | |
189 | ||
190 | assign pw1[0] = w1[3]; | |
191 | assign pw1[1] = w1[0] ^ w1[3]; | |
192 | assign pw1[2] = w1[1]; | |
193 | assign pw1[3] = w1[2]; | |
194 | ||
195 | // 3*w2 | |
196 | ||
197 | assign pw2[0] = w2[0] ^ w2[3]; | |
198 | assign pw2[1] = w2[0] ^ w2[3] ^ w2[1]; | |
199 | assign pw2[2] = w2[1] ^ w2[2]; | |
200 | assign pw2[3] = w2[2] ^ w2[3]; | |
201 | ||
202 | // 4*w3 | |
203 | ||
204 | assign pw3[0] = w3[2]; | |
205 | assign pw3[1] = w3[3] ^ w3[2]; | |
206 | assign pw3[2] = w3[0] ^ w3[3]; | |
207 | assign pw3[3] = w3[1]; | |
208 | ||
209 | // 5*w4 | |
210 | ||
211 | assign pw4[0] = w4[2] ^ w4[0]; | |
212 | assign pw4[1] = w4[3] ^ w4[2] ^ w4[1]; | |
213 | assign pw4[2] = w4[0] ^ w4[3] ^ w4[2]; | |
214 | assign pw4[3] = w4[1] ^ w4[3]; | |
215 | ||
216 | // 6*w5 | |
217 | ||
218 | assign pw5[0] = w5[2] ^ w5[3]; | |
219 | assign pw5[1] = w5[2] ^ w5[0]; | |
220 | assign pw5[2] = w5[0] ^ w5[3] ^ w5[1]; | |
221 | assign pw5[3] = w5[1] ^ w5[2]; | |
222 | ||
223 | // 7*w6 | |
224 | ||
225 | assign pw6[0] = w6[2] ^ w6[3] ^ w6[0]; | |
226 | assign pw6[1] = w6[2] ^ w6[0] ^ w6[1]; | |
227 | assign pw6[2] = w6[0] ^ w6[3] ^ w6[1] ^ w6[2]; | |
228 | assign pw6[3] = w6[1] ^ w6[2] ^ w6[3]; | |
229 | ||
230 | // 8*w7 | |
231 | ||
232 | assign pw7[0] = w7[1]; | |
233 | assign pw7[1] = w7[2] ^ w7[1]; | |
234 | assign pw7[2] = w7[3] ^ w7[2]; | |
235 | assign pw7[3] = w7[0] ^ w7[3]; | |
236 | ||
237 | // 9*w8 | |
238 | ||
239 | assign pw8[0] = w8[1] ^ w8[0]; | |
240 | assign pw8[1] = w8[2]; | |
241 | assign pw8[2] = w8[3]; | |
242 | assign pw8[3] = w8[0]; | |
243 | ||
244 | // a*w9 | |
245 | ||
246 | assign pw9[0] = w9[1] ^ w9[3]; | |
247 | assign pw9[1] = w9[2] ^ w9[1] ^ w9[0] ^ w9[3]; | |
248 | assign pw9[2] = w9[3] ^ w9[2] ^ w9[1]; | |
249 | assign pw9[3] = w9[0] ^ w9[3] ^ w9[2]; | |
250 | ||
251 | // b*w10 | |
252 | ||
253 | assign pw10[0] = w10[1] ^ w10[0] ^ w10[3]; | |
254 | assign pw10[1] = w10[2] ^ w10[0] ^ w10[3]; | |
255 | assign pw10[2] = w10[3] ^ w10[1]; | |
256 | assign pw10[3] = w10[0] ^ w10[2]; | |
257 | ||
258 | // c*w11 | |
259 | ||
260 | assign pw11[0] = w11[1] ^ w11[2]; | |
261 | assign pw11[1] = w11[3] ^ w11[1]; | |
262 | assign pw11[2] = w11[0] ^ w11[2]; | |
263 | assign pw11[3] = w11[0] ^ w11[3] ^ w11[1]; | |
264 | ||
265 | // d*w12 | |
266 | ||
267 | assign pw12[0] = w12[1] ^ w12[2] ^ w12[0]; | |
268 | assign pw12[1] = w12[3]; | |
269 | assign pw12[2] = w12[0]; | |
270 | assign pw12[3] = w12[0] ^ w12[1]; | |
271 | ||
272 | // e*w13 | |
273 | ||
274 | assign pw13[0] = w13[1] ^ w13[2] ^ w13[3]; | |
275 | assign pw13[1] = w13[1] ^ w13[0]; | |
276 | assign pw13[2] = w13[0] ^ w13[2] ^ w13[1]; | |
277 | assign pw13[3] = w13[0] ^ w13[3] ^ w13[1] ^ w13[2]; | |
278 | ||
279 | // f*w14 | |
280 | ||
281 | assign pw14[0] = w14[1] ^ w14[2] ^ w14[3] ^ w14[0]; | |
282 | assign pw14[1] = w14[0]; | |
283 | assign pw14[2] = w14[0] ^ w14[1]; | |
284 | assign pw14[3] = w14[0] ^ w14[1] ^ w14[2]; | |
285 | ||
286 | // 1*w15 | |
287 | ||
288 | //assign pw15[3:0] = w15[3:0]; | |
289 | ||
290 | // 2*w16 | |
291 | ||
292 | assign pw16[0] = w16[3]; | |
293 | assign pw16[1] = w16[0] ^ w16[3]; | |
294 | assign pw16[2] = w16[1]; | |
295 | assign pw16[3] = w16[2]; | |
296 | ||
297 | // 3*w17 | |
298 | ||
299 | assign pw17[0] = w17[0] ^ w17[3]; | |
300 | assign pw17[1] = w17[0] ^ w17[3] ^ w17[1]; | |
301 | assign pw17[2] = w17[1] ^ w17[2]; | |
302 | assign pw17[3] = w17[2] ^ w17[3]; | |
303 | ||
304 | // 4*w18 | |
305 | ||
306 | assign pw18[0] = w18[2]; | |
307 | assign pw18[1] = w18[3] ^ w18[2]; | |
308 | assign pw18[2] = w18[0] ^ w18[3]; | |
309 | assign pw18[3] = w18[1]; | |
310 | ||
311 | // 5*w19 | |
312 | ||
313 | assign pw19[0] = w19[2] ^ w19[0]; | |
314 | assign pw19[1] = w19[3] ^ w19[2] ^ w19[1]; | |
315 | assign pw19[2] = w19[0] ^ w19[3] ^ w19[2]; | |
316 | assign pw19[3] = w19[1] ^ w19[3]; | |
317 | ||
318 | // 6*w20 | |
319 | ||
320 | assign pw20[0] = w20[2] ^ w20[3]; | |
321 | assign pw20[1] = w20[2] ^ w20[0]; | |
322 | assign pw20[2] = w20[0] ^ w20[3] ^ w20[1]; | |
323 | assign pw20[3] = w20[1] ^ w20[2]; | |
324 | ||
325 | // 7*w21 | |
326 | ||
327 | assign pw21[0] = w21[2] ^ w21[3] ^ w21[0]; | |
328 | assign pw21[1] = w21[2] ^ w21[0] ^ w21[1]; | |
329 | assign pw21[2] = w21[0] ^ w21[3] ^ w21[1] ^ w21[2]; | |
330 | assign pw21[3] = w21[1] ^ w21[2] ^ w21[3]; | |
331 | ||
332 | // 8*w22 | |
333 | ||
334 | assign pw22[0] = w22[1]; | |
335 | assign pw22[1] = w22[2] ^ w22[1]; | |
336 | assign pw22[2] = w22[3] ^ w22[2]; | |
337 | assign pw22[3] = w22[0] ^ w22[3]; | |
338 | ||
339 | // 9*w23 | |
340 | ||
341 | assign pw23[0] = w23[1] ^ w23[0]; | |
342 | assign pw23[1] = w23[2]; | |
343 | assign pw23[2] = w23[3]; | |
344 | assign pw23[3] = w23[0]; | |
345 | ||
346 | // a*w24 | |
347 | ||
348 | assign pw24[0] = w24[1] ^ w24[3]; | |
349 | assign pw24[1] = w24[2] ^ w24[1] ^ w24[0] ^ w24[3]; | |
350 | assign pw24[2] = w24[3] ^ w24[2] ^ w24[1]; | |
351 | assign pw24[3] = w24[0] ^ w24[3] ^ w24[2]; | |
352 | ||
353 | // b*w25 | |
354 | ||
355 | assign pw25[0] = w25[1] ^ w25[0] ^ w25[3]; | |
356 | assign pw25[1] = w25[2] ^ w25[0] ^ w25[3]; | |
357 | assign pw25[2] = w25[3] ^ w25[1]; | |
358 | assign pw25[3] = w25[0] ^ w25[2]; | |
359 | ||
360 | // c*w26 | |
361 | ||
362 | assign pw26[0] = w26[1] ^ w26[2]; | |
363 | assign pw26[1] = w26[3] ^ w26[1]; | |
364 | assign pw26[2] = w26[0] ^ w26[2]; | |
365 | assign pw26[3] = w26[0] ^ w26[3] ^ w26[1]; | |
366 | ||
367 | // d*w27 | |
368 | ||
369 | assign pw27[0] = w27[1] ^ w27[2] ^ w27[0]; | |
370 | assign pw27[1] = w27[3]; | |
371 | assign pw27[2] = w27[0]; | |
372 | assign pw27[3] = w27[0] ^ w27[1]; | |
373 | ||
374 | // e*w28 | |
375 | ||
376 | assign pw28[0] = w28[1] ^ w28[2] ^ w28[3]; | |
377 | assign pw28[1] = w28[1] ^ w28[0]; | |
378 | assign pw28[2] = w28[0] ^ w28[2] ^ w28[1]; | |
379 | assign pw28[3] = w28[0] ^ w28[3] ^ w28[1] ^ w28[2]; | |
380 | ||
381 | // f*w29 | |
382 | ||
383 | assign pw29[0] = w29[1] ^ w29[2] ^ w29[3] ^ w29[0]; | |
384 | assign pw29[1] = w29[0]; | |
385 | assign pw29[2] = w29[0] ^ w29[1]; | |
386 | assign pw29[3] = w29[0] ^ w29[1] ^ w29[2]; | |
387 | ||
388 | // 1*w30 | |
389 | ||
390 | //assign pw30[3:0] = w30[3:0]; | |
391 | ||
392 | // 1*w31 | |
393 | ||
394 | //assign pw31[3:0] = w31[3:0]; | |
395 | ||
396 | ////////////// | |
397 | // Parity 4 calculations | |
398 | ////////////// | |
399 | ||
400 | // 2*w8 | |
401 | ||
402 | assign pw_8[0] = w8[3]; | |
403 | assign pw_8[1] = w8[0] ^ w8[3]; | |
404 | assign pw_8[2] = w8[1]; | |
405 | assign pw_8[3] = w8[2]; | |
406 | ||
407 | // 3*w13 | |
408 | ||
409 | assign pw_13[0] = w13[0] ^ w13[3]; | |
410 | assign pw_13[1] = w13[0] ^ w13[3] ^ w13[1]; | |
411 | assign pw_13[2] = w13[1] ^ w13[2]; | |
412 | assign pw_13[3] = w13[2] ^ w13[3]; | |
413 | ||
414 | // 4*w12 | |
415 | ||
416 | assign pw_12[0] = w12[2]; | |
417 | assign pw_12[1] = w12[3] ^ w12[2]; | |
418 | assign pw_12[2] = w12[0] ^ w12[3]; | |
419 | assign pw_12[3] = w12[1]; | |
420 | ||
421 | // 5*w10 | |
422 | ||
423 | assign pw_10[0] = w10[2] ^ w10[0]; | |
424 | assign pw_10[1] = w10[3] ^ w10[2] ^ w10[1]; | |
425 | assign pw_10[2] = w10[0] ^ w10[3] ^ w10[2]; | |
426 | assign pw_10[3] = w10[1] ^ w10[3]; | |
427 | ||
428 | // 6*w6 | |
429 | ||
430 | assign pw_6[0] = w6[2] ^ w6[3]; | |
431 | assign pw_6[1] = w6[2] ^ w6[0]; | |
432 | assign pw_6[2] = w6[0] ^ w6[3] ^ w6[1]; | |
433 | assign pw_6[3] = w6[1] ^ w6[2]; | |
434 | ||
435 | // 7*w5 | |
436 | ||
437 | assign pw_5[0] = w5[2] ^ w5[3] ^ w5[0]; | |
438 | assign pw_5[1] = w5[2] ^ w5[0] ^ w5[1]; | |
439 | assign pw_5[2] = w5[0] ^ w5[3] ^ w5[1] ^ w5[2]; | |
440 | assign pw_5[3] = w5[1] ^ w5[2] ^ w5[3]; | |
441 | ||
442 | // 8*w14 | |
443 | ||
444 | assign pw_14[0] = w14[1]; | |
445 | assign pw_14[1] = w14[2] ^ w14[1]; | |
446 | assign pw_14[2] = w14[3] ^ w14[2]; | |
447 | assign pw_14[3] = w14[0] ^ w14[3]; | |
448 | ||
449 | // 9*w1 | |
450 | ||
451 | assign pw_1[0] = w1[1] ^ w1[0]; | |
452 | assign pw_1[1] = w1[2]; | |
453 | assign pw_1[2] = w1[3]; | |
454 | assign pw_1[3] = w1[0]; | |
455 | ||
456 | // a*w11 | |
457 | ||
458 | assign pw_11[0] = w11[1] ^ w11[3]; | |
459 | assign pw_11[1] = w11[2] ^ w11[1] ^ w11[0] ^ w11[3]; | |
460 | assign pw_11[2] = w11[3] ^ w11[2] ^ w11[1]; | |
461 | assign pw_11[3] = w11[0] ^ w11[3] ^ w11[2]; | |
462 | ||
463 | // b*w4 | |
464 | ||
465 | assign pw_4[0] = w4[1] ^ w4[0] ^ w4[3]; | |
466 | assign pw_4[1] = w4[2] ^ w4[0] ^ w4[3]; | |
467 | assign pw_4[2] = w4[3] ^ w4[1]; | |
468 | assign pw_4[3] = w4[0] ^ w4[2]; | |
469 | ||
470 | // c*w9 | |
471 | ||
472 | assign pw_9[0] = w9[1] ^ w9[2]; | |
473 | assign pw_9[1] = w9[3] ^ w9[1]; | |
474 | assign pw_9[2] = w9[0] ^ w9[2]; | |
475 | assign pw_9[3] = w9[0] ^ w9[3] ^ w9[1]; | |
476 | ||
477 | // d*w3 | |
478 | ||
479 | assign pw_3[0] = w3[1] ^ w3[2] ^ w3[0]; | |
480 | assign pw_3[1] = w3[3]; | |
481 | assign pw_3[2] = w3[0]; | |
482 | assign pw_3[3] = w3[0] ^ w3[1]; | |
483 | ||
484 | // e*w2 | |
485 | ||
486 | assign pw_2[0] = w2[1] ^ w2[2] ^ w2[3]; | |
487 | assign pw_2[1] = w2[1] ^ w2[0]; | |
488 | assign pw_2[2] = w2[0] ^ w2[2] ^ w2[1]; | |
489 | assign pw_2[3] = w2[0] ^ w2[3] ^ w2[1] ^ w2[2]; | |
490 | ||
491 | // f*w7 | |
492 | ||
493 | assign pw_7[0] = w7[1] ^ w7[2] ^ w7[3] ^ w7[0]; | |
494 | assign pw_7[1] = w7[0]; | |
495 | assign pw_7[2] = w7[0] ^ w7[1]; | |
496 | assign pw_7[3] = w7[0] ^ w7[1] ^ w7[2]; | |
497 | ||
498 | // 2*w23 | |
499 | ||
500 | assign pw_23[0] = w23[3]; | |
501 | assign pw_23[1] = w23[0] ^ w23[3]; | |
502 | assign pw_23[2] = w23[1]; | |
503 | assign pw_23[3] = w23[2]; | |
504 | ||
505 | // 3*w28 | |
506 | ||
507 | assign pw_28[0] = w28[0] ^ w28[3]; | |
508 | assign pw_28[1] = w28[0] ^ w28[3] ^ w28[1]; | |
509 | assign pw_28[2] = w28[1] ^ w28[2]; | |
510 | assign pw_28[3] = w28[2] ^ w28[3]; | |
511 | ||
512 | // 4*w27 | |
513 | ||
514 | assign pw_27[0] = w27[2]; | |
515 | assign pw_27[1] = w27[3] ^ w27[2]; | |
516 | assign pw_27[2] = w27[0] ^ w27[3]; | |
517 | assign pw_27[3] = w27[1]; | |
518 | ||
519 | // 5*w25 | |
520 | ||
521 | assign pw_25[0] = w25[2] ^ w25[0]; | |
522 | assign pw_25[1] = w25[3] ^ w25[2] ^ w25[1]; | |
523 | assign pw_25[2] = w25[0] ^ w25[3] ^ w25[2]; | |
524 | assign pw_25[3] = w25[1] ^ w25[3]; | |
525 | ||
526 | // 6*w21 | |
527 | ||
528 | assign pw_21[0] = w21[2] ^ w21[3]; | |
529 | assign pw_21[1] = w21[2] ^ w21[0]; | |
530 | assign pw_21[2] = w21[0] ^ w21[3] ^ w21[1]; | |
531 | assign pw_21[3] = w21[1] ^ w21[2]; | |
532 | ||
533 | // 7*w20 | |
534 | ||
535 | assign pw_20[0] = w20[2] ^ w20[3] ^ w20[0]; | |
536 | assign pw_20[1] = w20[2] ^ w20[0] ^ w20[1]; | |
537 | assign pw_20[2] = w20[0] ^ w20[3] ^ w20[1] ^ w20[2]; | |
538 | assign pw_20[3] = w20[1] ^ w20[2] ^ w20[3]; | |
539 | ||
540 | // 8*w29 | |
541 | ||
542 | assign pw_29[0] = w29[1]; | |
543 | assign pw_29[1] = w29[2] ^ w29[1]; | |
544 | assign pw_29[2] = w29[3] ^ w29[2]; | |
545 | assign pw_29[3] = w29[0] ^ w29[3]; | |
546 | ||
547 | // 9*w16 | |
548 | ||
549 | assign pw_16[0] = w16[1] ^ w16[0]; | |
550 | assign pw_16[1] = w16[2]; | |
551 | assign pw_16[2] = w16[3]; | |
552 | assign pw_16[3] = w16[0]; | |
553 | ||
554 | // a*w26 | |
555 | ||
556 | assign pw_26[0] = w26[1] ^ w26[3]; | |
557 | assign pw_26[1] = w26[2] ^ w26[1] ^ w26[0] ^ w26[3]; | |
558 | assign pw_26[2] = w26[3] ^ w26[2] ^ w26[1]; | |
559 | assign pw_26[3] = w26[0] ^ w26[3] ^ w26[2]; | |
560 | ||
561 | // b*w19 | |
562 | ||
563 | assign pw_19[0] = w19[1] ^ w19[0] ^ w19[3]; | |
564 | assign pw_19[1] = w19[2] ^ w19[0] ^ w19[3]; | |
565 | assign pw_19[2] = w19[3] ^ w19[1]; | |
566 | assign pw_19[3] = w19[0] ^ w19[2]; | |
567 | ||
568 | // c*w24 | |
569 | ||
570 | assign pw_24[0] = w24[1] ^ w24[2]; | |
571 | assign pw_24[1] = w24[3] ^ w24[1]; | |
572 | assign pw_24[2] = w24[0] ^ w24[2]; | |
573 | assign pw_24[3] = w24[0] ^ w24[3] ^ w24[1]; | |
574 | ||
575 | // d*w18 | |
576 | ||
577 | assign pw_18[0] = w18[1] ^ w18[2] ^ w18[0]; | |
578 | assign pw_18[1] = w18[3]; | |
579 | assign pw_18[2] = w18[0]; | |
580 | assign pw_18[3] = w18[0] ^ w18[1]; | |
581 | ||
582 | // e*w17 | |
583 | ||
584 | assign pw_17[0] = w17[1] ^ w17[2] ^ w17[3]; | |
585 | assign pw_17[1] = w17[1] ^ w17[0]; | |
586 | assign pw_17[2] = w17[0] ^ w17[2] ^ w17[1]; | |
587 | assign pw_17[3] = w17[0] ^ w17[3] ^ w17[1] ^ w17[2]; | |
588 | ||
589 | // f*w22 | |
590 | ||
591 | assign pw_22[0] = w22[1] ^ w22[2] ^ w22[3] ^ w22[0]; | |
592 | assign pw_22[1] = w22[0]; | |
593 | assign pw_22[2] = w22[0] ^ w22[1]; | |
594 | assign pw_22[3] = w22[0] ^ w22[1] ^ w22[2]; | |
595 | ||
596 | ///////////////////////////////////////////////////////////////////////// | |
597 | // Final ECC Calculation | |
598 | // ECC generation logic for the incomming data | |
599 | ///////////////////////////////////////////////////////////////////////// | |
600 | ||
601 | wire [3:0] partialsum; | |
602 | wire [3:0] p3_partialsum; | |
603 | wire [3:0] syndrom0; | |
604 | wire [3:0] syndrom1; | |
605 | wire [3:0] syndrom2; | |
606 | wire [3:0] syndrom3; | |
607 | ||
608 | // partial sum | |
609 | assign partialsum[3:0] = pw1 ^ pw2 ^ pw3 ^ pw4 ^ pw5 ^ pw6 ^ pw7 ^ pw8 ^ pw9 ^ pw10 ^ | |
610 | pw11 ^ pw12 ^ pw13 ^ pw14 ^ pw16 ^ pw17 ^ pw18 ^ pw19 ^ pw20 ^ | |
611 | pw21 ^ pw22 ^ pw23 ^ pw24 ^ pw25 ^ pw26 ^ pw27 ^ pw28 ^ pw29; | |
612 | ||
613 | assign p3_partialsum = pw_1 ^ pw_2 ^ pw_3 ^ pw_4 ^ pw_5 ^ pw_6 ^ pw_7 ^ pw_8 ^ | |
614 | pw_9 ^ pw_10 ^ pw_11 ^ pw_12 ^ pw_13 ^ pw_14 ^ | |
615 | pw_16 ^ pw_17 ^ pw_18 ^ pw_19 ^ pw_20 ^ pw_21 ^ pw_22 ^ pw_23 ^ | |
616 | pw_24 ^ pw_25 ^ pw_26 ^ pw_27 ^ pw_28 ^ pw_29; | |
617 | ||
618 | assign syndrom0[3:0] = w0 ^ w15 ^ w31 ^ partialsum; | |
619 | ||
620 | assign syndrom1[3:0] = w0 ^ w1 ^ w2 ^ w3 ^ w4 ^ w5 ^ w6 ^ w7 ^ w8 ^ w9 ^ w10 ^ | |
621 | w11 ^ w12 ^ w13 ^ w14 ^ w30 ^ w31; | |
622 | ||
623 | assign syndrom2[3:0] = w15 ^ w16 ^ w17 ^ w18 ^ w19 ^ w20 ^ w21 ^ w22 ^ w23 ^ w24 ^ w25 ^ | |
624 | w26 ^ w27 ^ w28 ^ w29 ^ w30 ^ w31; | |
625 | ||
626 | assign syndrom3[3:0] = w0 ^ w15 ^ w30 ^ p3_partialsum; | |
627 | ||
628 | assign ecc = {syndrom0, syndrom1, syndrom2, syndrom3}; | |
629 | assign result = { pw29, pw28, pw27, pw26, pw25, pw24, pw23, pw22, pw21, pw20, pw19, pw18, pw17, pw16, | |
630 | pw14, pw13, pw12, pw11, pw10, pw9, pw8, pw7, pw6, pw5, pw4, pw3, pw2, pw1}; | |
631 | ||
632 | endmodule |