OpenCores
URL https://opencores.org/ocsvn/nysa_sata/nysa_sata/trunk

Subversion Repositories nysa_sata

[/] [nysa_sata/] [trunk/] [rtl/] [link/] [crc.v] - Blame information for rev 4

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 cospan
// Copyright (C) 2012
2
// Ashwin A. Mendon
3
//
4
// This file is part of SATA2 core.
5
//
6
// This program is free software; you can redistribute it and/or modify
7
// it under the terms of the GNU General Public License as published by
8
// the Free Software Foundation; either version 3 of the License, or
9
// (at your option) any later version.
10
//
11
// This program is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
// GNU General Public License for more details.
15
//
16
// You should have received a copy of the GNU General Public License
17
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
 
19
////////////////////////////////////////////////////////////////////////////////////////
20
// ENTITY: crc
21
// Version: 1.0
22
// Author:  Ashwin Mendon
23
// Description: This sub/module implements the CRC Circuit for the SATA Protocol
24
//              The code takes 32/bit data word inputs and calculates the CRC for the stream
25
//              The generator polynomial used is
26
//                      32  26  23  22  16  12  11  10  8   7   5   4   2
27
//              G(x) = x + x + x + x + x + x + x + x + x + x + x + x + x + x + 1
28
//              The CRC value is initialized to 0x52325032 as defined in the Serial ATA
29
//              specification
30
// PORTS:
31
/////////////////////////////////////////////////////////////////////////////////////////
32
 
33
 
34
module crc (
35
  clk,
36
  rst,
37
  en,
38
  din,
39
  dout
40
);
41
 
42
input               clk;
43
input               rst;
44
input               en;
45
input   [31:0]      din;
46
output  reg [31:0]  dout;
47
 
48
 
49
parameter         CRC_INIT  = 32'h52325032;
50
//Registers/Wires
51
wire    [31:0]    crc_next;
52
wire    [31:0]    crc_new;
53
 
54
 
55
always @ (posedge clk) begin
56
  if (rst) begin
57
    dout           <=  CRC_INIT;
58
  end
59
  else if (en) begin
60
    dout           <=  crc_next;
61
  end
62
end
63
 
64
assign crc_new    = dout ^ din;
65
 
66
assign crc_next[31] =crc_new[31]   ^
67
                     crc_new[30]   ^
68
                     crc_new[29]   ^
69
                     crc_new[28]   ^
70
                     crc_new[27]   ^
71
                     crc_new[25]   ^
72
                     crc_new[24]   ^
73
                     crc_new[23]   ^
74
                     crc_new[15]   ^
75
                     crc_new[11]   ^
76
                     crc_new[9]    ^
77
                     crc_new[8]    ^
78
                     crc_new[5];
79
 
80
 
81
 
82
assign crc_next[30] =crc_new[30]   ^
83
                     crc_new[29]   ^
84
                     crc_new[28]   ^
85
                     crc_new[27]   ^
86
                     crc_new[26]   ^
87
                     crc_new[24]   ^
88
                     crc_new[23]   ^
89
                     crc_new[22]   ^
90
                     crc_new[14]   ^
91
                     crc_new[10]   ^
92
                     crc_new[8]    ^
93
                     crc_new[7]    ^
94
                     crc_new[4];
95
 
96
assign crc_next[29] =crc_new[31]   ^
97
                     crc_new[29]   ^
98
                     crc_new[28]   ^
99
                     crc_new[27]   ^
100
                     crc_new[26]   ^
101
                     crc_new[25]   ^
102
                     crc_new[23]   ^
103
                     crc_new[22]   ^
104
                     crc_new[21]   ^
105
                     crc_new[13]   ^
106
                     crc_new[9]    ^
107
                     crc_new[7]    ^
108
                     crc_new[6]    ^
109
                     crc_new[3];
110
 
111
assign crc_next[28] =crc_new[30]   ^
112
                     crc_new[28]   ^
113
                     crc_new[27]   ^
114
                     crc_new[26]   ^
115
                     crc_new[25]   ^
116
                     crc_new[24]   ^
117
                     crc_new[22]   ^
118
                     crc_new[21]   ^
119
                     crc_new[20]   ^
120
                     crc_new[12]   ^
121
                     crc_new[8]    ^
122
                     crc_new[6]    ^
123
                     crc_new[5]    ^
124
                     crc_new[2];
125
 
126
assign crc_next[27] =crc_new[29]   ^
127
                     crc_new[27]   ^
128
                     crc_new[26]   ^
129
                     crc_new[25]   ^
130
                     crc_new[24]   ^
131
                     crc_new[23]   ^
132
                     crc_new[21]   ^
133
                     crc_new[20]   ^
134
                     crc_new[19]   ^
135
                     crc_new[11]   ^
136
                     crc_new[7]    ^
137
                     crc_new[5]    ^
138
                     crc_new[4]    ^
139
                     crc_new[1];
140
 
141
assign crc_next[26] =crc_new[31]   ^
142
                     crc_new[28]   ^
143
                     crc_new[26]   ^
144
                     crc_new[25]   ^
145
                     crc_new[24]   ^
146
                     crc_new[23]   ^
147
                     crc_new[22]   ^
148
                     crc_new[20]   ^
149
                     crc_new[19]   ^
150
                     crc_new[18]   ^
151
                     crc_new[10]   ^
152
                     crc_new[6]    ^
153
                     crc_new[4]    ^
154
                     crc_new[3]    ^
155
                     crc_new[0];
156
 
157
assign crc_next[25] =crc_new[31]   ^
158
                     crc_new[29]   ^
159
                     crc_new[28]   ^
160
                     crc_new[22]   ^
161
                     crc_new[21]   ^
162
                     crc_new[19]   ^
163
                     crc_new[18]   ^
164
                     crc_new[17]   ^
165
                     crc_new[15]   ^
166
                     crc_new[11]   ^
167
                     crc_new[8]    ^
168
                     crc_new[3]    ^
169
                     crc_new[2];
170
 
171
assign crc_next[24] =crc_new[30]   ^
172
                     crc_new[28]   ^
173
                     crc_new[27]   ^
174
                     crc_new[21]   ^
175
                     crc_new[20]   ^
176
                     crc_new[18]   ^
177
                     crc_new[17]   ^
178
                     crc_new[16]   ^
179
                     crc_new[14]   ^
180
                     crc_new[10]   ^
181
                     crc_new[7]    ^
182
                     crc_new[2]    ^
183
                     crc_new[1];
184
 
185
assign crc_next[23] =crc_new[31]   ^
186
                     crc_new[29]   ^
187
                     crc_new[27]   ^
188
                     crc_new[26]   ^
189
                     crc_new[20]   ^
190
                     crc_new[19]   ^
191
                     crc_new[17]   ^
192
                     crc_new[16]   ^
193
                     crc_new[15]   ^
194
                     crc_new[13]   ^
195
                     crc_new[9]    ^
196
                     crc_new[6]    ^
197
                     crc_new[1]    ^
198
                     crc_new[0];
199
 
200
assign crc_next[22] =crc_new[31]   ^
201
                     crc_new[29]   ^
202
                     crc_new[27]   ^
203
                     crc_new[26]   ^
204
                     crc_new[24]   ^
205
                     crc_new[23]   ^
206
                     crc_new[19]   ^
207
                     crc_new[18]   ^
208
                     crc_new[16]   ^
209
                     crc_new[14]   ^
210
                     crc_new[12]   ^
211
                     crc_new[11]   ^
212
                     crc_new[9]    ^
213
                     crc_new[0];
214
 
215
assign crc_next[21] =crc_new[31]   ^
216
                     crc_new[29]   ^
217
                     crc_new[27]   ^
218
                     crc_new[26]   ^
219
                     crc_new[24]   ^
220
                     crc_new[22]   ^
221
                     crc_new[18]   ^
222
                     crc_new[17]   ^
223
                     crc_new[13]   ^
224
                     crc_new[10]   ^
225
                     crc_new[9]    ^
226
                     crc_new[5];
227
 
228
assign crc_next[20] =crc_new[30]   ^
229
                     crc_new[28]   ^
230
                     crc_new[26]   ^
231
                     crc_new[25]   ^
232
                     crc_new[23]   ^
233
                     crc_new[21]   ^
234
                     crc_new[17]   ^
235
                     crc_new[16]   ^
236
                     crc_new[12]   ^
237
                     crc_new[9]    ^
238
                     crc_new[8]    ^
239
                     crc_new[4];
240
 
241
assign crc_next[19] =crc_new[29]   ^
242
                     crc_new[27]   ^
243
                     crc_new[25]   ^
244
                     crc_new[24]   ^
245
                     crc_new[22]   ^
246
                     crc_new[20]   ^
247
                     crc_new[16]   ^
248
                     crc_new[15]   ^
249
                     crc_new[11]   ^
250
                     crc_new[8]    ^
251
                     crc_new[7]    ^
252
                     crc_new[3];
253
 
254
assign crc_next[18] =crc_new[31]   ^
255
                     crc_new[28]   ^
256
                     crc_new[26]   ^
257
                     crc_new[24]   ^
258
                     crc_new[23]   ^
259
                     crc_new[21]   ^
260
                     crc_new[19]   ^
261
                     crc_new[15]   ^
262
                     crc_new[14]   ^
263
                     crc_new[10]   ^
264
                     crc_new[7]    ^
265
                     crc_new[6]    ^
266
                     crc_new[2];
267
 
268
assign crc_next[17] =crc_new[31]   ^
269
                     crc_new[30]   ^
270
                     crc_new[27]   ^
271
                     crc_new[25]   ^
272
                     crc_new[23]   ^
273
                     crc_new[22]   ^
274
                     crc_new[20]   ^
275
                     crc_new[18]   ^
276
                     crc_new[14]   ^
277
                     crc_new[13]   ^
278
                     crc_new[9]    ^
279
                     crc_new[6]    ^
280
                     crc_new[5]    ^
281
                     crc_new[1];
282
 
283
assign crc_next[16] =crc_new[30]   ^
284
                     crc_new[29]   ^
285
                     crc_new[26]   ^
286
                     crc_new[24]   ^
287
                     crc_new[22]   ^
288
                     crc_new[21]   ^
289
                     crc_new[19]   ^
290
                     crc_new[17]   ^
291
                     crc_new[13]   ^
292
                     crc_new[12]   ^
293
                     crc_new[8]    ^
294
                     crc_new[5]    ^
295
                     crc_new[4]    ^
296
                     crc_new[0];
297
 
298
assign crc_next[15] =crc_new[30]   ^
299
                     crc_new[27]   ^
300
                     crc_new[24]   ^
301
                     crc_new[21]   ^
302
                     crc_new[20]   ^
303
                     crc_new[18]   ^
304
                     crc_new[16]   ^
305
                     crc_new[15]   ^
306
                     crc_new[12]   ^
307
                     crc_new[9]    ^
308
                     crc_new[8]    ^
309
                     crc_new[7]    ^
310
                     crc_new[5]    ^
311
                     crc_new[4]    ^
312
                     crc_new[3];
313
 
314
assign crc_next[14] =crc_new[29]   ^
315
                     crc_new[26]   ^
316
                     crc_new[23]   ^
317
                     crc_new[20]   ^
318
                     crc_new[19]   ^
319
                     crc_new[17]   ^
320
                     crc_new[15]   ^
321
                     crc_new[14]   ^
322
                     crc_new[11]   ^
323
                     crc_new[8]    ^
324
                     crc_new[7]    ^
325
                     crc_new[6]    ^
326
                     crc_new[4]    ^
327
                     crc_new[3]    ^
328
                     crc_new[2];
329
 
330
assign crc_next[13] =crc_new[31]   ^
331
                     crc_new[28]   ^
332
                     crc_new[25]   ^
333
                     crc_new[22]   ^
334
                     crc_new[19]   ^
335
                     crc_new[18]   ^
336
                     crc_new[16]   ^
337
                     crc_new[14]   ^
338
                     crc_new[13]   ^
339
                     crc_new[10]   ^
340
                     crc_new[7]    ^
341
                     crc_new[6]    ^
342
                     crc_new[5]    ^
343
                     crc_new[3]    ^
344
                     crc_new[2]    ^
345
                     crc_new[1];
346
 
347
assign crc_next[12] =crc_new[31]   ^
348
                     crc_new[30]   ^
349
                     crc_new[27]   ^
350
                     crc_new[24]   ^
351
                     crc_new[21]   ^
352
                     crc_new[18]   ^
353
                     crc_new[17]   ^
354
                     crc_new[15]   ^
355
                     crc_new[13]   ^
356
                     crc_new[12]   ^
357
                     crc_new[9]    ^
358
                     crc_new[6]    ^
359
                     crc_new[5]    ^
360
                     crc_new[4]    ^
361
                     crc_new[2]    ^
362
                     crc_new[1]    ^
363
                     crc_new[0];
364
 
365
assign crc_next[11] =crc_new[31]   ^
366
                     crc_new[28]   ^
367
                     crc_new[27]   ^
368
                     crc_new[26]   ^
369
                     crc_new[25]   ^
370
                     crc_new[24]   ^
371
                     crc_new[20]   ^
372
                     crc_new[17]   ^
373
                     crc_new[16]   ^
374
                     crc_new[15]   ^
375
                     crc_new[14]   ^
376
                     crc_new[12]   ^
377
                     crc_new[9]    ^
378
                     crc_new[4]    ^
379
                     crc_new[3]    ^
380
                     crc_new[1]    ^
381
                     crc_new[0];
382
 
383
assign crc_next[10] =crc_new[31]   ^
384
                     crc_new[29]   ^
385
                     crc_new[28]   ^
386
                     crc_new[26]   ^
387
                     crc_new[19]   ^
388
                     crc_new[16]   ^
389
                     crc_new[14]   ^
390
                     crc_new[13]   ^
391
                     crc_new[9]    ^
392
                     crc_new[5]    ^
393
                     crc_new[3]    ^
394
                     crc_new[2]    ^
395
                     crc_new[0];
396
 
397
assign crc_next[9] = crc_new[29]   ^
398
                     crc_new[24]   ^
399
                     crc_new[23]   ^
400
                     crc_new[18]   ^
401
                     crc_new[13]   ^
402
                     crc_new[12]   ^
403
                     crc_new[11]   ^
404
                     crc_new[9]    ^
405
                     crc_new[5]    ^
406
                     crc_new[4]    ^
407
                     crc_new[2]    ^
408
                     crc_new[1];
409
 
410
assign crc_next[8] = crc_new[31]   ^
411
                     crc_new[28]   ^
412
                     crc_new[23]   ^
413
                     crc_new[22]   ^
414
                     crc_new[17]   ^
415
                     crc_new[12]   ^
416
                     crc_new[11]   ^
417
                     crc_new[10]   ^
418
                     crc_new[8]    ^
419
                     crc_new[4]    ^
420
                     crc_new[3]    ^
421
                     crc_new[1]    ^
422
                     crc_new[0];
423
 
424
assign crc_next[7] = crc_new[29]   ^
425
                     crc_new[28]   ^
426
                     crc_new[25]   ^
427
                     crc_new[24]   ^
428
                     crc_new[23]   ^
429
                     crc_new[22]   ^
430
                     crc_new[21]   ^
431
                     crc_new[16]   ^
432
                     crc_new[15]   ^
433
                     crc_new[10]   ^
434
                     crc_new[8]    ^
435
                     crc_new[7]    ^
436
                     crc_new[5]    ^
437
                     crc_new[3]    ^
438
                     crc_new[2]    ^
439
                     crc_new[0];
440
 
441
assign crc_next[6] = crc_new[30]   ^
442
                     crc_new[29]   ^
443
                     crc_new[25]   ^
444
                     crc_new[22]   ^
445
                     crc_new[21]   ^
446
                     crc_new[20]   ^
447
                     crc_new[14]   ^
448
                     crc_new[11]   ^
449
                     crc_new[8]    ^
450
                     crc_new[7]    ^
451
                     crc_new[6]    ^
452
                     crc_new[5]    ^
453
                     crc_new[4]    ^
454
                     crc_new[2]    ^
455
                     crc_new[1];
456
 
457
assign crc_next[5] = crc_new[29]   ^
458
                     crc_new[28]   ^
459
                     crc_new[24]   ^
460
                     crc_new[21]   ^
461
                     crc_new[20]   ^
462
                     crc_new[19]   ^
463
                     crc_new[13]   ^
464
                     crc_new[10]   ^
465
                     crc_new[7]    ^
466
                     crc_new[6]    ^
467
                     crc_new[5]    ^
468
                     crc_new[4]    ^
469
                     crc_new[3]    ^
470
                     crc_new[1]    ^
471
                     crc_new[0];
472
 
473
assign crc_next[4] = crc_new[31]   ^
474
                     crc_new[30]   ^
475
                     crc_new[29]   ^
476
                     crc_new[25]   ^
477
                     crc_new[24]   ^
478
                     crc_new[20]   ^
479
                     crc_new[19]   ^
480
                     crc_new[18]   ^
481
                     crc_new[15]   ^
482
                     crc_new[12]   ^
483
                     crc_new[11]   ^
484
                     crc_new[8]    ^
485
                     crc_new[6]    ^
486
                     crc_new[4]    ^
487
                     crc_new[3]    ^
488
                     crc_new[2]    ^
489
                     crc_new[0];
490
 
491
assign crc_next[3] = crc_new[31]   ^
492
                     crc_new[27]   ^
493
                     crc_new[25]   ^
494
                     crc_new[19]   ^
495
                     crc_new[18]   ^
496
                     crc_new[17]   ^
497
                     crc_new[15]   ^
498
                     crc_new[14]   ^
499
                     crc_new[10]   ^
500
                     crc_new[9]    ^
501
                     crc_new[8]    ^
502
                     crc_new[7]    ^
503
                     crc_new[3]    ^
504
                     crc_new[2]    ^
505
                     crc_new[1];
506
 
507
assign crc_next[2] = crc_new[31]   ^
508
                     crc_new[30]   ^
509
                     crc_new[26]   ^
510
                     crc_new[24]   ^
511
                     crc_new[18]   ^
512
                     crc_new[17]   ^
513
                     crc_new[16]   ^
514
                     crc_new[14]   ^
515
                     crc_new[13]   ^
516
                     crc_new[9]    ^
517
                     crc_new[8]    ^
518
                     crc_new[7]    ^
519
                     crc_new[6]    ^
520
                     crc_new[2]    ^
521
                     crc_new[1]    ^
522
                     crc_new[0];
523
 
524
assign crc_next[1] = crc_new[28]   ^
525
                     crc_new[27]   ^
526
                     crc_new[24]   ^
527
                     crc_new[17]   ^
528
                     crc_new[16]   ^
529
                     crc_new[13]   ^
530
                     crc_new[12]   ^
531
                     crc_new[11]   ^
532
                     crc_new[9]    ^
533
                     crc_new[7]    ^
534
                     crc_new[6]    ^
535
                     crc_new[1]    ^
536
                     crc_new[0];
537
 
538
assign crc_next[0] = crc_new[31]   ^
539
                     crc_new[30]   ^
540
                     crc_new[29]   ^
541
                     crc_new[28]   ^
542
                     crc_new[26]   ^
543
                     crc_new[25]   ^
544
                     crc_new[24]   ^
545
                     crc_new[16]   ^
546
                     crc_new[12]   ^
547
                     crc_new[10]   ^
548
                     crc_new[9]    ^
549
                     crc_new[6]    ^
550
                     crc_new[0];
551
 
552
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.