AMC13
Firmwares for the different applications of the AMC13 uTCA board made at Boston University
Main Page
Design Unit List
Files
File List
All
Classes
Variables
src
common
AMC_if
EthernetCRCD16B.vhd
1
--------------------------------------------------------------------------------
2
-- Copyright (C) 1999-2008 Easics NV.
3
-- This source
file
may be used
and
distributed without restriction
4
-- provided that this copyright statement
is
not
removed from the
file
5
--
and
that any derivative work contains the original copyright notice
6
--
and
the associated disclaimer.
7
--
8
-- THIS SOURCE
FILE
IS
PROVIDED "AS IS"
AND
WITHOUT ANY EXPRESS
9
--
OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
10
-- WARRANTIES
OF
MERCHANTIBILITY
AND
FITNESS
FOR
A PARTICULAR PURPOSE.
11
--
12
-- Purpose : synthesizable CRC
function
13
-- * polynomial: (
0
1
2
4
5
7
8
10
11
12
16
22
23
26
32
)
14
-- * data width:
8
15
--
16
-- Info : tools@easics.be
17
-- http://www.easics.com
18
--------------------------------------------------------------------------------
19
----------------------------------------------------------------------------------
20
-- Company:
21
-- Engineer:
22
--
23
-- Create Date:
13
:
20
:
34
12/01/2011
24
-- Design Name:
25
-- Module Name: EthernetCRC - Behavioral
26
-- Project Name:
27
-- Target Devices:
28
-- Tool versions:
29
-- !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER
30
-- This module
is
provided only as an example, no correctness
or
any usefullness
is
implied.
31
--
Use
of
it
is
at users' own risk.
32
-- Do
not
remove this disclaimer.
33
-- !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER !!!DISCLAIMER
34
-- Description: Ethernet CRC calculation, derived from PCK_CRC32_D8 generated using easics.com tools
35
--
36
-- Dependencies:
37
--
38
-- Revision:
39
-- Revision
0
.
01
-
File
Created
40
-- Additional Comments:
41
--
42
----------------------------------------------------------------------------------
43
library
IEEE
;
44
use
IEEE.STD_LOGIC_1164.
ALL
;
45
46
-- Uncomment the following
library
declaration
if
using
47
-- arithmetic functions
with
Signed
or
Unsigned
values
48
--use IEEE.NUMERIC_STD.
ALL
;
49
50
-- Uncomment the following
library
declaration
if
instantiating
51
-- any Xilinx primitives
in
this code.
52
--library UNISIM;
53
--use UNISIM.VComponents.
all
;
54
55
entity
EthernetCRCD16B
is
56
Port
(
clk
:
in
STD_LOGIC
;
57
init
:
in
STD_LOGIC
;
58
save
:
in
std_logic
;
59
restore
:
in
std_logic
;
60
ce
:
in
STD_LOGIC
;
61
d
:
in
STD_LOGIC_VECTOR
(
15
downto
0
)
;
62
crc
:
out
STD_LOGIC_VECTOR
(
31
downto
0
)
;
63
bad_crc
:
out
STD_LOGIC
64
)
;
65
end
EthernetCRCD16B
;
66
67
architecture
Behavioral
of
EthernetCRCD16B
is
68
constant
crc_R
:
std_logic_vector
(
31
downto
0
)
:=
x
"c704dd7b"
;
69
signal
c
:
std_logic_vector
(
31
downto
0
)
:=
(
others
=
>
'
0
'
)
;
70
signal
s
:
std_logic_vector
(
31
downto
0
)
:=
(
others
=
>
'
0
'
)
;
71
signal
di
:
std_logic_vector
(
15
downto
0
)
:=
(
others
=
>
'
0
'
)
;
72
begin
73
process
(c,d)
74
begin
75
for
i
in
0
to
31
loop
76
crc
(
i
)
<=
not
c
(
31-
i
)
;
77
end
loop
;
78
for
i
in
0
to
15
loop
79
di
(
i
)
<=
d
(
15-
i
)
;
80
end
loop
;
81
end
process
;
82
bad_crc
<=
'
0
'
when
c
=
crc_R
else
'
1
'
;
83
process
(clk)
84
begin
85
if
(
clk
'
event
and
clk
=
'
1
'
)
then
86
if
(
init
=
'
1
'
)
then
87
s
<=
(
others
=
>
'
1
'
)
;
88
elsif
(
save
=
'
1
'
)
then
89
s
<=
c
;
90
end
if
;
91
if
(
init
=
'
1
'
)
then
92
c
<=
(
others
=
>
'
1
'
)
;
93
elsif
(
restore
=
'
1
'
)
then
94
c
<=
s
;
95
elsif
(
ce
=
'
1
'
)
then
96
c
(
0
)
<=
di
(
12
)
xor
di
(
10
)
xor
di
(
9
)
xor
di
(
6
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
22
)
xor
c
(
25
)
xor
c
(
26
)
xor
c
(
28
)
;
97
c
(
1
)
<=
di
(
13
)
xor
di
(
12
)
xor
di
(
11
)
xor
di
(
9
)
xor
di
(
7
)
xor
di
(
6
)
xor
di
(
1
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
17
)
xor
c
(
22
)
xor
c
(
23
)
xor
c
(
25
)
xor
c
(
27
)
xor
c
(
28
)
xor
c
(
29
)
;
98
c
(
2
)
<=
di
(
14
)
xor
di
(
13
)
xor
di
(
9
)
xor
di
(
8
)
xor
di
(
7
)
xor
di
(
6
)
xor
di
(
2
)
xor
di
(
1
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
17
)
xor
c
(
18
)
xor
c
(
22
)
xor
c
(
23
)
xor
c
(
24
)
xor
c
(
25
)
xor
c
(
29
)
xor
c
(
30
)
;
99
c
(
3
)
<=
di
(
15
)
xor
di
(
14
)
xor
di
(
10
)
xor
di
(
9
)
xor
di
(
8
)
xor
di
(
7
)
xor
di
(
3
)
xor
di
(
2
)
xor
di
(
1
)
xor
c
(
17
)
xor
c
(
18
)
xor
c
(
19
)
xor
c
(
23
)
xor
c
(
24
)
xor
c
(
25
)
xor
c
(
26
)
xor
c
(
30
)
xor
c
(
31
)
;
100
c
(
4
)
<=
di
(
15
)
xor
di
(
12
)
xor
di
(
11
)
xor
di
(
8
)
xor
di
(
6
)
xor
di
(
4
)
xor
di
(
3
)
xor
di
(
2
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
18
)
xor
c
(
19
)
xor
c
(
20
)
xor
c
(
22
)
xor
c
(
24
)
xor
c
(
27
)
xor
c
(
28
)
xor
c
(
31
)
;
101
c
(
5
)
<=
di
(
13
)
xor
di
(
10
)
xor
di
(
7
)
xor
di
(
6
)
xor
di
(
5
)
xor
di
(
4
)
xor
di
(
3
)
xor
di
(
1
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
17
)
xor
c
(
19
)
xor
c
(
20
)
xor
c
(
21
)
xor
c
(
22
)
xor
c
(
23
)
xor
c
(
26
)
xor
c
(
29
)
;
102
c
(
6
)
<=
di
(
14
)
xor
di
(
11
)
xor
di
(
8
)
xor
di
(
7
)
xor
di
(
6
)
xor
di
(
5
)
xor
di
(
4
)
xor
di
(
2
)
xor
di
(
1
)
xor
c
(
17
)
xor
c
(
18
)
xor
c
(
20
)
xor
c
(
21
)
xor
c
(
22
)
xor
c
(
23
)
xor
c
(
24
)
xor
c
(
27
)
xor
c
(
30
)
;
103
c
(
7
)
<=
di
(
15
)
xor
di
(
10
)
xor
di
(
8
)
xor
di
(
7
)
xor
di
(
5
)
xor
di
(
3
)
xor
di
(
2
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
18
)
xor
c
(
19
)
xor
c
(
21
)
xor
c
(
23
)
xor
c
(
24
)
xor
c
(
26
)
xor
c
(
31
)
;
104
c
(
8
)
<=
di
(
12
)
xor
di
(
11
)
xor
di
(
10
)
xor
di
(
8
)
xor
di
(
4
)
xor
di
(
3
)
xor
di
(
1
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
17
)
xor
c
(
19
)
xor
c
(
20
)
xor
c
(
24
)
xor
c
(
26
)
xor
c
(
27
)
xor
c
(
28
)
;
105
c
(
9
)
<=
di
(
13
)
xor
di
(
12
)
xor
di
(
11
)
xor
di
(
9
)
xor
di
(
5
)
xor
di
(
4
)
xor
di
(
2
)
xor
di
(
1
)
xor
c
(
17
)
xor
c
(
18
)
xor
c
(
20
)
xor
c
(
21
)
xor
c
(
25
)
xor
c
(
27
)
xor
c
(
28
)
xor
c
(
29
)
;
106
c
(
10
)
<=
di
(
14
)
xor
di
(
13
)
xor
di
(
9
)
xor
di
(
5
)
xor
di
(
3
)
xor
di
(
2
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
18
)
xor
c
(
19
)
xor
c
(
21
)
xor
c
(
25
)
xor
c
(
29
)
xor
c
(
30
)
;
107
c
(
11
)
<=
di
(
15
)
xor
di
(
14
)
xor
di
(
12
)
xor
di
(
9
)
xor
di
(
4
)
xor
di
(
3
)
xor
di
(
1
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
17
)
xor
c
(
19
)
xor
c
(
20
)
xor
c
(
25
)
xor
c
(
28
)
xor
c
(
30
)
xor
c
(
31
)
;
108
c
(
12
)
<=
di
(
15
)
xor
di
(
13
)
xor
di
(
12
)
xor
di
(
9
)
xor
di
(
6
)
xor
di
(
5
)
xor
di
(
4
)
xor
di
(
2
)
xor
di
(
1
)
xor
di
(
0
)
xor
c
(
16
)
xor
c
(
17
)
xor
c
(
18
)
xor
c
(
20
)
xor
c
(
21
)
xor
c
(
22
)
xor
c
(
25
)
xor
c
(
28
)
xor
c
(
29
)
xor
c
(
31
)
;
109
c
(
13
)
<=
di
(
14
)
xor
di
(
13
)
xor
di
(
10
)
xor
di
(
7
)
xor
di
(
6
)
xor
di
(
5
)
xor
di
(
3
)
xor
di
(
2
)
xor
di
(
1
)
xor
c
(
17
)
xor
c
(
18
)
xor
c
(
19
)
xor
c
(
21
)
xor
c
(
22
)
xor
c
(
23
)
xor
c
(
26
)
xor
c
(
29
)
xor
c
(
30
)
;
110
c
(
14
)
<=
di
(
15
)
xor
di
(
14
)
xor
di
(
11
)
xor
di
(
8
)
xor
di
(
7
)
xor
di
(
6
)
xor
di
(
4
)
xor
di
(
3
)
xor
di
(
2
)
xor
c
(
18
)
xor
c
(
19
)
xor
c
(
20
)
xor
c
(
22
)
xor
c
(
23
)
xor
c
(
24
)
xor
c
(
27
)
xor
c
(
30
)
xor
c
(
31
)
;
111
c
(
15
)
<=
di
(
15
)
xor
di
(
12
)
xor
di
(
9
)
xor
di
(
8
)
xor
di
(
7
)
xor
di
(
5
)
xor
di
(
4
)
xor
di
(
3
)
xor
c
(
19
)
xor
c
(
20
)
xor
c
(
21
)
xor
c
(
23
)
xor
c
(
24
)
xor
c
(
25
)
xor
c
(
28
)
xor
c
(
31
)
;
112
c
(
16
)
<=
di
(
13
)
xor
di
(
12
)
xor
di
(
8
)
xor
di
(
5
)
xor
di
(
4
)
xor
di
(
0
)
xor
c
(
0
)
xor
c
(
16
)
xor
c
(
20
)
xor
c
(
21
)
xor
c
(
24
)
xor
c
(
28
)
xor
c
(
29
)
;
113
c
(
17
)
<=
di
(
14
)
xor
di
(
13
)
xor
di
(
9
)
xor
di
(
6
)
xor
di
(
5
)
xor
di
(
1
)
xor
c
(
1
)
xor
c
(
17
)
xor
c
(
21
)
xor
c
(
22
)
xor
c
(
25
)
xor
c
(
29
)
xor
c
(
30
)
;
114
c
(
18
)
<=
di
(
15
)
xor
di
(
14
)
xor
di
(
10
)
xor
di
(
7
)
xor
di
(
6
)
xor
di
(
2
)
xor
c
(
2
)
xor
c
(
18
)
xor
c
(
22
)
xor
c
(
23
)
xor
c
(
26
)
xor
c
(
30
)
xor
c
(
31
)
;
115
c
(
19
)
<=
di
(
15
)
xor
di
(
11
)
xor
di
(
8
)
xor
di
(
7
)
xor
di
(
3
)
xor
c
(
3
)
xor
c
(
19
)
xor
c
(
23
)
xor
c
(
24
)
xor
c
(
27
)
xor
c
(
31
)
;
116
c
(
20
)
<=
di
(
12
)
xor
di
(
9
)
xor
di
(
8
)
xor
di
(
4
)
xor
c
(
4
)
xor
c
(
20
)
xor
c
(
24
)
xor
c
(
25
)
xor
c
(
28
)
;
117
c
(
21
)
<=
di
(
13
)
xor
di
(
10
)
xor
di
(
9
)
xor
di
(
5
)
xor
c
(
5
)
xor
c
(
21
)
xor
c
(
25
)
xor
c
(
26
)
xor
c
(
29
)
;
118
c
(
22
)
<=
di
(
14
)
xor
di
(
12
)
xor
di
(
11
)
xor
di
(
9
)
xor
di
(
0
)
xor
c
(
6
)
xor
c
(
16
)
xor
c
(
25
)
xor
c
(
27
)
xor
c
(
28
)
xor
c
(
30
)
;
119
c
(
23
)
<=
di
(
15
)
xor
di
(
13
)
xor
di
(
9
)
xor
di
(
6
)
xor
di
(
1
)
xor
di
(
0
)
xor
c
(
7
)
xor
c
(
16
)
xor
c
(
17
)
xor
c
(
22
)
xor
c
(
25
)
xor
c
(
29
)
xor
c
(
31
)
;
120
c
(
24
)
<=
di
(
14
)
xor
di
(
10
)
xor
di
(
7
)
xor
di
(
2
)
xor
di
(
1
)
xor
c
(
8
)
xor
c
(
17
)
xor
c
(
18
)
xor
c
(
23
)
xor
c
(
26
)
xor
c
(
30
)
;
121
c
(
25
)
<=
di
(
15
)
xor
di
(
11
)
xor
di
(
8
)
xor
di
(
3
)
xor
di
(
2
)
xor
c
(
9
)
xor
c
(
18
)
xor
c
(
19
)
xor
c
(
24
)
xor
c
(
27
)
xor
c
(
31
)
;
122
c
(
26
)
<=
di
(
10
)
xor
di
(
6
)
xor
di
(
4
)
xor
di
(
3
)
xor
di
(
0
)
xor
c
(
10
)
xor
c
(
16
)
xor
c
(
19
)
xor
c
(
20
)
xor
c
(
22
)
xor
c
(
26
)
;
123
c
(
27
)
<=
di
(
11
)
xor
di
(
7
)
xor
di
(
5
)
xor
di
(
4
)
xor
di
(
1
)
xor
c
(
11
)
xor
c
(
17
)
xor
c
(
20
)
xor
c
(
21
)
xor
c
(
23
)
xor
c
(
27
)
;
124
c
(
28
)
<=
di
(
12
)
xor
di
(
8
)
xor
di
(
6
)
xor
di
(
5
)
xor
di
(
2
)
xor
c
(
12
)
xor
c
(
18
)
xor
c
(
21
)
xor
c
(
22
)
xor
c
(
24
)
xor
c
(
28
)
;
125
c
(
29
)
<=
di
(
13
)
xor
di
(
9
)
xor
di
(
7
)
xor
di
(
6
)
xor
di
(
3
)
xor
c
(
13
)
xor
c
(
19
)
xor
c
(
22
)
xor
c
(
23
)
xor
c
(
25
)
xor
c
(
29
)
;
126
c
(
30
)
<=
di
(
14
)
xor
di
(
10
)
xor
di
(
8
)
xor
di
(
7
)
xor
di
(
4
)
xor
c
(
14
)
xor
c
(
20
)
xor
c
(
23
)
xor
c
(
24
)
xor
c
(
26
)
xor
c
(
30
)
;
127
c
(
31
)
<=
di
(
15
)
xor
di
(
11
)
xor
di
(
9
)
xor
di
(
8
)
xor
di
(
5
)
xor
c
(
15
)
xor
c
(
21
)
xor
c
(
24
)
xor
c
(
25
)
xor
c
(
27
)
xor
c
(
31
)
;
128
end
if
;
129
end
if
;
130
end
process
;
131
132
end
Behavioral
;
133
Generated on Wed Apr 18 2018 10:55:27 for AMC13 by
1.8.1