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

Subversion Repositories gigabit_udp_mac

[/] [gigabit_udp_mac/] [trunk/] [LAN/] [UDP_KED/] [ARP_Lookup_table.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 boa_a_m
--****************************************************************************************
2
library IEEE;
3
use IEEE.STD_LOGIC_1164.all;
4
use IEEE.NUMERIC_STD.all;
5
use IEEE.std_logic_unsigned.all;
6
 
7
library work;
8
use work.signal_Package.all;
9
 
10
entity ARP_Lookup_table is
11
generic (
12
                        g_TIME_OUT_LOOKUP_TABLE_ARP                     : std_logic_vector(31 downto 0):= x"9502F900" --20S                                                                                              
13
                        );
14
port (
15
    -- system signals
16
    i_rx_clk              : in  std_logic;
17
    i_tx_clk              : in  std_logic;
18
    i_reset               : in  std_logic;
19
 
20
         -- Data in
21
         i_mac_addr_in         : in  std_logic_vector(47 downto 0);
22
         i_ip_addr_in          : in  std_logic_vector(31 downto 0);
23
         i_addr_valid_in       : in  std_logic;
24
 
25
         i_request_in          : in  std_logic;
26
         i_reqly_in            : in  std_logic;
27
         i_trans_data_in       : in  std_logic;
28
 
29
         -- Data out
30
         o_mac_addr_out        : out  std_logic_vector(47 downto 0);
31
         o_ip_addr_out         : out  std_logic_vector(31 downto 0);
32
         o_addr_valid_out      : out  std_logic;
33
         o_request_out         : out  std_logic;
34
         o_reply_out           : out  std_logic
35
 
36
         );
37
end ARP_Lookup_table;
38
 
39
architecture Behavioral of ARP_Lookup_table is
40
--================================= Constant ===========================================================
41
--Generate Block Conditional Constants
42
constant c_GENERATE_PING_MODULE             : boolean  := true;                                  --if Ping Block is not Used,Value is False
43
constant c_GENERATE_ARP_MODULE              : boolean  := true;                                  --if ARP  Block is not Used,Value is False
44
constant c_DEFAULT_DST_MAC_ADDR             : std_logic_vector (47 downto 0) := x"F46D04962225"; --if ARP Block is not Used,Copy PC MAC Address to This Value    
45
 
46
 
47
--Application Layer Data Length
48
constant c_PACKET_LENGTH                    : std_logic_vector (15 downto 0):= x"05c0";          --1472 (Maximum Application Layer Packet Length)
49
constant c_udp_tx_src_ip                    : std_logic_vector (31 downto 0):= x"C0A86403";      --192.168.100.3(FPGA IP Adress)
50
constant c_udp_tx_dst_ip                    : std_logic_vector (31 downto 0):= x"C0A86402";      --192.168.100.2(PC IP Address)
51
constant c_udp_tx_protocol                  : std_logic_vector (7 downto 0) := x"11";            --UDP Protocol
52
constant c_udp_tx_src_mac                   : std_logic_vector (47 downto 0):= x"112233445566";  --FPGA MAC Address
53
constant c_udp_tx_checksum                  : std_logic_vector (15 downto 0):= x"0000";          --UDP Checksum(Value For This Constant is not Importanat)
54
constant c_udp_tx_src_port                  : std_logic_vector (15 downto 0):= x"0401";          --UDP Src Port(Value For This Constant is not Importanat)
55
constant c_udp_tx_dst_port                  : std_logic_vector (15 downto 0):= x"0FF5";          --UDP Dst Port(Value For This Constant is not Importanat)
56
 
57
 
58
--ARP Constants
59
constant c_TIME_OUT_LOOKUP_TABLE_ARP        : std_logic_vector (31 downto 0) := x"9502F900";     --20S(Value/125MHz = 20 )       
60
constant c_TIME_OUT_WAIT_FOR_ARP_REPLY      : std_logic_vector (31 downto 0) := x"07735940";     --1S    (Value/125MHz = 1 )     
61
constant c_RE_SEND_ARP_REQUEST              : std_logic_vector (3 downto 0)  := x"A";            --10    
62
 
63
 
64
--IP Constants
65
constant c_IP_TTL                           : std_logic_vector (7 downto 0)  := x"80";           -- IP Packet Time to live
66
constant c_IP_BC_ADDR                       : std_logic_vector (31 downto 0) := x"ffffffff";     -- Broadcast IP  Address
67
constant c_MAC_BC_ADDR                      : std_logic_vector (47 downto 0) := x"ffffffffffff"; -- Broadcast MAC Address
68
--======================================================================================================
69
 
70
 
71
 
72
 
73
--============================= Top Signals ============================================================
74
 
75
--signal   s_udp_tx_data_len      : std_logic_vector (15 downto 0):= c_PACKET_LENGTH;  --1472 (Maximum Application Layer Packet Length)
76
--signal        s_udp_tx_start         : std_logic:='0';
77
--signal        s_udp_tx_ready         : std_logic;
78
--signal   s_udp_tx_din          : std_logic_vector (7 downto 0);
79
--
80
--signal        s_udp_rx_dout          : std_logic_vector(7 downto 0);
81
--signal        s_udp_rx_dout_rdy      : std_logic;
82
--signal        s_udp_rx_dout_last     : std_logic;
83
--      
84
--signal        s_udp_rx_src_ip        : std_logic_vector(31 downto 0);
85
--signal   s_udp_rx_src_port      : std_logic_vector(15 downto 0);
86
--signal   s_udp_rx_dst_port      : std_logic_vector(15 downto 0);
87
--signal   s_udp_rx_data_len      : std_logic_vector(15 downto 0);      
88
--signal        s_udp_rx_err_out_top          : std_logic_vector(3 downto 0);
89
--signal        s_udp_tx_err_out_top       : std_logic_vector(3 downto 0);
90
--signal        s_arp_rx_err_out_top   : std_logic_vector(3 downto 0);
91
--signal   s_ip_rx_dst_ip_top         : std_logic_vector(31 downto 0);
92
--signal   s_ip_rx_err_out_top        : std_logic_vector (3 downto 0);
93
--signal   s_ip_tx_err_out_top        : std_logic_vector (3 downto 0);
94
--
95
--
96
--signal   s_rx_clk_out           : std_logic;
97
--signal   s_buff_rx_clk_out      : std_logic;
98
--signal   s_tx_clk_out           : std_logic;
99
--signal   s_buff_tx_clk_out      : std_logic;
100
--signal   s_clk_125              : std_logic;
101
--signal   s_clk_100              : std_logic;
102
--signal   s_clk_m                : std_logic;
103
--
104
----chip scope
105
--signal   s_control              : std_logic_vector (35 downto 0);
106
--signal   s_data_log             : std_logic_vector (15 downto 0);
107
--
108
--
109
----for transmit data
110
--signal   s_data_test_val        : std_logic:='0';
111
--signal   s_data_test_last       : std_logic:='0';
112
--signal   s_data_test            : std_logic_vector (7 downto 0):=(others=>'0');
113
--signal   s_cnt2                 : std_logic_vector (15 downto 0):=(others=>'0');
114
--signal   s_global_reset         : std_logic:='1';
115
--
116
--
117
--
118
--signal   s_gmii_txd           : std_logic_vector(7 downto 0);
119
--signal   s_gmii_tx_en         : std_logic;
120
--signal   s_gmii_tx_er         : std_logic;
121
--======================================================================================================
122
 
123
 
124
 
125
 
126
 
127
 
128
--===================== Reset_gen Signals ==============================================================
129
signal   s_cnt_rst     : std_logic_vector(15 downto 0):=(others=>'0');
130
--======================================================================================================
131
 
132
 
133
 
134
 
135
 
136
 
137
--================================ Ethernet 1g Signals =================================================
138
signal   s_gtx_clk                :  std_logic;
139
signal   s_tx_clk                 :  std_logic;
140
signal   s_rx_clk                 :  std_logic;
141
signal   s_rstn                   :  std_logic;
142
signal   s_rx_reset             :  std_logic;
143
signal   s_tx_reset             :  std_logic;
144
 
145
 
146
--mac to gmii_if signals
147
signal   s_mac_gmii_rxd           :  std_logic_vector(7 downto 0);
148
signal   s_mac_gmii_rx_dv         :  std_logic;
149
signal   s_mac_gmii_rx_er         :  std_logic;
150
 
151
signal   s_mac_gmii_txd           :  std_logic_vector(7 downto 0);
152
signal   s_mac_gmii_tx_en         :  std_logic;
153
signal   s_mac_gmii_tx_er         :  std_logic;
154
 
155
 
156
 
157
--ip to mac signals
158
signal   s_mac_tx_tready        :  std_logic;
159
signal  s_mac_tx_tdata         :  std_logic_vector(7 downto 0);
160
signal   s_mac_tx_tvalid        :  std_logic;
161
signal   s_mac_tx_tlast         :  std_logic;
162
 
163
signal   s_mac_rx_tdata         :  std_logic_vector(7 downto 0);
164
signal   s_mac_rx_tvalid        :  std_logic;
165
signal   s_mac_rx_tlast         :  std_logic;
166
--======================================================================================================
167
 
168
 
169
 
170
 
171
 
172
 
173
 
174
 
175
 
176
 
177
--================================ UDP Signals =========================================================
178
    -------- for transfer Rx data from IP to UDP layer----------------
179
        signal s_ip_rx_dout           :  std_logic_vector(7 downto 0);
180
        signal s_ip_rx_dout_rdy       :  std_logic;
181
        signal s_ip_rx_dout_last      :  std_logic;
182
 
183
        -------- for transfer Rx status data from IP to UDP layer---------
184
        signal s_ip_rx_src_ip         :  std_logic_vector(31 downto 0);
185
    signal s_ip_rx_dst_ip         :  std_logic_vector(31 downto 0);
186
    signal s_ip_rx_data_len       :  std_logic_vector(15 downto 0);
187
    signal s_ip_rx_protocol       :  std_logic_vector(7 downto 0);
188
    signal s_ip_rx_broadcast      :  std_logic;
189
    signal s_ip_rx_err_out_udp        :  std_logic_vector (3 downto 0);
190
    signal s_ip_tx_err_out_udp        :  std_logic_vector (3 downto 0);
191
    signal s_arp_rx_err_out_udp       :  std_logic_vector (3 downto 0);
192
 
193
        -------- for transfer Tx data from UDP to IP layer---------------
194
        signal s_ip_tx_start          :  std_logic;
195
        signal s_ip_tx_rdy            :  std_logic;
196
        signal s_ip_tx_din                :  std_logic_vector(7 downto 0);
197
 
198
        -------- for transfer Tx header data from UDP to IP layer--------
199
        signal s_ip_tx_src_ip         :  std_logic_vector(31 downto 0);
200
        signal s_ip_tx_dst_ip         :  std_logic_vector(31 downto 0);
201
        signal s_ip_tx_src_mac        :  std_logic_vector(47 downto 0);
202
        signal s_ip_tx_data_len       :  std_logic_vector(15 downto 0);
203
        signal s_ip_tx_protocol       :  std_logic_vector(7 downto 0);
204
        -----------------------------------------------------------------
205
--======================================================================================================
206
 
207
 
208
 
209
 
210
 
211
 
212
 
213
 
214
 
215
 
216
--============================= IP Signals =============================================================
217
  signal s_ip_mac_tx_tvalid    : std_logic;
218
  signal s_ip_mac_tx_tlast     : std_logic;
219
  signal s_ip_mac_tx_tdata     : std_logic_vector(7 downto 0);
220
  signal s_ip_mac_tx_req       : std_logic;
221
  signal s_ip_mac_tx_granted   : std_logic;
222
 
223
  signal s_arp_mac_tx_tvalid   : std_logic;
224
  signal s_arp_mac_tx_tlast    : std_logic;
225
  signal s_arp_mac_tx_tdata    : std_logic_vector(7 downto 0);
226
  signal s_arp_mac_tx_req      : std_logic;
227
  signal s_arp_mac_tx_granted  : std_logic;
228
 
229
  signal s_ping_mac_tx_tvalid   : std_logic;
230
  signal s_ping_mac_tx_tlast    : std_logic;
231
  signal s_ping_mac_tx_tdata    : std_logic_vector(7 downto 0);
232
  signal s_ping_mac_tx_req      : std_logic;
233
  signal s_ping_mac_tx_granted  : std_logic;
234
 
235
  signal s_lookup_req          : std_logic;
236
  signal s_lookup_ip           : std_logic_vector(31 downto 0);
237
  signal s_lookup_mac_addr     : std_logic_vector(47 downto 0);
238
  signal s_lookup_mac_got      : std_logic;
239
  signal s_lookup_mac_err      : std_logic;
240
 
241
 
242
 
243
  signal s_no_ping_packet      : std_logic;
244
  signal s_ip_rx_err_out            : std_logic_vector(3 downto 0);
245
  --======================================================================================================
246
 
247
 
248
 
249
 
250
 
251
 
252
 
253
 
254
 
255
 
256
 
257
 
258
  --============================= IP4_TX Signals ==========================================================
259
  type t_tx_ip_state_type   is (IDLE,WAIT_MAC_ADDR,WAIT_CHN,SEND_DATA);
260
  type t_crc_state_type  is (IDLE, TOT_LEN, ID, FLAGS, TTL, CKS, SAH, SAL, DAH, DAL, ADDOVF, FINAL, WAIT_END);
261
  signal st_crc_state     : t_crc_state_type:=IDLE;
262
  signal s_tx_hdr_cks    : std_logic_vector (23 downto 0):=(others=>'0');
263
  signal s_cal_cheksum   : std_logic:='0';
264
 
265
 
266
  signal st_tx_ip_state      : t_tx_ip_state_type:=IDLE;
267
  signal s_cnt_ip_tx      : std_logic_vector (15 downto 0):=(others=>'0');
268
  signal s_dst_mac_addr  : std_logic_vector (47 downto 0); -- arp block updats this signal
269
  signal s_total_length  : std_logic_vector (15 downto 0); -- s_total_length is i_data_length+20(ip header) 
270
 
271
  signal s_ip_header     : std_logic_vector (7 downto 0):=(others=>'0');
272
  --========================================================================================================
273
 
274
 
275
 
276
 
277
 
278
 
279
 
280
 
281
 
282
 
283
  --============================ IP4_RX  Signals============================================================
284
  type t_rx_ip_state_type is (IDLE,ETH_H,IP_H,USER_DATA,WAIT_END);
285
  signal st_RX_IP_STATE         : t_rx_ip_state_type:=IDLE;
286
  signal s_cnt_ip_rx         : std_logic_vector (15 downto 0):=x"0001";
287
 
288
  signal s_src_ip_ip_rx         : std_logic_vector (31 downto 0):=(others=>'0');
289
  signal s_dst_ip_ip_rx         : std_logic_vector (31 downto 0):=(others=>'0');
290
  signal s_data_len_ip_rx       : std_logic_vector (15 downto 0):=(others=>'0');
291
  signal s_protocol_ip_rx       : std_logic_vector (7 downto 0) :=(others=>'0');
292
  signal s_broadcast_ip_rx      : std_logic;
293
  --========================================================================================================
294
 
295
 
296
 
297
 
298
 
299
 
300
 
301
 
302
 
303
 
304
 
305
--==================================== ARP Signals ==========================================================
306
type         t_arp_state_type is     (IDLE,LOOK_UP,WAIT_PC_REPLY);
307
signal       st_ARP_STATE             : t_arp_state_type:=IDLE;
308
signal       s_timeout_wait_reply_cnt           : std_logic_vector(31 downto 0):=(others=>'0');
309
signal       s_error_cnt             : std_logic_vector(3 downto 0):=(others=>'0');
310
 
311
--ARP_TX Signals
312
signal       s_dst_ip_addr_pc      : std_logic_vector(31 downto 0):=(others=>'0');
313
signal       s_dst_mac_addr_pc     : std_logic_vector(47 downto 0):=(others=>'0');
314
signal       s_dst_ip_addr_lookup  : std_logic_vector(31 downto 0):=(others=>'0');
315
signal       s_fpga_req_tx         : std_logic:='0';
316
signal       s_pc_req_tx           : std_logic:='0';
317
 
318
 
319
--ARP_RX Signals
320
signal       s_ip_addr0            : std_logic_vector(31 downto 0);
321
signal       s_mac_addr0           : std_logic_vector(47 downto 0);
322
signal       s_addr_valid0         : std_logic;
323
signal       s_pc_reply_rx         : std_logic;
324
signal       s_pc_req_rx           : std_logic;
325
--===========================================================================================================
326
 
327
 
328
 
329
 
330
 
331
 
332
 
333
 
334
 
335
 
336
 
337
--=============================== ARP RX Signals ============================================================
338
type t_rx_arp_state_type is       (IDLE,ETH_H,ARP_DATA,WAIT_END);
339
signal st_RX_ARP_STATE             : t_rx_arp_state_type:=IDLE;
340
signal s_cnt_arp_rx             : std_logic_vector (15 downto 0):=x"0001";
341
 
342
 
343
signal s_dst_ip            : std_logic_vector (31 downto 0):=(others=>'0');
344
signal s_operation         : std_logic_vector (15 downto 0):=(others=>'0');
345
signal s_addr_valid        : std_logic:='0';
346
signal s_pc_req            : std_logic:='0';
347
signal s_pc_reply          : std_logic:='0';
348
 
349
 
350
signal s_src_mac_arp_rx            : std_logic_vector (47 downto 0):=(others=>'0');
351
signal s_src_ip_arp_rx             : std_logic_vector (31 downto 0):=(others=>'0');
352
signal s_addr_valid_pulse   : std_logic:='0';
353
signal s_pc_req_pulse       : std_logic:='0';
354
signal s_pc_reply_pulse     : std_logic:='0';
355
signal s_trans_data_pulse   : std_logic:='0';
356
--===========================================================================================================
357
 
358
 
359
 
360
 
361
 
362
 
363
 
364
 
365
 
366
 
367
 
368
 
369
--=================================== ARP LOOKUP_TABLE Signals ==============================================
370
signal   s_timeout_lookup_table_cnt        : std_logic_vector(31 downto 0):=(others=>'0');
371
 
372
signal   s_din              : std_logic_vector(82 downto 0):=(others=>'0');
373
signal   s_wr_en            : std_logic;
374
signal   s_dout             : std_logic_vector(82 downto 0):=(others=>'0');
375
signal   s_valid            : std_logic;
376
signal   s_empty              : std_logic;
377
signal   s_notempty           : std_logic;
378
 
379
 
380
signal   s_mac_addr_out     : std_logic_vector(47 downto 0):=(others=>'0');
381
signal   s_ip_addr_out      : std_logic_vector(31 downto 0):=(others=>'0');
382
signal   s_addr_valid_out   : std_logic:='0';
383
signal   s_request_out      : std_logic:='0';
384
signal   s_reply_out        : std_logic:='0';
385
--============================================================================================================
386
 
387
 
388
 
389
 
390
 
391
 
392
 
393
 
394
 
395
 
396
 
397
--============================ ARP TX Signals ================================================================
398
type t_arp_tx_state_type   is (IDLE,WAIT_CHN,SEND_DATA);
399
signal st_tx_arp_state          : t_arp_tx_state_type:=IDLE;
400
signal s_cnt_arp_tx          : std_logic_vector (7 downto 0):=(others=>'0');
401
signal s_arp_type          : std_logic_vector (15 downto 0):=(others=>'0');
402
signal s_dst_ip_addr     : std_logic_vector (31 downto 0):=(others=>'0');
403
signal s_dst_mac_addr1   : std_logic_vector (47 downto 0):=(others=>'0');
404
signal s_dst_mac_addr2   : std_logic_vector (47 downto 0):=(others=>'0');
405
--============================================================================================================
406
 
407
 
408
 
409
 
410
 
411
 
412
 
413
 
414
 
415
 
416
 
417
 
418
--============================== PING Signals =================================================================
419
--for Delayed Inputs
420
signal   s_mac_data_in_r        : std_logic_vector (7 downto 0);
421
signal   s_mac_data_in_valid_r  : std_logic;
422
signal   s_mac_data_in_last_r   : std_logic;
423
 
424
 
425
--Sync_fifo_ping Signals
426
signal   s_ip_rx_in          : std_logic_vector(14 downto 0);
427
signal   s_ip_rx_out         : std_logic_vector(14 downto 0):=(others=>'0');
428
signal   s_mac_data_in          : std_logic_vector(7 downto 0);
429
signal   s_mac_data_in_valid  : std_logic;
430
signal   s_mac_data_in_last   : std_logic;
431
signal   s_mac_data_in_last_d : std_logic;
432
signal   s_ip_rx_err_in       : std_logic_vector(3 downto 0);
433
signal   s_no_ping_data     : std_logic;
434
signal   s_empty_sync_fifo    : std_logic:='0';
435
signal   s_not_empty_sync_fifo: std_logic;
436
 
437
 
438
--Data_fifo_ping Signals
439
signal   s_rst_fifo_ping     : std_logic:='1';
440
signal   s_wr_en_fifo_ping   : std_logic:='0';
441
signal   s_din_fifo_ping     : std_logic_vector(7 downto 0):=(others=>'0');
442
signal   s_rd_en_fifo_ping   : std_logic;
443
signal   s_dout_fifo_ping    : std_logic_vector(7 downto 0);
444
 
445
 
446
--Checksum Signals
447
signal   s_checksum_data_out   : std_logic_vector(15 downto 0);
448
signal   s_checksum_data_in    : std_logic_vector(7 downto 0);
449
signal   s_checksum_start_calc : std_logic:='0';
450
signal   s_checksum_stop_calc  : std_logic:='0';
451
 
452
 
453
--st_PING_STATE Machine Process Signals 
454
type     t_ping_state            is (IDLE,ACQUIRE_DATA,WAIT_END,WAIT_CHN,SEND_DATA);
455
signal   st_PING_STATE               : t_ping_state:=IDLE;
456
signal   s_wr_cnt              : std_logic_vector(7 downto 0):=(others=>'0');
457
signal   s_rd_cnt              : std_logic_vector(7 downto 0):=(others=>'0');
458
signal   s_start_send          : std_logic;
459
 
460
 
461
signal   s_src_mac_ping           : std_logic_vector(47 downto 0):=(others=>'0');
462
signal   s_dst_mac_ping           : std_logic_vector(47 downto 0):=(others=>'0');
463
signal   s_src_ip_ping            : std_logic_vector(31 downto 0):=(others=>'0');
464
signal   s_dst_ip_ping            : std_logic_vector(31 downto 0):=(others=>'0');
465
--=================================================================================================================
466
 
467
 
468
 
469
 
470
 
471
 
472
 
473
 
474
 
475
 
476
 
477
 
478
--================================= Ping Checksum Calc Signals ====================================================
479
type        t_checksum_state   is   (IDLE,CALC);
480
signal      st_checksum_state      : t_checksum_state:=IDLE;
481
 
482
signal      s_flag       : std_logic:='0';
483
signal      s_din_r      : std_logic_vector(7 downto 0);
484
signal      s_sum        : std_logic_vector(31 downto 0):=(others=>'0');
485
--=================================================================================================================
486
 
487
 
488
 
489
 
490
 
491
 
492
 
493
 
494
 
495
 
496
 
497
--============================ TX_Arbitior Signals =====================================================================
498
type   t_state_type is       (IDLE,DATA_REQ,ARP_REQ,PING_REQ);
499
signal st_STATE               : t_state_type:=IDLE;
500
--======================================================================================================================
501
 
502
 
503
 
504
 
505
 
506
 
507
 
508
 
509
 
510
 
511
 
512
 
513
--============================ UDP RX Signals ===========================================================================
514
  type t_rx_udp_state_type is  (IDLE, UDP_HDR, USER_DATA, WAIT_END);
515
  signal st_RX_UDP_STATE         : t_rx_udp_state_type:=IDLE;
516
  signal s_cnt_udp_rx         : std_logic_vector (15 downto 0):=x"0001";
517
 
518
  signal s_src_ip_udp_rx  : std_logic_vector (31 downto 0):=(others=>'0');
519
  signal s_src_port       : std_logic_vector (15 downto 0):=(others=>'0');
520
  signal s_dst_port       : std_logic_vector (15 downto 0):=(others=>'0');
521
  signal s_data_len_udp_rx       : std_logic_vector (15 downto 0):=(others=>'0');
522
  signal s_err_out        : std_logic_vector (3 downto 0) :=(others=>'0');
523
 --======================================================================================================================= 
524
 
525
 
526
 
527
 
528
 
529
 
530
 
531
 
532
 
533
 
534
 
535
 --============================ UDP TX Signals =============================================================================
536
  type t_tx_udp_state_type     is (IDLE,SEND_DATA);
537
  signal st_tx_udp_state        : t_tx_udp_state_type:=IDLE;
538
 
539
  signal s_cnt_udp_tx        : std_logic_vector (15 downto 0):=(others=>'0');
540
  signal s_ip_data_len   : std_logic_vector (15 downto 0);
541
  signal s_udp_header      : std_logic_vector (7 downto 0):=(others=>'0');
542
--==========================================================================================================================
543
 
544
 
545
 
546
 
547
 
548
 
549
 
550
 
551
 
552
 
553
 
554
--============================ PHY_Interface Signals =======================================================================
555
signal s_gmii_col_reg         : std_logic;
556
signal s_gmii_col_reg_reg     : std_logic;
557
signal s_gmii_rx_clk          : std_logic;
558
--==========================================================================================================================
559
 
560
 
561
 
562
 
563
 
564
 
565
 
566
 
567
 
568
 
569
 
570
--=========================== Ping_Pong Fifo Signals =======================================================================
571
signal s_empty1              : std_logic;
572
signal s_empty2              : std_logic;
573
signal s_notempty1           : std_logic;
574
signal s_notempty2           : std_logic;
575
 
576
 
577
signal s_data_m              : std_logic_vector(7 downto 0);
578
signal s_valid_m             : std_logic;
579
signal s_last_m              : std_logic;
580
 
581
 
582
signal s_wr_en_a             : std_logic:='0';
583
signal s_din_a               : std_logic_vector(7 downto 0):=(others=>'0');
584
signal s_rd_en_a             : std_logic;
585
signal s_dout_a              : std_logic_vector(7 downto 0);
586
signal s_valid_a             : std_logic;
587
signal s_empty_a             : std_logic;
588
 
589
signal s_wr_en_b             : std_logic:='0';
590
signal s_din_b               : std_logic_vector(7 downto 0):=(others=>'0');
591
signal s_rd_en_b             : std_logic;
592
signal s_dout_b              : std_logic_vector(7 downto 0);
593
signal s_valid_b             : std_logic;
594
signal s_empty_b             : std_logic;
595
 
596
 
597
signal s_cnt_a               : std_logic_vector(15 downto 0):=(others=>'0');
598
signal s_cnt_b               : std_logic_vector(15 downto 0):=(others=>'0');
599
signal s_rd_cnt_a            : std_logic_vector(15 downto 0):=(others=>'0');
600
signal s_rd_cnt_b            : std_logic_vector(15 downto 0):=(others=>'0');
601
 
602
signal s_busy_a              : std_logic:='0';
603
signal s_busy_b              : std_logic:='0';
604
 
605
signal s_last_a              : std_logic:='0';
606
signal s_last_b              : std_logic:='0';
607
 
608
signal s_dout_len          : std_logic_vector(15 downto 0);
609
 
610
type        t_pingpong_state     is (wait_data,rd_fifo_a,rd_fifo_b);
611
signal      st_ping_pong_state          : t_pingpong_state:=wait_data;
612
--========================================================================================================================= 
613
 
614
--=========Sync Fifo for Convert RX_CLK Domain Signals to TX_CLK Domain Signals===============
615
component  arp_sync_fifo
616
port
617
(
618
    rst         : IN    STD_LOGIC;
619
    wr_clk      : IN    STD_LOGIC;
620
         wr_en       : IN       STD_LOGIC;
621
    din         : IN    STD_LOGIC_VECTOR(82 DOWNTO 0);
622
         rd_clk      : IN       STD_LOGIC;
623
    rd_en       : IN    STD_LOGIC;
624
    dout        : OUT   STD_LOGIC_VECTOR(82 DOWNTO 0);
625
         valid       : OUT      STD_LOGIC;
626
    full        : OUT   STD_LOGIC;
627
    empty       : OUT   STD_LOGIC
628
 
629
);
630
end component;
631
--============================================================================================
632
 
633
begin
634
 
635
s_notempty        <= not(s_empty);
636
s_din             <= (i_reqly_in & i_request_in & i_addr_valid_in & i_ip_addr_in & i_mac_addr_in);
637
 
638
s_mac_addr_out    <= s_dout(47 downto 0);
639
s_ip_addr_out     <= s_dout(79 downto 48);
640
s_addr_valid_out  <= s_dout(80);
641
s_request_out     <= s_dout(81);
642
s_reply_out       <= s_dout(82);
643
 
644
--================== Process for Update and Timeout Arp Lookup Table ============================
645
p_update_arp_lookup:process(i_tx_clk)
646
begin
647
if rising_edge(i_tx_clk) then
648
   if (i_reset = '1' ) then
649
            s_timeout_lookup_table_cnt          <= (others=>'0');
650
       o_addr_valid_out                                         <= '0';
651
        else
652
       s_timeout_lookup_table_cnt               <= s_timeout_lookup_table_cnt+1;
653
       if (s_valid = '1') then
654
                     s_timeout_lookup_table_cnt  <= (others=>'0');
655
                          o_addr_valid_out                              <= s_addr_valid_out;
656
                          o_mac_addr_out                                <= s_mac_addr_out;
657
                          o_ip_addr_out                                 <= s_ip_addr_out;
658
                 elsif (s_timeout_lookup_table_cnt = g_TIME_OUT_LOOKUP_TABLE_ARP) then  --20s time out
659
                     s_timeout_lookup_table_cnt  <= (others=>'0');
660
                          o_addr_valid_out                              <= '0';
661
                 end if;
662
   end if;
663
end if;
664
end process p_update_arp_lookup;
665
--===============================================================================================
666
 
667
--==================== Process for deliver ARP Requests to ARP_RX Module ========================
668
p_Synchronous:process(i_tx_clk)
669
begin
670
if rising_edge(i_tx_clk) then
671
   if (i_reset = '1' ) then
672
            o_request_out                                       <= '0';
673
            o_reply_out                                         <= '0';
674
        else
675
       o_request_out                                            <= '0';
676
            o_reply_out                                         <= '0';
677
       if (s_valid = '1') then
678
                      o_request_out                                     <=s_request_out;
679
                      o_reply_out                                       <=s_reply_out;
680
                 end if;
681
   end if;
682
end if;
683
end process p_Synchronous;
684
--===============================================================================================
685
 
686
--=========Sync Fifo for Convert RX_CLK Domain Signals to TX_CLK Domain Signals =================
687
inst_arp_sync_fifo1:arp_sync_fifo
688
port map
689
(
690
    rst         => i_reset,
691
    wr_clk      => i_rx_clk,
692
         wr_en       => i_trans_data_in,
693
    din         => s_din,
694
         rd_clk      => i_tx_clk,
695
    rd_en       => s_notempty,
696
    dout        => s_dout,
697
         valid       => s_valid,
698
    full        => open,
699
    empty       => s_empty
700
);
701
--===============================================================================================
702
 
703
end Behavioral;

powered by: WebSVN 2.1.0

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