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
CMS_DAQ_if
5Gb
slink
CRC16_DATA32.vhd
1
2
-- ########################################################################
3
-- CRC Engine RTL Design
4
-- Copyright (C) www.ElectronicDesignworks.com
5
-- Source code generated by ElectronicDesignworks IP Generator (CRC).
6
-- Documentation can be downloaded from www.ElectronicDesignworks.com
7
-- ********************************
8
-- License
9
-- ********************************
10
-- This source
file
may be used
and
distributed freely provided that this
11
-- copyright notice, list
of
conditions
and
the following disclaimer
is
12
--
not
removed from the
file
.
13
-- Any derivative work should contain this copyright notice
and
associated disclaimer.
14
-- This source code
file
is
provided "AS IS"
AND
WITHOUT ANY WARRANTY,
15
-- without even the implied warranty
of
MERCHANTABILITY
or
FITNESS
FOR
A
16
-- PARTICULAR PURPOSE.
17
-- ********************************
18
-- Specification
19
-- ********************************
20
--
File
Name : CRC16_DATA32.vhd
21
-- Description : CRC Engine
ENTITY
22
-- Clock : Positive Edge
23
-- Reset : Active High
24
-- First Serial : MSB
25
-- Data
Bus
Width :
32
bits
26
-- Polynomial : (
0
2
15
16
)
27
-- Date : 27-Feb-2012
28
-- Version :
1
.
0
29
-- ########################################################################
30
31
LIBRARY
IEEE
;
32
USE
ieee.std_logic_1164.
all
;
33
USE
ieee.std_logic_arith.
all
;
34
USE
ieee.std_logic_unsigned.
all
;
35
36
ENTITY
crc_gen_usb_32to16
IS
37
PORT
(
38
clock
:
IN
STD_LOGIC
;
39
reset
:
IN
STD_LOGIC
;
40
--soc :
IN
STD_LOGIC
;
41
data
:
IN
STD_LOGIC_VECTOR
(
31
DOWNTO
0
)
;
42
data_valid
:
IN
STD_LOGIC
;
43
eoc
:
IN
STD_LOGIC
;
44
crc
:
OUT
STD_LOGIC_VECTOR
(
15
DOWNTO
0
)
;
45
crc_valid
:
OUT
STD_LOGIC
46
)
;
47
END
crc_gen_usb_32to16
;
48
49
ARCHITECTURE
behave
OF
crc_gen_usb_32to16
IS
50
51
SIGNAL
crc_r
:
STD_LOGIC_VECTOR
(
15
DOWNTO
0
)
;
52
SIGNAL
crc_c
:
STD_LOGIC_VECTOR
(
15
DOWNTO
0
)
;
53
SIGNAL
crc_i
:
STD_LOGIC_VECTOR
(
15
DOWNTO
0
)
;
54
SIGNAL
crc_const
:
STD_LOGIC_VECTOR
(
15
DOWNTO
0
)
:=
"0000000000000000"
;
55
56
BEGIN
57
58
59
crc_i
<=
--crc_const
when
soc = '1'
else
60
crc_r
;
61
62
crc_c
(
0
)
<=
data
(
0
)
XOR
data
(
1
)
XOR
data
(
15
)
XOR
data
(
30
)
XOR
crc_i
(
14
)
XOR
data
(
2
)
XOR
data
(
16
)
XOR
crc_i
(
0
)
XOR
data
(
31
)
XOR
crc_i
(
15
)
XOR
data
(
3
)
XOR
data
(
17
)
XOR
crc_i
(
1
)
XOR
data
(
4
)
XOR
data
(
18
)
XOR
crc_i
(
2
)
XOR
data
(
5
)
XOR
data
(
19
)
XOR
crc_i
(
3
)
XOR
data
(
6
)
XOR
data
(
20
)
XOR
crc_i
(
4
)
XOR
data
(
7
)
XOR
data
(
21
)
XOR
crc_i
(
5
)
XOR
data
(
8
)
XOR
data
(
22
)
XOR
crc_i
(
6
)
XOR
data
(
9
)
XOR
data
(
23
)
XOR
crc_i
(
7
)
XOR
data
(
10
)
XOR
data
(
24
)
XOR
crc_i
(
8
)
XOR
data
(
11
)
XOR
data
(
25
)
XOR
crc_i
(
9
)
XOR
data
(
12
)
XOR
data
(
26
)
XOR
crc_i
(
10
)
XOR
data
(
13
)
XOR
data
(
27
)
XOR
crc_i
(
11
)
;
63
crc_c
(
1
)
<=
data
(
1
)
XOR
data
(
2
)
XOR
data
(
16
)
XOR
crc_i
(
0
)
XOR
data
(
31
)
XOR
crc_i
(
15
)
XOR
data
(
3
)
XOR
data
(
17
)
XOR
crc_i
(
1
)
XOR
data
(
4
)
XOR
data
(
18
)
XOR
crc_i
(
2
)
XOR
data
(
5
)
XOR
data
(
19
)
XOR
crc_i
(
3
)
XOR
data
(
6
)
XOR
data
(
20
)
XOR
crc_i
(
4
)
XOR
data
(
7
)
XOR
data
(
21
)
XOR
crc_i
(
5
)
XOR
data
(
8
)
XOR
data
(
22
)
XOR
crc_i
(
6
)
XOR
data
(
9
)
XOR
data
(
23
)
XOR
crc_i
(
7
)
XOR
data
(
10
)
XOR
data
(
24
)
XOR
crc_i
(
8
)
XOR
data
(
11
)
XOR
data
(
25
)
XOR
crc_i
(
9
)
XOR
data
(
12
)
XOR
data
(
26
)
XOR
crc_i
(
10
)
XOR
data
(
13
)
XOR
data
(
27
)
XOR
crc_i
(
11
)
XOR
data
(
14
)
XOR
data
(
28
)
XOR
crc_i
(
12
)
;
64
crc_c
(
2
)
<=
data
(
0
)
XOR
data
(
14
)
XOR
data
(
28
)
XOR
crc_i
(
12
)
XOR
data
(
29
)
XOR
crc_i
(
13
)
XOR
data
(
1
)
XOR
data
(
30
)
XOR
crc_i
(
14
)
XOR
data
(
16
)
XOR
crc_i
(
0
)
XOR
data
(
31
)
XOR
crc_i
(
15
)
;
65
crc_c
(
3
)
<=
data
(
1
)
XOR
data
(
15
)
XOR
data
(
29
)
XOR
crc_i
(
13
)
XOR
data
(
30
)
XOR
crc_i
(
14
)
XOR
data
(
2
)
XOR
data
(
31
)
XOR
crc_i
(
15
)
XOR
data
(
17
)
XOR
crc_i
(
1
)
;
66
crc_c
(
4
)
<=
data
(
2
)
XOR
data
(
16
)
XOR
data
(
30
)
XOR
crc_i
(
14
)
XOR
crc_i
(
0
)
XOR
data
(
31
)
XOR
crc_i
(
15
)
XOR
data
(
3
)
XOR
data
(
18
)
XOR
crc_i
(
2
)
;
67
crc_c
(
5
)
<=
data
(
3
)
XOR
data
(
17
)
XOR
data
(
31
)
XOR
crc_i
(
15
)
XOR
crc_i
(
1
)
XOR
data
(
4
)
XOR
data
(
19
)
XOR
crc_i
(
3
)
;
68
crc_c
(
6
)
<=
data
(
4
)
XOR
data
(
18
)
XOR
crc_i
(
2
)
XOR
data
(
5
)
XOR
data
(
20
)
XOR
crc_i
(
4
)
;
69
crc_c
(
7
)
<=
data
(
5
)
XOR
data
(
19
)
XOR
crc_i
(
3
)
XOR
data
(
6
)
XOR
data
(
21
)
XOR
crc_i
(
5
)
;
70
crc_c
(
8
)
<=
data
(
6
)
XOR
data
(
20
)
XOR
crc_i
(
4
)
XOR
data
(
7
)
XOR
data
(
22
)
XOR
crc_i
(
6
)
;
71
crc_c
(
9
)
<=
data
(
7
)
XOR
data
(
21
)
XOR
crc_i
(
5
)
XOR
data
(
8
)
XOR
data
(
23
)
XOR
crc_i
(
7
)
;
72
crc_c
(
10
)
<=
data
(
8
)
XOR
data
(
22
)
XOR
crc_i
(
6
)
XOR
data
(
9
)
XOR
data
(
24
)
XOR
crc_i
(
8
)
;
73
crc_c
(
11
)
<=
data
(
9
)
XOR
data
(
23
)
XOR
crc_i
(
7
)
XOR
data
(
10
)
XOR
data
(
25
)
XOR
crc_i
(
9
)
;
74
crc_c
(
12
)
<=
data
(
10
)
XOR
data
(
24
)
XOR
crc_i
(
8
)
XOR
data
(
11
)
XOR
data
(
26
)
XOR
crc_i
(
10
)
;
75
crc_c
(
13
)
<=
data
(
11
)
XOR
data
(
25
)
XOR
crc_i
(
9
)
XOR
data
(
12
)
XOR
data
(
27
)
XOR
crc_i
(
11
)
;
76
crc_c
(
14
)
<=
data
(
12
)
XOR
data
(
26
)
XOR
crc_i
(
10
)
XOR
data
(
13
)
XOR
data
(
28
)
XOR
crc_i
(
12
)
;
77
crc_c
(
15
)
<=
data
(
0
)
XOR
data
(
14
)
XOR
data
(
29
)
XOR
crc_i
(
13
)
XOR
data
(
1
)
XOR
data
(
15
)
XOR
data
(
30
)
XOR
crc_i
(
14
)
XOR
data
(
2
)
XOR
data
(
16
)
XOR
crc_i
(
0
)
XOR
data
(
31
)
XOR
crc_i
(
15
)
XOR
data
(
3
)
XOR
data
(
17
)
XOR
crc_i
(
1
)
XOR
data
(
4
)
XOR
data
(
18
)
XOR
crc_i
(
2
)
XOR
data
(
5
)
XOR
data
(
19
)
XOR
crc_i
(
3
)
XOR
data
(
6
)
XOR
data
(
20
)
XOR
crc_i
(
4
)
XOR
data
(
7
)
XOR
data
(
21
)
XOR
crc_i
(
5
)
XOR
data
(
8
)
XOR
data
(
22
)
XOR
crc_i
(
6
)
XOR
data
(
9
)
XOR
data
(
23
)
XOR
crc_i
(
7
)
XOR
data
(
10
)
XOR
data
(
24
)
XOR
crc_i
(
8
)
XOR
data
(
11
)
XOR
data
(
25
)
XOR
crc_i
(
9
)
XOR
data
(
12
)
XOR
data
(
26
)
XOR
crc_i
(
10
)
;
78
79
80
crc_gen_process :
PROCESS
(clock, reset)
81
BEGIN
82
IF
(
reset
=
'
1
'
)
THEN
83
crc_r
<=
"0000000000000000"
;
84
ELSIF
rising_edge
(
clock
)
THEN
85
IF
(
data_valid
=
'
1
'
)
THEN
86
crc_r
<=
crc_c
;
87
END
IF
;
88
END
IF
;
89
END
PROCESS
crc_gen_process
;
90
91
92
crc_valid_gen :
PROCESS
(clock, reset)
93
BEGIN
94
If
(
reset
=
'
1
'
)
THEN
95
crc_valid
<=
'
0
'
;
96
ELSIF
rising_edge
(
clock
)
THEN
97
IF
(
data_valid
=
'
1
'
AND
eoc
=
'
1
'
)
THEN
98
crc_valid
<=
'
1
'
;
99
ELSE
100
crc_valid
<=
'
0
'
;
101
END
IF
;
102
END
IF
;
103
END
PROCESS
crc_valid_gen
;
104
105
crc
<=
crc_r
;
106
107
END
behave
;
108
109
110
111
112
113
114
115
116
117
Generated on Wed Apr 18 2018 10:55:26 for AMC13 by
1.8.1