otsdaq_prepmodernization
v2_04_02
Return to top level
Main Page
Classes
Files
File List
decipherer.vhd
1
-------------------------------------------------------------------------------
2
--
3
-- Title : Decipherer
4
-- Design : ethernet_controller
5
-- Author : Ryan Rivera
6
-- Company : FNAL
7
--
8
-------------------------------------------------------------------------------
9
--
10
-- File : c:\HDL_Designs\dig_gec\ethernet_controller\compile\decipherer.vhd
11
-- Generated : 03/20/09 15:19:31
12
-- From : c:/HDL_Designs/dig_gec/ethernet_controller/src/decipherer.asf
13
-- By : FSM2VHDL ver. 5.0.5.6
14
--
15
-------------------------------------------------------------------------------
16
--
17
-- Description :
18
--
19
-------------------------------------------------------------------------------
20
21
library
IEEE
;
22
use
IEEE.std_logic_1164.
all
;
23
use
IEEE.std_logic_arith.
all
;
24
use
IEEE.std_logic_unsigned.
all
;
25
26
entity
decipherer
is
27
port
(
28
addrs
:
in
STD_LOGIC_VECTOR
(
7
downto
0
)
;
29
clk
:
in
STD_LOGIC
;
30
data
:
in
STD_LOGIC_VECTOR
(
7
downto
0
)
;
31
dv
:
in
STD_LOGIC
;
32
er
:
in
STD_LOGIC
;
33
reset
:
in
STD_LOGIC
;
34
arp_req_ip
:
out
STD_LOGIC_VECTOR
(
31
downto
0
)
;
35
arp_req_mac
:
out
STD_LOGIC_VECTOR
(
47
downto
0
)
;
36
arp_search_ip
:
out
STD_LOGIC_VECTOR
(
31
downto
0
)
;
37
capture_source_addrs
:
out
STD_LOGIC
;
38
crc_chk_en
:
out
STD_LOGIC
;
39
crc_chk_err
:
out
STD_LOGIC
;
40
crc_chk_init
:
out
STD_LOGIC
;
41
dest_mac
:
out
STD_LOGIC_VECTOR
(
47
downto
0
)
;
42
is_arp
:
out
STD_LOGIC
;
43
is_idle
:
out
STD_LOGIC
;
44
is_udp
:
out
STD_LOGIC
;
45
src_mac
:
out
STD_LOGIC_VECTOR
(
47
downto
0
)
;
46
udp_data_count
:
out
STD_LOGIC_VECTOR
(
10
downto
0
)
;
47
udp_data_valid
:
out
STD_LOGIC
;
48
udp_dest_ip_out
:
out
STD_LOGIC_VECTOR
(
31
downto
0
)
;
49
udp_src_ip
:
out
STD_LOGIC_VECTOR
(
31
downto
0
)
;
50
udp_src_port
:
out
STD_LOGIC_VECTOR
(
15
downto
0
)
)
;
51
end
decipherer
;
52
53
architecture
decipherer_arch
of
decipherer
is
54
55
-- diagram signals declarations
56
signal
addrs_match_sig
:
STD_LOGIC
;
57
signal
capture_source_addrs_sig
:
STD_LOGIC
;
58
signal
is_arp_sig
:
STD_LOGIC
;
59
signal
is_udp_sig
:
STD_LOGIC
;
60
signal
udp_countdown
:
STD_LOGIC_VECTOR
(
15
downto
0
)
;
61
signal
udp_data_valid_sig
:
STD_LOGIC
;
62
signal
udp_dest_ip
:
STD_LOGIC_VECTOR
(
31
downto
0
)
;
63
signal
udp_zeros
:
STD_LOGIC_VECTOR
(
10
downto
0
)
;
64
65
-- SYMBOLIC ENCODED state machine: Sreg0
66
type
Sreg0_type
is
(
67
Idle
,
RecvPacket_IP_Payload_UDP_RecvDataLoop
,
RecvPacket_Type_S29
,
RecvPacket_IP_Payload_IP_TotLength2
,
RecvPacket_IP_Payload_UDP_SourcePort1
,
68
RecvPacket_IP_Payload_IP_VersionAndHeader
,
RecvPacket_Dest_S22
,
RecvPacket_IP_Payload_IP_TotLength1
,
RecvPacket_IP_Payload_IP_ToS
,
69
RecvPacket_Dest_S11
,
RecvPacket_IP_Payload_UDP_DestPort1
,
RecvPacket_IP_Payload_IP_TTL
,
RecvPacket_IP_Payload_IP_FragmentOffset
,
70
RecvPacket_IP_Payload_IP_FlagsAndFrag
,
RecvPacket_IP_Payload_IP_ID2
,
RecvPacket_IP_Payload_IP_ID1
,
RecvPacket_Dest_S12
,
RecvPacket_Dest_S13
,
71
RecvPacket_Dest_S14
,
RecvPacket_Dest_S15
,
RecvPacket_IP_Payload_IP_SourceAddr1
,
RecvPacket_IP_Payload_IP_Checksum2
,
RecvPacket_IP_Payload_IP_Checksum1
,
72
RecvPacket_IP_Payload_IP_Protocol
,
RecvPacket_IP_Payload_IP_SourceAddr3
,
RecvPacket_IP_Payload_IP_SourceAddr2
,
RecvPacket_IP_Payload_IP_DestAddr2
,
73
RecvPacket_IP_Payload_IP_DestAddr1
,
RecvPacket_IP_Payload_IP_SourceAddr4
,
RecvPacket_IP_Payload_IP_DestAddr4
,
RecvPacket_IP_Payload_IP_DestAddr3
,
74
RecvPacket_Type_S26
,
RecvPacket_IP_Payload_UDP_DestPort2
,
RecvPacket_IP_Payload_UDP_Length1
,
RecvPacket_IP_Payload_UDP_Checksum2
,
75
RecvPacket_IP_Payload_UDP_Checksum1
,
RecvPacket_IP_Payload_UDP_Length2
,
RecvPacket_IP_Payload_UDP_SourcePort2
,
RecvPacket_Src_S42
,
76
RecvPacket_Src_S44
,
RecvPacket_Src_S45
,
RecvPacket_Src_S46
,
RecvPacket_Src_S47
,
RecvPacket_Src_S43
,
RecvPacket_Type_S1
,
RecvPacket_Type_S48
,
77
RecvPacket_Type_S49
,
RecvPacket_ARP_Payload_HType2
,
RecvPacket_ARP_Payload_HType1
,
RecvPacket_ARP_Payload_PType1
,
RecvPacket_ARP_Payload_PType2
,
78
RecvPacket_ARP_Payload_HLen
,
RecvPacket_ARP_Payload_PLen
,
RecvPacket_ARP_Payload_Op1
,
RecvPacket_ARP_Payload_SMac1
,
RecvPacket_ARP_Payload_SMac2
,
79
RecvPacket_ARP_Payload_SMac3
,
RecvPacket_ARP_Payload_SMac4
,
RecvPacket_ARP_Payload_SMac5
,
RecvPacket_ARP_Payload_SMac6
,
RecvPacket_ARP_Payload_Sip1
,
80
RecvPacket_ARP_Payload_Sip2
,
RecvPacket_ARP_Payload_Sip3
,
RecvPacket_ARP_Payload_Sip4
,
RecvPacket_ARP_Payload_TMac1
,
RecvPacket_ARP_Payload_TMac2
,
81
RecvPacket_ARP_Payload_TMac3
,
RecvPacket_ARP_Payload_TMac4
,
RecvPacket_ARP_Payload_TMac5
,
RecvPacket_ARP_Payload_TMac6
,
RecvPacket_ARP_Payload_Tip1
,
82
RecvPacket_ARP_Payload_Tip2
,
RecvPacket_ARP_Payload_Tip3
,
RecvPacket_ARP_Payload_Tip4
,
RecvPacket_ARP_Payload_Op2
,
RecvPacket_Preamble_S50
,
83
RecvPacket_Preamble_S51
,
RecvPacket_CRC_ARP_S52
,
RecvPacket_CRC_ARP_S53
,
RecvPacket_CRC_ARP_crc1
,
RecvPacket_CRC_ARP_crc2
,
RecvPacket_CRC_ARP_crc3
,
84
RecvPacket_CRC_ARP_crc4
,
RecvPacket_Preamble_S54
,
RecvPacket_CRC_IP_S55
,
RecvPacket_CRC_IP_crc6
,
RecvPacket_CRC_IP_crc7
,
RecvPacket_CRC_IP_crc8
,
85
RecvPacket_CRC_IP_crc9
,
RecvPacket_CRC_IP_S56
86
)
;
87
-- attribute enum_encoding of Sreg0_type: type is ... -- enum_encoding attribute is not supported for symbolic encoding
88
89
signal
Sreg0
:
Sreg0_type
;
90
91
begin
92
93
-- concurrent signals assignments
94
95
-- Diagram ACTION
96
is_arp
<=
is_arp_sig
;
97
is_udp
<=
is_udp_sig
;
98
udp_data_valid
<=
udp_data_valid_sig
and
addrs_match_sig
;
99
capture_source_addrs
<=
capture_source_addrs_sig
and
addrs_match_sig
;
100
udp_dest_ip_out
<=
udp_dest_ip
;
101
-- get received data size and calc number of 0 bytess to fill
102
udp_dc :
process
(clk)
103
begin
104
if
rising_edge
(
clk
)
then
105
if
reset
=
'
1
'
then
106
udp_data_count
<=
(
others
=
>
'
0
'
)
;
107
udp_zeros
<=
(
others
=
>
'
0
'
)
;
108
elsif
Sreg0
=
recvpacket_ip_payload_udp_checksum1
then
109
udp_data_count
<=
udp_countdown
(
10
downto
0
)
-
(
"000"
&
x
"08"
)
;
110
-- if number of bytes < 18 then need to add 0's (header is 8)
111
if
udp_countdown
(
10
downto
0
)
<
(
"000"
&
x
"1A"
)
then
112
udp_zeros
<=
(
"000"
&
x
"1A"
)
-
udp_countdown
(
10
downto
0
)
;
113
else
114
udp_zeros
<=
(
others
=
>
'
0
'
)
;
115
end
if
;
116
end
if
;
117
end
if
;
118
end
process
;
119
-- First 3 bytes of IP address are assumed to be C0 A8 85
120
match_proc :
process
(clk)
121
begin
122
if
rising_edge
(
clk
)
then
123
addrs_match_sig
<=
'
0
'
;
124
if
udp_dest_ip
=
(
x
"C0A885"
&
addrs
)
or
udp_dest_ip
=
x
"C0A885FE"
then
--this UDP packet was intended for this firmware. 0xFE is CAPTAN broadcast
125
addrs_match_sig
<=
'
1
'
;
126
end
if
;
127
end
if
;
128
end
process
;
129
130
----------------------------------------------------------------------
131
-- Machine: Sreg0
132
----------------------------------------------------------------------
133
Sreg0_machine:
process
(clk)
134
begin
135
if
clk
'
event
and
clk
=
'
1
'
then
136
if
reset
=
'
1
'
then
137
Sreg0
<=
Idle
;
138
-- Set default values for outputs, signals and variables
139
-- ...
140
-- **** only clear these on reset ****
141
--from ethernet frame
142
dest_mac
<=
(
others
=
>
'
0
'
)
;
143
src_mac
<=
(
others
=
>
'
0
'
)
;
144
--from arp payload
145
arp_req_mac
<=
(
others
=
>
'
0
'
)
;
146
arp_req_ip
<=
(
others
=
>
'
0
'
)
;
147
arp_search_ip
<=
(
others
=
>
'
0
'
)
;
148
--from ipv4 payload
149
udp_src_ip
<=
(
others
=
>
'
0
'
)
;
150
udp_src_port
<=
(
others
=
>
'
0
'
)
;
151
udp_dest_ip
<=
(
others
=
>
'
0
'
)
;
152
is_udp_sig
<=
'
0
'
;
153
is_arp_sig
<=
'
0
'
;
154
is_idle
<=
'
1
'
;
155
--from ipv4 payload
156
udp_data_valid_sig
<=
'
0
'
;
157
--indicates packet data on data lines
158
udp_countdown
<=
(
others
=
>
'
0
'
)
;
159
-- used to determine when udp packet data ends
160
--also used for various delay counts throughout reception
161
crc_chk_init
<=
'
0
'
;
162
crc_chk_en
<=
'
0
'
;
163
crc_chk_err
<=
'
0
'
;
164
capture_source_addrs_sig
<=
'
0
'
;
165
else
166
-- Set default values for outputs, signals and variables
167
-- ...
168
case
Sreg0
is
169
when
Idle
=
>
170
is_udp_sig
<=
'
0
'
;
171
is_arp_sig
<=
'
0
'
;
172
is_idle
<=
'
1
'
;
173
--from ipv4 payload
174
udp_data_valid_sig
<=
'
0
'
;
175
--indicates packet data on data lines
176
udp_countdown
<=
(
others
=
>
'
0
'
)
;
177
-- used to determine when udp packet data ends
178
--also used for various delay counts throughout reception
179
crc_chk_init
<=
'
0
'
;
180
crc_chk_en
<=
'
0
'
;
181
crc_chk_err
<=
'
0
'
;
182
capture_source_addrs_sig
<=
'
0
'
;
183
if
dv
=
'
1
'
and
er
=
'
0
'
then
184
Sreg0
<=
RecvPacket_Preamble_S50
;
185
is_idle
<=
'
0
'
;
186
crc_chk_init
<=
'
1
'
;
187
-- reset crc calculation
188
end
if
;
189
when
RecvPacket_IP_Payload_UDP_RecvDataLoop
=
>
190
udp_countdown
<=
udp_countdown
-
1
;
191
if
udp_countdown
=
x
"0009"
then
192
Sreg0
<=
RecvPacket_CRC_IP_S55
;
193
udp_data_valid_sig
<=
'
0
'
;
194
end
if
;
195
when
RecvPacket_IP_Payload_UDP_SourcePort1
=
>
196
Sreg0
<=
RecvPacket_IP_Payload_UDP_SourcePort2
;
197
udp_src_port
(
7
downto
0
)
<=
data
;
198
-- acquire src port to be used as destination port from CAPTAN
199
when
RecvPacket_IP_Payload_UDP_DestPort1
=
>
200
Sreg0
<=
RecvPacket_IP_Payload_UDP_DestPort2
;
201
when
RecvPacket_IP_Payload_UDP_DestPort2
=
>
202
Sreg0
<=
RecvPacket_IP_Payload_UDP_Length1
;
203
udp_countdown
(
15
downto
8
)
<=
data
;
204
when
RecvPacket_IP_Payload_UDP_Length1
=
>
205
Sreg0
<=
RecvPacket_IP_Payload_UDP_Length2
;
206
udp_countdown
(
7
downto
0
)
<=
data
;
207
when
RecvPacket_IP_Payload_UDP_Checksum2
=
>
208
if
udp_countdown
<=
x
"0009"
then
-- for the 1 byte case (or illegal case)
209
Sreg0
<=
RecvPacket_CRC_IP_S55
;
210
udp_data_valid_sig
<=
'
0
'
;
211
else
212
Sreg0
<=
RecvPacket_IP_Payload_UDP_RecvDataLoop
;
213
udp_countdown
<=
udp_countdown
-
1
;
214
end
if
;
215
when
RecvPacket_IP_Payload_UDP_Checksum1
=
>
216
Sreg0
<=
RecvPacket_IP_Payload_UDP_Checksum2
;
217
if
udp_countdown
>
9
then
218
udp_data_valid_sig
<=
'
1
'
;
219
elsif
udp_countdown
=
9
then
-- is 1 byte packet (set IP address)
220
capture_source_addrs_sig
<=
'
1
'
;
221
end
if
;
222
when
RecvPacket_IP_Payload_UDP_Length2
=
>
223
Sreg0
<=
RecvPacket_IP_Payload_UDP_Checksum1
;
224
when
RecvPacket_IP_Payload_UDP_SourcePort2
=
>
225
Sreg0
<=
RecvPacket_IP_Payload_UDP_DestPort1
;
226
when
RecvPacket_IP_Payload_IP_TotLength2
=
>
227
Sreg0
<=
RecvPacket_IP_Payload_IP_ID1
;
228
when
RecvPacket_IP_Payload_IP_VersionAndHeader
=
>
229
Sreg0
<=
RecvPacket_IP_Payload_IP_ToS
;
230
when
RecvPacket_IP_Payload_IP_TotLength1
=
>
231
Sreg0
<=
RecvPacket_IP_Payload_IP_TotLength2
;
232
when
RecvPacket_IP_Payload_IP_ToS
=
>
233
Sreg0
<=
RecvPacket_IP_Payload_IP_TotLength1
;
234
when
RecvPacket_IP_Payload_IP_TTL
=
>
235
Sreg0
<=
RecvPacket_IP_Payload_IP_Protocol
;
236
when
RecvPacket_IP_Payload_IP_FragmentOffset
=
>
237
Sreg0
<=
RecvPacket_IP_Payload_IP_TTL
;
238
when
RecvPacket_IP_Payload_IP_FlagsAndFrag
=
>
239
Sreg0
<=
RecvPacket_IP_Payload_IP_FragmentOffset
;
240
when
RecvPacket_IP_Payload_IP_ID2
=
>
241
Sreg0
<=
RecvPacket_IP_Payload_IP_FlagsAndFrag
;
242
when
RecvPacket_IP_Payload_IP_ID1
=
>
243
Sreg0
<=
RecvPacket_IP_Payload_IP_ID2
;
244
when
RecvPacket_IP_Payload_IP_SourceAddr1
=
>
245
Sreg0
<=
RecvPacket_IP_Payload_IP_SourceAddr2
;
246
udp_src_ip
(
23
downto
16
)
<=
data
;
247
when
RecvPacket_IP_Payload_IP_Checksum2
=
>
248
Sreg0
<=
RecvPacket_IP_Payload_IP_SourceAddr1
;
249
udp_src_ip
(
31
downto
24
)
<=
data
;
250
when
RecvPacket_IP_Payload_IP_Checksum1
=
>
251
Sreg0
<=
RecvPacket_IP_Payload_IP_Checksum2
;
252
when
RecvPacket_IP_Payload_IP_Protocol
=
>
253
Sreg0
<=
RecvPacket_IP_Payload_IP_Checksum1
;
254
when
RecvPacket_IP_Payload_IP_SourceAddr3
=
>
255
Sreg0
<=
RecvPacket_IP_Payload_IP_SourceAddr4
;
256
udp_src_ip
(
7
downto
0
)
<=
data
;
257
when
RecvPacket_IP_Payload_IP_SourceAddr2
=
>
258
Sreg0
<=
RecvPacket_IP_Payload_IP_SourceAddr3
;
259
udp_src_ip
(
15
downto
8
)
<=
data
;
260
when
RecvPacket_IP_Payload_IP_DestAddr2
=
>
261
Sreg0
<=
RecvPacket_IP_Payload_IP_DestAddr3
;
262
udp_dest_ip
(
15
downto
8
)
<=
data
;
263
when
RecvPacket_IP_Payload_IP_DestAddr1
=
>
264
Sreg0
<=
RecvPacket_IP_Payload_IP_DestAddr2
;
265
udp_dest_ip
(
23
downto
16
)
<=
data
;
266
when
RecvPacket_IP_Payload_IP_SourceAddr4
=
>
267
Sreg0
<=
RecvPacket_IP_Payload_IP_DestAddr1
;
268
udp_dest_ip
(
31
downto
24
)
<=
data
;
269
when
RecvPacket_IP_Payload_IP_DestAddr4
=
>
270
Sreg0
<=
RecvPacket_IP_Payload_UDP_SourcePort1
;
271
udp_src_port
(
15
downto
8
)
<=
data
;
272
-- acquire src port to be used as destination port from CAPTAN
273
when
RecvPacket_IP_Payload_IP_DestAddr3
=
>
274
Sreg0
<=
RecvPacket_IP_Payload_IP_DestAddr4
;
275
udp_dest_ip
(
7
downto
0
)
<=
data
;
276
when
RecvPacket_ARP_Payload_HType2
=
>
277
Sreg0
<=
RecvPacket_ARP_Payload_PType1
;
278
when
RecvPacket_ARP_Payload_HType1
=
>
279
Sreg0
<=
RecvPacket_ARP_Payload_HType2
;
280
when
RecvPacket_ARP_Payload_PType1
=
>
281
Sreg0
<=
RecvPacket_ARP_Payload_PType2
;
282
when
RecvPacket_ARP_Payload_PType2
=
>
283
Sreg0
<=
RecvPacket_ARP_Payload_HLen
;
284
when
RecvPacket_ARP_Payload_HLen
=
>
285
Sreg0
<=
RecvPacket_ARP_Payload_PLen
;
286
when
RecvPacket_ARP_Payload_PLen
=
>
287
Sreg0
<=
RecvPacket_ARP_Payload_Op1
;
288
when
RecvPacket_ARP_Payload_Op1
=
>
289
Sreg0
<=
RecvPacket_ARP_Payload_Op2
;
290
when
RecvPacket_ARP_Payload_SMac1
=
>
291
Sreg0
<=
RecvPacket_ARP_Payload_SMac2
;
292
arp_req_mac
(
39
downto
32
)
<=
data
;
293
when
RecvPacket_ARP_Payload_SMac2
=
>
294
Sreg0
<=
RecvPacket_ARP_Payload_SMac3
;
295
arp_req_mac
(
31
downto
24
)
<=
data
;
296
when
RecvPacket_ARP_Payload_SMac3
=
>
297
Sreg0
<=
RecvPacket_ARP_Payload_SMac4
;
298
arp_req_mac
(
23
downto
16
)
<=
data
;
299
when
RecvPacket_ARP_Payload_SMac4
=
>
300
Sreg0
<=
RecvPacket_ARP_Payload_SMac5
;
301
arp_req_mac
(
15
downto
8
)
<=
data
;
302
when
RecvPacket_ARP_Payload_SMac5
=
>
303
Sreg0
<=
RecvPacket_ARP_Payload_SMac6
;
304
arp_req_mac
(
7
downto
0
)
<=
data
;
305
when
RecvPacket_ARP_Payload_SMac6
=
>
306
Sreg0
<=
RecvPacket_ARP_Payload_Sip1
;
307
arp_req_ip
(
31
downto
24
)
<=
data
;
308
when
RecvPacket_ARP_Payload_Sip1
=
>
309
Sreg0
<=
RecvPacket_ARP_Payload_Sip2
;
310
arp_req_ip
(
23
downto
16
)
<=
data
;
311
when
RecvPacket_ARP_Payload_Sip2
=
>
312
Sreg0
<=
RecvPacket_ARP_Payload_Sip3
;
313
arp_req_ip
(
15
downto
8
)
<=
data
;
314
when
RecvPacket_ARP_Payload_Sip3
=
>
315
Sreg0
<=
RecvPacket_ARP_Payload_Sip4
;
316
arp_req_ip
(
7
downto
0
)
<=
data
;
317
when
RecvPacket_ARP_Payload_Sip4
=
>
318
Sreg0
<=
RecvPacket_ARP_Payload_TMac1
;
319
when
RecvPacket_ARP_Payload_TMac1
=
>
320
Sreg0
<=
RecvPacket_ARP_Payload_TMac2
;
321
when
RecvPacket_ARP_Payload_TMac2
=
>
322
Sreg0
<=
RecvPacket_ARP_Payload_TMac3
;
323
when
RecvPacket_ARP_Payload_TMac3
=
>
324
Sreg0
<=
RecvPacket_ARP_Payload_TMac4
;
325
when
RecvPacket_ARP_Payload_TMac4
=
>
326
Sreg0
<=
RecvPacket_ARP_Payload_TMac5
;
327
when
RecvPacket_ARP_Payload_TMac5
=
>
328
Sreg0
<=
RecvPacket_ARP_Payload_TMac6
;
329
when
RecvPacket_ARP_Payload_TMac6
=
>
330
Sreg0
<=
RecvPacket_ARP_Payload_Tip1
;
331
arp_search_ip
(
31
downto
24
)
<=
data
;
332
when
RecvPacket_ARP_Payload_Tip1
=
>
333
Sreg0
<=
RecvPacket_ARP_Payload_Tip2
;
334
arp_search_ip
(
23
downto
16
)
<=
data
;
335
when
RecvPacket_ARP_Payload_Tip2
=
>
336
Sreg0
<=
RecvPacket_ARP_Payload_Tip3
;
337
arp_search_ip
(
15
downto
8
)
<=
data
;
338
when
RecvPacket_ARP_Payload_Tip3
=
>
339
Sreg0
<=
RecvPacket_ARP_Payload_Tip4
;
340
arp_search_ip
(
7
downto
0
)
<=
data
;
341
when
RecvPacket_ARP_Payload_Tip4
=
>
342
Sreg0
<=
RecvPacket_CRC_ARP_S52
;
343
when
RecvPacket_ARP_Payload_Op2
=
>
344
Sreg0
<=
RecvPacket_ARP_Payload_SMac1
;
345
arp_req_mac
(
47
downto
40
)
<=
data
;
346
when
RecvPacket_Dest_S22
=
>
347
Sreg0
<=
RecvPacket_Dest_S11
;
348
dest_mac
(
39
downto
32
)
<=
data
;
349
when
RecvPacket_Dest_S11
=
>
350
Sreg0
<=
RecvPacket_Dest_S12
;
351
dest_mac
(
31
downto
24
)
<=
data
;
352
when
RecvPacket_Dest_S12
=
>
353
Sreg0
<=
RecvPacket_Dest_S13
;
354
dest_mac
(
23
downto
16
)
<=
data
;
355
when
RecvPacket_Dest_S13
=
>
356
Sreg0
<=
RecvPacket_Dest_S14
;
357
dest_mac
(
15
downto
8
)
<=
data
;
358
when
RecvPacket_Dest_S14
=
>
359
Sreg0
<=
RecvPacket_Dest_S15
;
360
dest_mac
(
7
downto
0
)
<=
data
;
361
when
RecvPacket_Dest_S15
=
>
362
Sreg0
<=
RecvPacket_Src_S42
;
363
src_mac
(
47
downto
40
)
<=
data
;
364
when
RecvPacket_Src_S42
=
>
365
Sreg0
<=
RecvPacket_Src_S44
;
366
src_mac
(
39
downto
32
)
<=
data
;
367
when
RecvPacket_Src_S44
=
>
368
Sreg0
<=
RecvPacket_Src_S43
;
369
src_mac
(
31
downto
24
)
<=
data
;
370
when
RecvPacket_Src_S45
=
>
371
if
data
=
x
"08"
then
372
Sreg0
<=
RecvPacket_Type_S26
;
373
else
374
Sreg0
<=
RecvPacket_Type_S48
;
375
end
if
;
376
when
RecvPacket_Src_S46
=
>
377
Sreg0
<=
RecvPacket_Src_S45
;
378
src_mac
(
7
downto
0
)
<=
data
;
379
when
RecvPacket_Src_S47
=
>
380
Sreg0
<=
RecvPacket_Src_S46
;
381
src_mac
(
15
downto
8
)
<=
data
;
382
when
RecvPacket_Src_S43
=
>
383
Sreg0
<=
RecvPacket_Src_S47
;
384
src_mac
(
23
downto
16
)
<=
data
;
385
when
RecvPacket_Type_S29
=
>
386
if
is_arp_sig
=
'
1
'
then
387
Sreg0
<=
RecvPacket_ARP_Payload_HType1
;
388
elsif
is_udp_sig
=
'
1
'
then
389
Sreg0
<=
RecvPacket_IP_Payload_IP_VersionAndHeader
;
390
else
391
Sreg0
<=
Idle
;
392
crc_chk_err
<=
'
1
'
;
393
-- this allows crc_chk to output error status
394
end
if
;
395
when
RecvPacket_Type_S26
=
>
396
if
data
=
x
"06"
then
397
Sreg0
<=
RecvPacket_Type_S49
;
398
is_arp_sig
<=
'
1
'
;
399
elsif
data
=
x
"00"
then
400
Sreg0
<=
RecvPacket_Type_S29
;
401
is_udp_sig
<=
'
1
'
;
402
end
if
;
403
when
RecvPacket_Type_S1
=
>
404
if
is_arp_sig
=
'
1
'
then
405
Sreg0
<=
RecvPacket_ARP_Payload_HType1
;
406
elsif
is_udp_sig
=
'
1
'
then
407
Sreg0
<=
RecvPacket_IP_Payload_IP_VersionAndHeader
;
408
else
409
Sreg0
<=
Idle
;
410
crc_chk_err
<=
'
1
'
;
411
-- this allows crc_chk to output error status
412
end
if
;
413
when
RecvPacket_Type_S48
=
>
414
Sreg0
<=
RecvPacket_Type_S1
;
415
when
RecvPacket_Type_S49
=
>
416
if
is_arp_sig
=
'
1
'
then
417
Sreg0
<=
RecvPacket_ARP_Payload_HType1
;
418
elsif
is_udp_sig
=
'
1
'
then
419
Sreg0
<=
RecvPacket_IP_Payload_IP_VersionAndHeader
;
420
else
421
Sreg0
<=
Idle
;
422
crc_chk_err
<=
'
1
'
;
423
-- this allows crc_chk to output error status
424
end
if
;
425
when
RecvPacket_Preamble_S50
=
>
426
udp_countdown
<=
x
"0007"
;
427
-- idle during preamble reception
428
crc_chk_init
<=
'
0
'
;
429
Sreg0
<=
RecvPacket_Preamble_S51
;
430
when
RecvPacket_Preamble_S51
=
>
431
udp_countdown
<=
udp_countdown
-
1
;
432
if
udp_countdown
=
x
"0002"
then
433
Sreg0
<=
RecvPacket_Preamble_S54
;
434
crc_chk_en
<=
'
1
'
;
435
end
if
;
436
when
RecvPacket_Preamble_S54
=
>
437
Sreg0
<=
RecvPacket_Dest_S22
;
438
dest_mac
(
47
downto
40
)
<=
data
;
439
when
RecvPacket_CRC_ARP_S52
=
>
440
udp_countdown
<=
x
"0011"
;
441
Sreg0
<=
RecvPacket_CRC_ARP_S53
;
442
when
RecvPacket_CRC_ARP_S53
=
>
443
udp_countdown
<=
udp_countdown
-
1
;
444
if
udp_countdown
=
x
"0001"
then
445
Sreg0
<=
RecvPacket_CRC_ARP_crc1
;
446
end
if
;
447
when
RecvPacket_CRC_ARP_crc1
=
>
448
Sreg0
<=
RecvPacket_CRC_ARP_crc2
;
449
when
RecvPacket_CRC_ARP_crc2
=
>
450
Sreg0
<=
RecvPacket_CRC_ARP_crc3
;
451
when
RecvPacket_CRC_ARP_crc3
=
>
452
Sreg0
<=
RecvPacket_CRC_ARP_crc4
;
453
crc_chk_en
<=
'
0
'
;
454
when
RecvPacket_CRC_ARP_crc4
=
>
455
Sreg0
<=
Idle
;
456
crc_chk_err
<=
'
1
'
;
457
-- this allows crc_chk to output error status
458
when
RecvPacket_CRC_IP_S55
=
>
459
udp_countdown
(
10
downto
0
)
<=
udp_zeros
;
460
udp_countdown
(
15
downto
11
)
<=
'
0
'
&
x
"0"
;
461
if
udp_zeros
=
(
"000"
&
x
"00"
)
then
462
Sreg0
<=
RecvPacket_CRC_IP_crc9
;
463
else
464
Sreg0
<=
RecvPacket_CRC_IP_S56
;
465
end
if
;
466
when
RecvPacket_CRC_IP_crc6
=
>
467
Sreg0
<=
Idle
;
468
crc_chk_err
<=
'
1
'
;
469
-- this allows crc_chk to output error status
470
when
RecvPacket_CRC_IP_crc7
=
>
471
Sreg0
<=
RecvPacket_CRC_IP_crc6
;
472
crc_chk_en
<=
'
0
'
;
473
when
RecvPacket_CRC_IP_crc8
=
>
474
Sreg0
<=
RecvPacket_CRC_IP_crc7
;
475
when
RecvPacket_CRC_IP_crc9
=
>
476
Sreg0
<=
RecvPacket_CRC_IP_crc8
;
477
when
RecvPacket_CRC_IP_S56
=
>
478
udp_countdown
<=
udp_countdown
-
1
;
479
if
udp_countdown
<=
x
"0001"
then
-- '<' added for size 1 case
480
Sreg0
<=
RecvPacket_CRC_IP_crc9
;
481
end
if
;
482
--vhdl_cover_off
483
when
others
=
>
484
null
;
485
--vhdl_cover_on
486
end
case
;
487
end
if
;
488
end
if
;
489
end
process
;
490
491
end
decipherer_arch
;
decipherer
Definition:
decipherer.vhd:26
src
firmware
g-2
KickerControllerFirmware
GEL_CAPTAN
decipherer.vhd
Generated on Wed Oct 2 2019 09:53:12 for otsdaq_prepmodernization by
1.8.5