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

powered by: WebSVN 2.1.0

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