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.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 is
11
generic (
12
                        g_TIME_OUT_LOOKUP_TABLE_ARP                     : std_logic_vector(31 downto 0):= x"9502F900"; --20S                                                                                             
13
                        g_TIME_OUT_WAIT_FOR_ARP_REPLY                   : std_logic_vector(31 downto 0):= x"07735940";  --1S                                                                                             
14
                        g_RE_SEND_ARP_REQUEST                         : std_logic_vector(3 downto 0):= x"A"  --10                                                                                                
15
                        );
16
port(
17
    -- system signals
18
    i_rx_clk               : in   std_logic;
19
    i_tx_clk               : in   std_logic;
20
    i_reset                : in   std_logic;
21
 
22
         --for ARP Data
23
         i_our_ip_addr          : in   std_logic_vector (31 downto 0);
24
         i_our_mac_addr         : in   std_logic_vector (47 downto 0);
25
 
26
         -- to/from IP Layer
27
         i_fpga_req             : in   std_logic;
28
         i_lookup_ip            : in   std_logic_vector (31 downto 0);
29
         o_lookup_mac_addr      : out  std_logic_vector (47 downto 0);
30
         o_lookup_mac_got       : out  std_logic;
31
         o_lookup_mac_err       : out  std_logic;
32
 
33
 
34
         --ARP_RX Input
35
    i_mac_data_in        : in  std_logic_vector (7 downto 0);
36
    i_mac_data_in_valid  : in  std_logic;
37
    i_mac_data_in_last   : in  std_logic;
38
 
39
 
40
         --ARP_TX Input/Output
41
         o_mac_tx_req         : out std_logic;
42
    i_mac_tx_granted     : in  std_logic;
43
    i_mac_tready         : in  std_logic;
44
    o_mac_tvalid         : out std_logic;
45
    o_mac_tlast          : out std_logic;
46
    o_mac_tdata          : out std_logic_vector (7 downto 0);
47
 
48
         -- Error Out
49
         o_arp_rx_err_out     : out std_logic_vector (3 downto 0)
50
 
51
 
52
);
53
end ARP;
54
 
55
architecture Behavioral of ARP is
56
 
57
 
58
 
59
 
60
 
61
 
62
--=========================== ARP_RX ====================================================
63
component ARP_RX is
64
generic (
65
                        g_TIME_OUT_LOOKUP_TABLE_ARP                     : std_logic_vector(31 downto 0):= x"9502F900" --20S                                                                                              
66
                        );
67
  port (
68
 
69
    -- system signals
70
    i_rx_clk             : in  std_logic;
71
    i_tx_clk             : in  std_logic;
72
    i_reset              : in  std_logic;
73
    i_our_ip_addr        : in  std_logic_vector (31 downto 0);
74
 
75
        -- MAC layer RX inputs
76
    i_mac_data_in        : in  std_logic_vector (7 downto 0);
77
    i_mac_data_in_valid  : in  std_logic;
78
    i_mac_data_in_last   : in  std_logic;
79
 
80
        -- Outputs to ARP 
81
        o_ip_addr0            : out std_logic_vector(31 downto 0);
82
        o_mac_addr0           : out std_logic_vector(47 downto 0);
83
        o_addr_valid0         : out std_logic;
84
        o_pc_reply            : out std_logic;
85
        o_pc_req              : out std_logic;
86
 
87
        -- Error Out
88
        o_arp_rx_err_out      : out std_logic_vector (3 downto 0)
89
    );
90
end component;
91
--========================================================================================
92
 
93
 
94
 
95
 
96
 
97
 
98
 
99
 
100
 
101
 
102
 
103
 
104
--================================= ARP_TX ================================================
105
component ARP_TX is
106
  port (
107
    i_tx_clk              : in  std_logic;
108
    i_reset               : in  std_logic;
109
 
110
   --for ARP Data
111
        i_our_ip_addr          : in  std_logic_vector (31 downto 0);
112
        i_our_mac_addr         : in  std_logic_vector (47 downto 0);
113
        i_dst_ip_addr_pc       : in  std_logic_vector (31 downto 0);
114
        i_dst_mac_addr_pc      : in  std_logic_vector (47 downto 0);
115
        i_dst_ip_addr_lookup   : in  std_logic_vector (31 downto 0);
116
 
117
    --ARP Request's
118
   i_fpga_req             : in  std_logic;
119
   i_pc_req               : in  std_logic;
120
 
121
 
122
    -- for transfer data to mac layer
123
    o_mac_tx_req         : out std_logic;
124
    i_mac_tx_granted     : in  std_logic;
125
    i_mac_tready         : in  std_logic;
126
    o_mac_tvalid         : out std_logic;
127
    o_mac_tlast          : out std_logic;
128
    o_mac_tdata          : out std_logic_vector (7 downto 0)
129
 
130
    );
131
end component;
132
--========================================================================================
133
 
134
 
135
 
136
 
137
 
138
--================================= Constant ===========================================================
139
--Generate Block Conditional Constants
140
constant c_GENERATE_PING_MODULE             : boolean  := true;                                  --if Ping Block is not Used,Value is False
141
constant c_GENERATE_ARP_MODULE              : boolean  := true;                                  --if ARP  Block is not Used,Value is False
142
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    
143
 
144
 
145
--Application Layer Data Length
146
constant c_PACKET_LENGTH                    : std_logic_vector (15 downto 0):= x"05c0";          --1472 (Maximum Application Layer Packet Length)
147
constant c_udp_tx_src_ip                    : std_logic_vector (31 downto 0):= x"C0A86403";      --192.168.100.3(FPGA IP Adress)
148
constant c_udp_tx_dst_ip                    : std_logic_vector (31 downto 0):= x"C0A86402";      --192.168.100.2(PC IP Address)
149
constant c_udp_tx_protocol                  : std_logic_vector (7 downto 0) := x"11";            --UDP Protocol
150
constant c_udp_tx_src_mac                   : std_logic_vector (47 downto 0):= x"112233445566";  --FPGA MAC Address
151
constant c_udp_tx_checksum                  : std_logic_vector (15 downto 0):= x"0000";          --UDP Checksum(Value For This Constant is not Importanat)
152
constant c_udp_tx_src_port                  : std_logic_vector (15 downto 0):= x"0401";          --UDP Src Port(Value For This Constant is not Importanat)
153
constant c_udp_tx_dst_port                  : std_logic_vector (15 downto 0):= x"0FF5";          --UDP Dst Port(Value For This Constant is not Importanat)
154
 
155
 
156
--ARP Constants
157
constant c_TIME_OUT_LOOKUP_TABLE_ARP        : std_logic_vector (31 downto 0) := x"9502F900";     --20S(Value/125MHz = 20 )       
158
constant c_TIME_OUT_WAIT_FOR_ARP_REPLY      : std_logic_vector (31 downto 0) := x"07735940";     --1S    (Value/125MHz = 1 )     
159
constant c_RE_SEND_ARP_REQUEST              : std_logic_vector (3 downto 0)  := x"A";            --10    
160
 
161
 
162
--IP Constants
163
constant c_IP_TTL                           : std_logic_vector (7 downto 0)  := x"80";           -- IP Packet Time to live
164
constant c_IP_BC_ADDR                       : std_logic_vector (31 downto 0) := x"ffffffff";     -- Broadcast IP  Address
165
constant c_MAC_BC_ADDR                      : std_logic_vector (47 downto 0) := x"ffffffffffff"; -- Broadcast MAC Address
166
--======================================================================================================
167
 
168
 
169
 
170
 
171
--============================= Top Signals ============================================================
172
 
173
--signal   s_udp_tx_data_len      : std_logic_vector (15 downto 0):= c_PACKET_LENGTH;  --1472 (Maximum Application Layer Packet Length)
174
--signal        s_udp_tx_start         : std_logic:='0';
175
--signal        s_udp_tx_ready         : std_logic;
176
--signal   s_udp_tx_din          : std_logic_vector (7 downto 0);
177
--
178
--signal        s_udp_rx_dout          : std_logic_vector(7 downto 0);
179
--signal        s_udp_rx_dout_rdy      : std_logic;
180
--signal        s_udp_rx_dout_last     : std_logic;
181
--      
182
--signal        s_udp_rx_src_ip        : std_logic_vector(31 downto 0);
183
--signal   s_udp_rx_src_port      : std_logic_vector(15 downto 0);
184
--signal   s_udp_rx_dst_port      : std_logic_vector(15 downto 0);
185
--signal   s_udp_rx_data_len      : std_logic_vector(15 downto 0);      
186
--signal        s_udp_rx_err_out_top          : std_logic_vector(3 downto 0);
187
--signal        s_udp_tx_err_out_top       : std_logic_vector(3 downto 0);
188
--signal        s_arp_rx_err_out_top   : std_logic_vector(3 downto 0);
189
--signal   s_ip_rx_dst_ip_top         : std_logic_vector(31 downto 0);
190
--signal   s_ip_rx_err_out_top        : std_logic_vector (3 downto 0);
191
--signal   s_ip_tx_err_out_top        : std_logic_vector (3 downto 0);
192
--
193
--
194
--signal   s_rx_clk_out           : std_logic;
195
--signal   s_buff_rx_clk_out      : std_logic;
196
--signal   s_tx_clk_out           : std_logic;
197
--signal   s_buff_tx_clk_out      : std_logic;
198
--signal   s_clk_125              : std_logic;
199
--signal   s_clk_100              : std_logic;
200
--signal   s_clk_m                : std_logic;
201
--
202
----chip scope
203
--signal   s_control              : std_logic_vector (35 downto 0);
204
--signal   s_data_log             : std_logic_vector (15 downto 0);
205
--
206
--
207
----for transmit data
208
--signal   s_data_test_val        : std_logic:='0';
209
--signal   s_data_test_last       : std_logic:='0';
210
--signal   s_data_test            : std_logic_vector (7 downto 0):=(others=>'0');
211
--signal   s_cnt2                 : std_logic_vector (15 downto 0):=(others=>'0');
212
--signal   s_global_reset         : std_logic:='1';
213
--
214
--
215
--
216
--signal   s_gmii_txd           : std_logic_vector(7 downto 0);
217
--signal   s_gmii_tx_en         : std_logic;
218
--signal   s_gmii_tx_er         : std_logic;
219
--======================================================================================================
220
 
221
 
222
 
223
 
224
 
225
 
226
--===================== Reset_gen Signals ==============================================================
227
signal   s_cnt_rst     : std_logic_vector(15 downto 0):=(others=>'0');
228
--======================================================================================================
229
 
230
 
231
 
232
 
233
 
234
 
235
--================================ Ethernet 1g Signals =================================================
236
signal   s_gtx_clk                :  std_logic;
237
signal   s_tx_clk                 :  std_logic;
238
signal   s_rx_clk                 :  std_logic;
239
signal   s_rstn                   :  std_logic;
240
signal   s_rx_reset             :  std_logic;
241
signal   s_tx_reset             :  std_logic;
242
 
243
 
244
--mac to gmii_if signals
245
signal   s_mac_gmii_rxd           :  std_logic_vector(7 downto 0);
246
signal   s_mac_gmii_rx_dv         :  std_logic;
247
signal   s_mac_gmii_rx_er         :  std_logic;
248
 
249
signal   s_mac_gmii_txd           :  std_logic_vector(7 downto 0);
250
signal   s_mac_gmii_tx_en         :  std_logic;
251
signal   s_mac_gmii_tx_er         :  std_logic;
252
 
253
 
254
 
255
--ip to mac signals
256
signal   s_mac_tx_tready        :  std_logic;
257
signal  s_mac_tx_tdata         :  std_logic_vector(7 downto 0);
258
signal   s_mac_tx_tvalid        :  std_logic;
259
signal   s_mac_tx_tlast         :  std_logic;
260
 
261
signal   s_mac_rx_tdata         :  std_logic_vector(7 downto 0);
262
signal   s_mac_rx_tvalid        :  std_logic;
263
signal   s_mac_rx_tlast         :  std_logic;
264
--======================================================================================================
265
 
266
 
267
 
268
 
269
 
270
 
271
 
272
 
273
 
274
 
275
--================================ UDP Signals =========================================================
276
    -------- for transfer Rx data from IP to UDP layer----------------
277
        signal s_ip_rx_dout           :  std_logic_vector(7 downto 0);
278
        signal s_ip_rx_dout_rdy       :  std_logic;
279
        signal s_ip_rx_dout_last      :  std_logic;
280
 
281
        -------- for transfer Rx status data from IP to UDP layer---------
282
        signal s_ip_rx_src_ip         :  std_logic_vector(31 downto 0);
283
    signal s_ip_rx_dst_ip         :  std_logic_vector(31 downto 0);
284
    signal s_ip_rx_data_len       :  std_logic_vector(15 downto 0);
285
    signal s_ip_rx_protocol       :  std_logic_vector(7 downto 0);
286
    signal s_ip_rx_broadcast      :  std_logic;
287
    signal s_ip_rx_err_out_udp        :  std_logic_vector (3 downto 0);
288
    signal s_ip_tx_err_out_udp        :  std_logic_vector (3 downto 0);
289
    signal s_arp_rx_err_out_udp       :  std_logic_vector (3 downto 0);
290
 
291
        -------- for transfer Tx data from UDP to IP layer---------------
292
        signal s_ip_tx_start          :  std_logic;
293
        signal s_ip_tx_rdy            :  std_logic;
294
        signal s_ip_tx_din                :  std_logic_vector(7 downto 0);
295
 
296
        -------- for transfer Tx header data from UDP to IP layer--------
297
        signal s_ip_tx_src_ip         :  std_logic_vector(31 downto 0);
298
        signal s_ip_tx_dst_ip         :  std_logic_vector(31 downto 0);
299
        signal s_ip_tx_src_mac        :  std_logic_vector(47 downto 0);
300
        signal s_ip_tx_data_len       :  std_logic_vector(15 downto 0);
301
        signal s_ip_tx_protocol       :  std_logic_vector(7 downto 0);
302
        -----------------------------------------------------------------
303
--======================================================================================================
304
 
305
 
306
 
307
 
308
 
309
 
310
 
311
 
312
 
313
 
314
--============================= IP Signals =============================================================
315
  signal s_ip_mac_tx_tvalid    : std_logic;
316
  signal s_ip_mac_tx_tlast     : std_logic;
317
  signal s_ip_mac_tx_tdata     : std_logic_vector(7 downto 0);
318
  signal s_ip_mac_tx_req       : std_logic;
319
  signal s_ip_mac_tx_granted   : std_logic;
320
 
321
  signal s_arp_mac_tx_tvalid   : std_logic;
322
  signal s_arp_mac_tx_tlast    : std_logic;
323
  signal s_arp_mac_tx_tdata    : std_logic_vector(7 downto 0);
324
  signal s_arp_mac_tx_req      : std_logic;
325
  signal s_arp_mac_tx_granted  : std_logic;
326
 
327
  signal s_ping_mac_tx_tvalid   : std_logic;
328
  signal s_ping_mac_tx_tlast    : std_logic;
329
  signal s_ping_mac_tx_tdata    : std_logic_vector(7 downto 0);
330
  signal s_ping_mac_tx_req      : std_logic;
331
  signal s_ping_mac_tx_granted  : std_logic;
332
 
333
  signal s_lookup_req          : std_logic;
334
  signal s_lookup_ip           : std_logic_vector(31 downto 0);
335
  signal s_lookup_mac_addr     : std_logic_vector(47 downto 0);
336
  signal s_lookup_mac_got      : std_logic;
337
  signal s_lookup_mac_err      : std_logic;
338
 
339
 
340
 
341
  signal s_no_ping_packet      : std_logic;
342
  signal s_ip_rx_err_out            : std_logic_vector(3 downto 0);
343
  --======================================================================================================
344
 
345
 
346
 
347
 
348
 
349
 
350
 
351
 
352
 
353
 
354
 
355
 
356
  --============================= IP4_TX Signals ==========================================================
357
  type t_tx_ip_state_type   is (IDLE,WAIT_MAC_ADDR,WAIT_CHN,SEND_DATA);
358
  type t_crc_state_type  is (IDLE, TOT_LEN, ID, FLAGS, TTL, CKS, SAH, SAL, DAH, DAL, ADDOVF, FINAL, WAIT_END);
359
  signal st_crc_state     : t_crc_state_type:=IDLE;
360
  signal s_tx_hdr_cks    : std_logic_vector (23 downto 0):=(others=>'0');
361
  signal s_cal_cheksum   : std_logic:='0';
362
 
363
 
364
  signal st_tx_ip_state      : t_tx_ip_state_type:=IDLE;
365
  signal s_cnt_ip_tx      : std_logic_vector (15 downto 0):=(others=>'0');
366
  signal s_dst_mac_addr  : std_logic_vector (47 downto 0); -- arp block updats this signal
367
  signal s_total_length  : std_logic_vector (15 downto 0); -- s_total_length is i_data_length+20(ip header) 
368
 
369
  signal s_ip_header     : std_logic_vector (7 downto 0):=(others=>'0');
370
  --========================================================================================================
371
 
372
 
373
 
374
 
375
 
376
 
377
 
378
 
379
 
380
 
381
  --============================ IP4_RX  Signals============================================================
382
  type t_rx_ip_state_type is (IDLE,ETH_H,IP_H,USER_DATA,WAIT_END);
383
  signal st_RX_IP_STATE         : t_rx_ip_state_type:=IDLE;
384
  signal s_cnt_ip_rx         : std_logic_vector (15 downto 0):=x"0001";
385
 
386
  signal s_src_ip_ip_rx         : std_logic_vector (31 downto 0):=(others=>'0');
387
  signal s_dst_ip_ip_rx         : std_logic_vector (31 downto 0):=(others=>'0');
388
  signal s_data_len_ip_rx       : std_logic_vector (15 downto 0):=(others=>'0');
389
  signal s_protocol_ip_rx       : std_logic_vector (7 downto 0) :=(others=>'0');
390
  signal s_broadcast_ip_rx      : std_logic;
391
  --========================================================================================================
392
 
393
 
394
 
395
 
396
 
397
 
398
 
399
 
400
 
401
 
402
 
403
--==================================== ARP Signals ==========================================================
404
type         t_arp_state_type is     (IDLE,LOOK_UP,WAIT_PC_REPLY);
405
signal       st_ARP_STATE             : t_arp_state_type:=IDLE;
406
signal       s_timeout_wait_reply_cnt           : std_logic_vector(31 downto 0):=(others=>'0');
407
signal       s_error_cnt             : std_logic_vector(3 downto 0):=(others=>'0');
408
 
409
--ARP_TX Signals
410
signal       s_dst_ip_addr_pc      : std_logic_vector(31 downto 0):=(others=>'0');
411
signal       s_dst_mac_addr_pc     : std_logic_vector(47 downto 0):=(others=>'0');
412
signal       s_dst_ip_addr_lookup  : std_logic_vector(31 downto 0):=(others=>'0');
413
signal       s_fpga_req_tx         : std_logic:='0';
414
signal       s_pc_req_tx           : std_logic:='0';
415
 
416
 
417
--ARP_RX Signals
418
signal       s_ip_addr0            : std_logic_vector(31 downto 0);
419
signal       s_mac_addr0           : std_logic_vector(47 downto 0);
420
signal       s_addr_valid0         : std_logic;
421
signal       s_pc_reply_rx         : std_logic;
422
signal       s_pc_req_rx           : std_logic;
423
--===========================================================================================================
424
 
425
 
426
 
427
 
428
 
429
 
430
 
431
 
432
 
433
 
434
 
435
--=============================== ARP RX Signals ============================================================
436
type t_rx_arp_state_type is       (IDLE,ETH_H,ARP_DATA,WAIT_END);
437
signal st_RX_ARP_STATE             : t_rx_arp_state_type:=IDLE;
438
signal s_cnt_arp_rx             : std_logic_vector (15 downto 0):=x"0001";
439
 
440
 
441
signal s_dst_ip            : std_logic_vector (31 downto 0):=(others=>'0');
442
signal s_operation         : std_logic_vector (15 downto 0):=(others=>'0');
443
signal s_addr_valid        : std_logic:='0';
444
signal s_pc_req            : std_logic:='0';
445
signal s_pc_reply          : std_logic:='0';
446
 
447
 
448
signal s_src_mac_arp_rx            : std_logic_vector (47 downto 0):=(others=>'0');
449
signal s_src_ip_arp_rx             : std_logic_vector (31 downto 0):=(others=>'0');
450
signal s_addr_valid_pulse   : std_logic:='0';
451
signal s_pc_req_pulse       : std_logic:='0';
452
signal s_pc_reply_pulse     : std_logic:='0';
453
signal s_trans_data_pulse   : std_logic:='0';
454
--===========================================================================================================
455
 
456
 
457
 
458
 
459
 
460
 
461
 
462
 
463
 
464
 
465
 
466
 
467
--=================================== ARP LOOKUP_TABLE Signals ==============================================
468
signal   s_timeout_lookup_table_cnt        : std_logic_vector(31 downto 0):=(others=>'0');
469
 
470
signal   s_din              : std_logic_vector(82 downto 0):=(others=>'0');
471
signal   s_wr_en            : std_logic;
472
signal   s_dout             : std_logic_vector(82 downto 0):=(others=>'0');
473
signal   s_valid            : std_logic;
474
signal   s_empty              : std_logic;
475
signal   s_notempty           : std_logic;
476
 
477
 
478
signal   s_mac_addr_out     : std_logic_vector(47 downto 0):=(others=>'0');
479
signal   s_ip_addr_out      : std_logic_vector(31 downto 0):=(others=>'0');
480
signal   s_addr_valid_out   : std_logic:='0';
481
signal   s_request_out      : std_logic:='0';
482
signal   s_reply_out        : std_logic:='0';
483
--============================================================================================================
484
 
485
 
486
 
487
 
488
 
489
 
490
 
491
 
492
 
493
 
494
 
495
--============================ ARP TX Signals ================================================================
496
type t_arp_tx_state_type   is (IDLE,WAIT_CHN,SEND_DATA);
497
signal st_tx_arp_state          : t_arp_tx_state_type:=IDLE;
498
signal s_cnt_arp_tx          : std_logic_vector (7 downto 0):=(others=>'0');
499
signal s_arp_type          : std_logic_vector (15 downto 0):=(others=>'0');
500
signal s_dst_ip_addr     : std_logic_vector (31 downto 0):=(others=>'0');
501
signal s_dst_mac_addr1   : std_logic_vector (47 downto 0):=(others=>'0');
502
signal s_dst_mac_addr2   : std_logic_vector (47 downto 0):=(others=>'0');
503
--============================================================================================================
504
 
505
 
506
 
507
 
508
 
509
 
510
 
511
 
512
 
513
 
514
 
515
 
516
--============================== PING Signals =================================================================
517
--for Delayed Inputs
518
signal   s_mac_data_in_r        : std_logic_vector (7 downto 0);
519
signal   s_mac_data_in_valid_r  : std_logic;
520
signal   s_mac_data_in_last_r   : std_logic;
521
 
522
 
523
--Sync_fifo_ping Signals
524
signal   s_ip_rx_in          : std_logic_vector(14 downto 0);
525
signal   s_ip_rx_out         : std_logic_vector(14 downto 0):=(others=>'0');
526
signal   s_mac_data_in          : std_logic_vector(7 downto 0);
527
signal   s_mac_data_in_valid  : std_logic;
528
signal   s_mac_data_in_last   : std_logic;
529
signal   s_mac_data_in_last_d : std_logic;
530
signal   s_ip_rx_err_in       : std_logic_vector(3 downto 0);
531
signal   s_no_ping_data     : std_logic;
532
signal   s_empty_sync_fifo    : std_logic:='0';
533
signal   s_not_empty_sync_fifo: std_logic;
534
 
535
 
536
--Data_fifo_ping Signals
537
signal   s_rst_fifo_ping     : std_logic:='1';
538
signal   s_wr_en_fifo_ping   : std_logic:='0';
539
signal   s_din_fifo_ping     : std_logic_vector(7 downto 0):=(others=>'0');
540
signal   s_rd_en_fifo_ping   : std_logic;
541
signal   s_dout_fifo_ping    : std_logic_vector(7 downto 0);
542
 
543
 
544
--Checksum Signals
545
signal   s_checksum_data_out   : std_logic_vector(15 downto 0);
546
signal   s_checksum_data_in    : std_logic_vector(7 downto 0);
547
signal   s_checksum_start_calc : std_logic:='0';
548
signal   s_checksum_stop_calc  : std_logic:='0';
549
 
550
 
551
--st_PING_STATE Machine Process Signals 
552
type     t_ping_state            is (IDLE,ACQUIRE_DATA,WAIT_END,WAIT_CHN,SEND_DATA);
553
signal   st_PING_STATE               : t_ping_state:=IDLE;
554
signal   s_wr_cnt              : std_logic_vector(7 downto 0):=(others=>'0');
555
signal   s_rd_cnt              : std_logic_vector(7 downto 0):=(others=>'0');
556
signal   s_start_send          : std_logic;
557
 
558
 
559
signal   s_src_mac_ping           : std_logic_vector(47 downto 0):=(others=>'0');
560
signal   s_dst_mac_ping           : std_logic_vector(47 downto 0):=(others=>'0');
561
signal   s_src_ip_ping            : std_logic_vector(31 downto 0):=(others=>'0');
562
signal   s_dst_ip_ping            : std_logic_vector(31 downto 0):=(others=>'0');
563
--=================================================================================================================
564
 
565
 
566
 
567
 
568
 
569
 
570
 
571
 
572
 
573
 
574
 
575
 
576
--================================= Ping Checksum Calc Signals ====================================================
577
type        t_checksum_state   is   (IDLE,CALC);
578
signal      st_checksum_state      : t_checksum_state:=IDLE;
579
 
580
signal      s_flag       : std_logic:='0';
581
signal      s_din_r      : std_logic_vector(7 downto 0);
582
signal      s_sum        : std_logic_vector(31 downto 0):=(others=>'0');
583
--=================================================================================================================
584
 
585
 
586
 
587
 
588
 
589
 
590
 
591
 
592
 
593
 
594
 
595
--============================ TX_Arbitior Signals =====================================================================
596
type   t_state_type is       (IDLE,DATA_REQ,ARP_REQ,PING_REQ);
597
signal st_STATE               : t_state_type:=IDLE;
598
--======================================================================================================================
599
 
600
 
601
 
602
 
603
 
604
 
605
 
606
 
607
 
608
 
609
 
610
 
611
--============================ UDP RX Signals ===========================================================================
612
  type t_rx_udp_state_type is  (IDLE, UDP_HDR, USER_DATA, WAIT_END);
613
  signal st_RX_UDP_STATE         : t_rx_udp_state_type:=IDLE;
614
  signal s_cnt_udp_rx         : std_logic_vector (15 downto 0):=x"0001";
615
 
616
  signal s_src_ip_udp_rx  : std_logic_vector (31 downto 0):=(others=>'0');
617
  signal s_src_port       : std_logic_vector (15 downto 0):=(others=>'0');
618
  signal s_dst_port       : std_logic_vector (15 downto 0):=(others=>'0');
619
  signal s_data_len_udp_rx       : std_logic_vector (15 downto 0):=(others=>'0');
620
  signal s_err_out        : std_logic_vector (3 downto 0) :=(others=>'0');
621
 --======================================================================================================================= 
622
 
623
 
624
 
625
 
626
 
627
 
628
 
629
 
630
 
631
 
632
 
633
 --============================ UDP TX Signals =============================================================================
634
  type t_tx_udp_state_type     is (IDLE,SEND_DATA);
635
  signal st_tx_udp_state        : t_tx_udp_state_type:=IDLE;
636
 
637
  signal s_cnt_udp_tx        : std_logic_vector (15 downto 0):=(others=>'0');
638
  signal s_ip_data_len   : std_logic_vector (15 downto 0);
639
  signal s_udp_header      : std_logic_vector (7 downto 0):=(others=>'0');
640
--==========================================================================================================================
641
 
642
 
643
 
644
 
645
 
646
 
647
 
648
 
649
 
650
 
651
 
652
--============================ PHY_Interface Signals =======================================================================
653
signal s_gmii_col_reg         : std_logic;
654
signal s_gmii_col_reg_reg     : std_logic;
655
signal s_gmii_rx_clk          : std_logic;
656
--==========================================================================================================================
657
 
658
 
659
 
660
 
661
 
662
 
663
 
664
 
665
 
666
 
667
 
668
--=========================== Ping_Pong Fifo Signals =======================================================================
669
signal s_empty1              : std_logic;
670
signal s_empty2              : std_logic;
671
signal s_notempty1           : std_logic;
672
signal s_notempty2           : std_logic;
673
 
674
 
675
signal s_data_m              : std_logic_vector(7 downto 0);
676
signal s_valid_m             : std_logic;
677
signal s_last_m              : std_logic;
678
 
679
 
680
signal s_wr_en_a             : std_logic:='0';
681
signal s_din_a               : std_logic_vector(7 downto 0):=(others=>'0');
682
signal s_rd_en_a             : std_logic;
683
signal s_dout_a              : std_logic_vector(7 downto 0);
684
signal s_valid_a             : std_logic;
685
signal s_empty_a             : std_logic;
686
 
687
signal s_wr_en_b             : std_logic:='0';
688
signal s_din_b               : std_logic_vector(7 downto 0):=(others=>'0');
689
signal s_rd_en_b             : std_logic;
690
signal s_dout_b              : std_logic_vector(7 downto 0);
691
signal s_valid_b             : std_logic;
692
signal s_empty_b             : std_logic;
693
 
694
 
695
signal s_cnt_a               : std_logic_vector(15 downto 0):=(others=>'0');
696
signal s_cnt_b               : std_logic_vector(15 downto 0):=(others=>'0');
697
signal s_rd_cnt_a            : std_logic_vector(15 downto 0):=(others=>'0');
698
signal s_rd_cnt_b            : std_logic_vector(15 downto 0):=(others=>'0');
699
 
700
signal s_busy_a              : std_logic:='0';
701
signal s_busy_b              : std_logic:='0';
702
 
703
signal s_last_a              : std_logic:='0';
704
signal s_last_b              : std_logic:='0';
705
 
706
signal s_dout_len          : std_logic_vector(15 downto 0);
707
 
708
type        t_pingpong_state     is (wait_data,rd_fifo_a,rd_fifo_b);
709
signal      st_ping_pong_state          : t_pingpong_state:=wait_data;
710
--========================================================================================================================= 
711
 
712
 
713
begin
714
 
715
 
716
 
717
 
718
--=============== Wait for ARP Requests and so Reply them =====================================
719
p_arp_control:process(i_tx_clk)
720
begin
721
if rising_edge(i_tx_clk) then
722
        s_pc_req_tx       <= '0';
723
        s_fpga_req_tx     <= '0';
724
        o_lookup_mac_got    <= '0';
725
        o_lookup_mac_err    <= '0';
726
 
727
if (i_reset= '1') then
728
         s_fpga_req_tx          <= '0';
729
         s_pc_req_tx            <= '0';
730
         s_dst_ip_addr_pc       <= (others=>'0');
731
         s_dst_mac_addr_pc      <= (others=>'0');
732
         s_dst_ip_addr_lookup   <= (others=>'0');
733
         s_timeout_wait_reply_cnt            <= (others=>'0');
734
         s_error_cnt              <= (others=>'0');
735
         st_ARP_STATE              <= IDLE;
736
else
737
 
738
CASE st_ARP_STATE IS
739
 
740
 
741
 
742
WHEN IDLE =>
743
     s_timeout_wait_reply_cnt           <= (others=>'0');
744
     s_error_cnt             <= (others=>'0');
745
 
746
          if (s_pc_req_rx='1') then
747
              s_pc_req_tx       <= '1';
748
                        s_dst_ip_addr_pc  <= s_ip_addr0;
749
                        s_dst_mac_addr_pc <= s_mac_addr0;
750
          end if;
751
          if(i_fpga_req='1') then
752
        s_pc_req_tx        <='0';
753
        st_ARP_STATE          <= LOOK_UP;
754
          end if;
755
 
756
 
757
 
758
WHEN LOOK_UP  =>
759
     s_fpga_req_tx        <= '1';
760
          s_dst_ip_addr_lookup <= i_lookup_ip;
761
          st_ARP_STATE            <= WAIT_PC_REPLY;
762
          s_error_cnt            <= s_error_cnt+1;
763
          if ((s_addr_valid0='1') and (s_ip_addr0=i_lookup_ip)) then
764
              o_lookup_mac_addr  <= s_mac_addr0;
765
              o_lookup_mac_got   <= '1';
766
                        s_fpga_req_tx    <= '0';
767
                        s_error_cnt        <= (others=>'0');
768
                        st_ARP_STATE        <= IDLE;
769
     end if;
770
          if (s_error_cnt = g_RE_SEND_ARP_REQUEST) then
771
              s_fpga_req_tx    <= '0';
772
                        s_error_cnt        <= (others=>'0');
773
                        o_lookup_mac_err   <= '1';
774
                        st_ARP_STATE        <= IDLE;
775
          end if;
776
 
777
 
778
 
779
 
780
WHEN WAIT_PC_REPLY =>
781
     s_timeout_wait_reply_cnt         <= s_timeout_wait_reply_cnt+1;
782
          if (s_pc_reply_rx='1') then
783
              s_timeout_wait_reply_cnt     <= (others=>'0');
784
                        st_ARP_STATE       <= LOOK_UP;
785
          end if;
786
     if (s_timeout_wait_reply_cnt=g_TIME_OUT_WAIT_FOR_ARP_REPLY) then -- 1 second       time_out   
787
              s_timeout_wait_reply_cnt     <= (others=>'0');
788
                        st_ARP_STATE       <= LOOK_UP;
789
          end if;
790
 
791
 
792
END CASE;
793
end if;
794
end if;
795
 
796
end process p_arp_control;
797
--================================================================================================
798
 
799
 
800
 
801
 
802
 
803
 
804
 
805
 
806
 
807
 
808
 
809
 
810
 
811
 
812
 
813
--============================= ARP_RX ===========================================================
814
inst_ARP_RX:  ARP_RX
815
generic map (
816
                        g_TIME_OUT_LOOKUP_TABLE_ARP     =>      g_TIME_OUT_LOOKUP_TABLE_ARP
817
                        )
818
  port map (
819
 
820
    -- system signals
821
    i_rx_clk                   => i_rx_clk,
822
    i_tx_clk                   => i_tx_clk,
823
    i_reset                    => i_reset,
824
    i_our_ip_addr              => i_our_ip_addr,
825
 
826
        -- MAC layer RX inputs
827
    i_mac_data_in              => i_mac_data_in,
828
    i_mac_data_in_valid        => i_mac_data_in_valid,
829
    i_mac_data_in_last         => i_mac_data_in_last,
830
 
831
        -- Outputs to ARP 
832
        o_ip_addr0                  => s_ip_addr0,
833
        o_mac_addr0                 => s_mac_addr0,
834
        o_addr_valid0               => s_addr_valid0,
835
        o_pc_reply                  => s_pc_reply_rx,
836
        o_pc_req                    => s_pc_req_rx,
837
 
838
        -- Error Out
839
        o_arp_rx_err_out            => o_arp_rx_err_out
840
    );
841
--================================================================================================       
842
 
843
 
844
 
845
 
846
 
847
 
848
 
849
 
850
 
851
 
852
 
853
 
854
 
855
 
856
 
857
--================================== ARP_TX ======================================================
858
inst_ARP_TX: ARP_TX
859
  port map (
860
    i_tx_clk                  => i_tx_clk,
861
    i_reset                   => i_reset,
862
 
863
   --for ARP Data
864
        i_our_ip_addr              => i_our_ip_addr,
865
        i_our_mac_addr             => i_our_mac_addr,
866
        i_dst_ip_addr_pc           => s_dst_ip_addr_pc,
867
        i_dst_mac_addr_pc          => s_dst_mac_addr_pc,
868
        i_dst_ip_addr_lookup       => s_dst_ip_addr_lookup,
869
 
870
    --ARP Request's
871
   i_fpga_req                 => s_fpga_req_tx,
872
   i_pc_req                   => s_pc_req_tx,
873
 
874
 
875
    -- for transfer data to mac layer
876
    o_mac_tx_req              => o_mac_tx_req,
877
    i_mac_tx_granted          => i_mac_tx_granted,
878
    i_mac_tready              => i_mac_tready,
879
    o_mac_tvalid              => o_mac_tvalid,
880
    o_mac_tlast               => o_mac_tlast,
881
    o_mac_tdata               => o_mac_tdata
882
 
883
    );
884
--================================================================================================
885
 
886
 
887
 
888
 
889
 
890
 
891
end Behavioral;
892
 

powered by: WebSVN 2.1.0

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