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

Subversion Repositories adv_debug_sys

[/] [adv_debug_sys/] [trunk/] [Hardware/] [adv_dbg_if/] [rtl/] [verilog/] [adbg_crc32.v] - Blame information for rev 3

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

Line No. Rev Author Line
1 3 nyawn
//////////////////////////////////////////////////////////////////////
2
// File:  CRC32.v                             
3
// Date:  Thu Nov 27 13:56:49 2003                                                      
4
//                                                                     
5
// Copyright (C) 1999-2003 Easics NV.                 
6
// This source file may be used and distributed without restriction    
7
// provided that this copyright statement is not removed from the file 
8
// and that any derivative work contains the original copyright notice
9
// and the associated disclaimer.
10
//
11
// THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
12
// OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
13
// WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14
//
15
// Purpose: Verilog module containing a synthesizable CRC function
16
//   * polynomial: (0 1 2 4 5 7 8 10 11 12 16 22 23 26 32)
17
//   * data width: 1
18
//                                                                     
19
// Info: janz@easics.be (Jan Zegers)                           
20
//       http://www.easics.com
21
//
22
// Modified by Nathan Yawn for the Advanced Debug Module
23
// Changes (C) 2008 Nathan Yawn                                 
24
///////////////////////////////////////////////////////////////////////
25
//
26
// CVS Revision History
27
//
28
// $Log: adbg_crc32.v,v $
29
// Revision 1.1  2008/07/22 20:28:29  Nathan
30
// Changed names of all files and modules (prefixed an a, for advanced).  Cleanup, indenting.  No functional changes.
31
//
32
// Revision 1.3  2008/07/06 20:02:53  Nathan
33
// Fixes for synthesis with Xilinx ISE (also synthesizable with 
34
// Quartus II 7.0).  Ran through dos2unix.
35
//
36
// Revision 1.2  2008/06/20 19:22:10  Nathan
37
// Reversed the direction of the CRC computation shift, for a more 
38
// hardware-efficient implementation.
39
//
40
//
41
//
42
//
43
 
44
 
45
module adbg_crc32 (clk, data, enable, shift, clr, rst, crc_out, serial_out);
46
 
47
input         clk;
48
input         data;
49
input         enable;
50
input         shift;
51
input         clr;
52
input         rst;
53
output [31:0] crc_out;
54
output        serial_out;
55
 
56
 
57
reg    [31:0] crc;
58
wire   [31:0] new_crc;
59
 
60
 
61
// You may notice that the 'poly' in this implementation is backwards.
62
// This is because the shift is also 'backwards', so that the data can
63
// be shifted out in the same direction, which saves on logic + routing.
64
assign new_crc[0] = crc[1];
65
assign new_crc[1] = crc[2];
66
assign new_crc[2] = crc[3];
67
assign new_crc[3] = crc[4];
68
assign new_crc[4] = crc[5];
69
assign new_crc[5] = crc[6] ^ data ^ crc[0];
70
assign new_crc[6] = crc[7];
71
assign new_crc[7] = crc[8];
72
assign new_crc[8] = crc[9] ^ data ^ crc[0];
73
assign new_crc[9] = crc[10] ^ data ^ crc[0];
74
assign new_crc[10] = crc[11];
75
assign new_crc[11] = crc[12];
76
assign new_crc[12] = crc[13];
77
assign new_crc[13] = crc[14];
78
assign new_crc[14] = crc[15];
79
assign new_crc[15] = crc[16] ^ data ^ crc[0];
80
assign new_crc[16] = crc[17];
81
assign new_crc[17] = crc[18];
82
assign new_crc[18] = crc[19];
83
assign new_crc[19] = crc[20] ^ data ^ crc[0];
84
assign new_crc[20] = crc[21] ^ data ^ crc[0];
85
assign new_crc[21] = crc[22] ^ data ^ crc[0];
86
assign new_crc[22] = crc[23];
87
assign new_crc[23] = crc[24] ^ data ^ crc[0];
88
assign new_crc[24] = crc[25] ^ data ^ crc[0];
89
assign new_crc[25] = crc[26];
90
assign new_crc[26] = crc[27] ^ data ^ crc[0];
91
assign new_crc[27] = crc[28] ^ data ^ crc[0];
92
assign new_crc[28] = crc[29];
93
assign new_crc[29] = crc[30] ^ data ^ crc[0];
94
assign new_crc[30] = crc[31] ^ data ^ crc[0];
95
assign new_crc[31] =           data ^ crc[0];
96
 
97
always @ (posedge clk or posedge rst)
98
begin
99
  if(rst)
100
    crc[31:0] <= #1 32'hffffffff;
101
  else if(clr)
102
    crc[31:0] <= #1 32'hffffffff;
103
  else if(enable)
104
    crc[31:0] <= #1 new_crc;
105
  else if (shift)
106
    crc[31:0] <= #1 {1'b0, crc[31:1]};
107
end
108
 
109
 
110
//assign crc_match = (crc == 32'h0);
111
assign crc_out = crc; //[31];
112
assign serial_out = crc[0];
113
 
114
endmodule

powered by: WebSVN 2.1.0

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