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

powered by: WebSVN 2.1.0

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