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

powered by: WebSVN 2.1.0

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