otsdaq_prepmodernization  v2_05_00
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;