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/] [tx_arbitrator.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
library work;
5
use work.signal_Package.all;
6
 
7
entity tx_arbitrator is
8
    port (
9
 
10
        i_tx_clk                                        : in std_logic;
11
        i_reset                            : in std_logic;
12
 
13
        -- IP Inputs Path
14
        i_req_1                            : in  std_logic;
15
        o_grant_1                          : out std_logic;
16
   i_data_1             : in  std_logic_vector(7 downto 0);
17
   i_valid_1            : in  std_logic;
18
   i_last_1             : in  std_logic;
19
 
20
        -- ARP Inpus Path
21
        i_req_2                            : in  std_logic;
22
        o_grant_2                          : out std_logic;
23
   i_data_2             : in  std_logic_vector(7 downto 0);
24
   i_valid_2            : in  std_logic;
25
   i_last_2             : in  std_logic;
26
 
27
   -- PING Inpus Path
28
        i_req_3                            : in  std_logic;
29
        o_grant_3                          : out std_logic;
30
   i_data_3             : in  std_logic_vector(7 downto 0);
31
   i_valid_3            : in  std_logic;
32
   i_last_3             : in  std_logic;
33
 
34
        -- Outputs Path
35
   o_data                  : out  std_logic_vector(7 downto 0);
36
   o_valid                 : out  std_logic;
37
   o_last                  : out  std_logic
38
 
39
   );
40
end tx_arbitrator;
41
 
42
architecture Behavioral of tx_arbitrator is
43
--================================= Constant ===========================================================
44
--Generate Block Conditional Constants
45
constant c_GENERATE_PING_MODULE             : boolean  := true;                                  --if Ping Block is not Used,Value is False
46
constant c_GENERATE_ARP_MODULE              : boolean  := true;                                  --if ARP  Block is not Used,Value is False
47
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    
48
 
49
 
50
--Application Layer Data Length
51
constant c_PACKET_LENGTH                    : std_logic_vector (15 downto 0):= x"05c0";          --1472 (Maximum Application Layer Packet Length)
52
constant c_udp_tx_src_ip                    : std_logic_vector (31 downto 0):= x"C0A86403";      --192.168.100.3(FPGA IP Adress)
53
constant c_udp_tx_dst_ip                    : std_logic_vector (31 downto 0):= x"C0A86402";      --192.168.100.2(PC IP Address)
54
constant c_udp_tx_protocol                  : std_logic_vector (7 downto 0) := x"11";            --UDP Protocol
55
constant c_udp_tx_src_mac                   : std_logic_vector (47 downto 0):= x"112233445566";  --FPGA MAC Address
56
constant c_udp_tx_checksum                  : std_logic_vector (15 downto 0):= x"0000";          --UDP Checksum(Value For This Constant is not Importanat)
57
constant c_udp_tx_src_port                  : std_logic_vector (15 downto 0):= x"0401";          --UDP Src Port(Value For This Constant is not Importanat)
58
constant c_udp_tx_dst_port                  : std_logic_vector (15 downto 0):= x"0FF5";          --UDP Dst Port(Value For This Constant is not Importanat)
59
 
60
 
61
--ARP Constants
62
constant c_TIME_OUT_LOOKUP_TABLE_ARP        : std_logic_vector (31 downto 0) := x"9502F900";     --20S(Value/125MHz = 20 )       
63
constant c_TIME_OUT_WAIT_FOR_ARP_REPLY      : std_logic_vector (31 downto 0) := x"07735940";     --1S    (Value/125MHz = 1 )     
64
constant c_RE_SEND_ARP_REQUEST              : std_logic_vector (3 downto 0)  := x"A";            --10    
65
 
66
 
67
--IP Constants
68
constant c_IP_TTL                           : std_logic_vector (7 downto 0)  := x"80";           -- IP Packet Time to live
69
constant c_IP_BC_ADDR                       : std_logic_vector (31 downto 0) := x"ffffffff";     -- Broadcast IP  Address
70
constant c_MAC_BC_ADDR                      : std_logic_vector (47 downto 0) := x"ffffffffffff"; -- Broadcast MAC Address
71
--======================================================================================================
72
 
73
--===================== Reset_gen Signals ==============================================================
74
signal   s_cnt_rst     : std_logic_vector(15 downto 0):=(others=>'0');
75
--======================================================================================================
76
 
77
--================================ Ethernet 1g Signals =================================================
78
signal   s_gtx_clk                :  std_logic;
79
signal   s_tx_clk                 :  std_logic;
80
signal   s_rx_clk                 :  std_logic;
81
signal   s_rstn                   :  std_logic;
82
signal   s_rx_reset             :  std_logic;
83
signal   s_tx_reset             :  std_logic;
84
 
85
 
86
--mac to gmii_if signals
87
signal   s_mac_gmii_rxd           :  std_logic_vector(7 downto 0);
88
signal   s_mac_gmii_rx_dv         :  std_logic;
89
signal   s_mac_gmii_rx_er         :  std_logic;
90
 
91
signal   s_mac_gmii_txd           :  std_logic_vector(7 downto 0);
92
signal   s_mac_gmii_tx_en         :  std_logic;
93
signal   s_mac_gmii_tx_er         :  std_logic;
94
 
95
 
96
 
97
--ip to mac signals
98
signal   s_mac_tx_tready        :  std_logic;
99
signal  s_mac_tx_tdata         :  std_logic_vector(7 downto 0);
100
signal   s_mac_tx_tvalid        :  std_logic;
101
signal   s_mac_tx_tlast         :  std_logic;
102
 
103
signal   s_mac_rx_tdata         :  std_logic_vector(7 downto 0);
104
signal   s_mac_rx_tvalid        :  std_logic;
105
signal   s_mac_rx_tlast         :  std_logic;
106
--======================================================================================================
107
 
108
 
109
--================================ UDP Signals =========================================================
110
    -------- for transfer Rx data from IP to UDP layer----------------
111
        signal s_ip_rx_dout           :  std_logic_vector(7 downto 0);
112
        signal s_ip_rx_dout_rdy       :  std_logic;
113
        signal s_ip_rx_dout_last      :  std_logic;
114
 
115
        -------- for transfer Rx status data from IP to UDP layer---------
116
        signal s_ip_rx_src_ip         :  std_logic_vector(31 downto 0);
117
    signal s_ip_rx_dst_ip         :  std_logic_vector(31 downto 0);
118
    signal s_ip_rx_data_len       :  std_logic_vector(15 downto 0);
119
    signal s_ip_rx_protocol       :  std_logic_vector(7 downto 0);
120
    signal s_ip_rx_broadcast      :  std_logic;
121
    signal s_ip_rx_err_out_udp        :  std_logic_vector (3 downto 0);
122
    signal s_ip_tx_err_out_udp        :  std_logic_vector (3 downto 0);
123
    signal s_arp_rx_err_out_udp       :  std_logic_vector (3 downto 0);
124
 
125
        -------- for transfer Tx data from UDP to IP layer---------------
126
        signal s_ip_tx_start          :  std_logic;
127
        signal s_ip_tx_rdy            :  std_logic;
128
        signal s_ip_tx_din                :  std_logic_vector(7 downto 0);
129
 
130
        -------- for transfer Tx header data from UDP to IP layer--------
131
        signal s_ip_tx_src_ip         :  std_logic_vector(31 downto 0);
132
        signal s_ip_tx_dst_ip         :  std_logic_vector(31 downto 0);
133
        signal s_ip_tx_src_mac        :  std_logic_vector(47 downto 0);
134
        signal s_ip_tx_data_len       :  std_logic_vector(15 downto 0);
135
        signal s_ip_tx_protocol       :  std_logic_vector(7 downto 0);
136
        -----------------------------------------------------------------
137
--======================================================================================================
138
 
139
 
140
 
141
--============================= IP Signals =============================================================
142
  signal s_ip_mac_tx_tvalid    : std_logic;
143
  signal s_ip_mac_tx_tlast     : std_logic;
144
  signal s_ip_mac_tx_tdata     : std_logic_vector(7 downto 0);
145
  signal s_ip_mac_tx_req       : std_logic;
146
  signal s_ip_mac_tx_granted   : std_logic;
147
 
148
  signal s_arp_mac_tx_tvalid   : std_logic;
149
  signal s_arp_mac_tx_tlast    : std_logic;
150
  signal s_arp_mac_tx_tdata    : std_logic_vector(7 downto 0);
151
  signal s_arp_mac_tx_req      : std_logic;
152
  signal s_arp_mac_tx_granted  : std_logic;
153
 
154
  signal s_ping_mac_tx_tvalid   : std_logic;
155
  signal s_ping_mac_tx_tlast    : std_logic;
156
  signal s_ping_mac_tx_tdata    : std_logic_vector(7 downto 0);
157
  signal s_ping_mac_tx_req      : std_logic;
158
  signal s_ping_mac_tx_granted  : std_logic;
159
 
160
  signal s_lookup_req          : std_logic;
161
  signal s_lookup_ip           : std_logic_vector(31 downto 0);
162
  signal s_lookup_mac_addr     : std_logic_vector(47 downto 0);
163
  signal s_lookup_mac_got      : std_logic;
164
  signal s_lookup_mac_err      : std_logic;
165
 
166
 
167
 
168
  signal s_no_ping_packet      : std_logic;
169
  signal s_ip_rx_err_out            : std_logic_vector(3 downto 0);
170
  --======================================================================================================
171
 
172
 
173
 
174
 
175
 
176
 
177
 
178
 
179
 
180
 
181
 
182
 
183
  --============================= IP4_TX Signals ==========================================================
184
  type t_tx_ip_state_type   is (IDLE,WAIT_MAC_ADDR,WAIT_CHN,SEND_DATA);
185
  type t_crc_state_type  is (IDLE, TOT_LEN, ID, FLAGS, TTL, CKS, SAH, SAL, DAH, DAL, ADDOVF, FINAL, WAIT_END);
186
  signal st_crc_state     : t_crc_state_type:=IDLE;
187
  signal s_tx_hdr_cks    : std_logic_vector (23 downto 0):=(others=>'0');
188
  signal s_cal_cheksum   : std_logic:='0';
189
 
190
 
191
  signal st_tx_ip_state      : t_tx_ip_state_type:=IDLE;
192
  signal s_cnt_ip_tx      : std_logic_vector (15 downto 0):=(others=>'0');
193
  signal s_dst_mac_addr  : std_logic_vector (47 downto 0); -- arp block updats this signal
194
  signal s_total_length  : std_logic_vector (15 downto 0); -- s_total_length is i_data_length+20(ip header) 
195
 
196
  signal s_ip_header     : std_logic_vector (7 downto 0):=(others=>'0');
197
  --========================================================================================================
198
 
199
 
200
 
201
 
202
 
203
 
204
 
205
 
206
 
207
 
208
  --============================ IP4_RX  Signals============================================================
209
  type t_rx_ip_state_type is (IDLE,ETH_H,IP_H,USER_DATA,WAIT_END);
210
  signal st_RX_IP_STATE         : t_rx_ip_state_type:=IDLE;
211
  signal s_cnt_ip_rx         : std_logic_vector (15 downto 0):=x"0001";
212
 
213
  signal s_src_ip_ip_rx         : std_logic_vector (31 downto 0):=(others=>'0');
214
  signal s_dst_ip_ip_rx         : std_logic_vector (31 downto 0):=(others=>'0');
215
  signal s_data_len_ip_rx       : std_logic_vector (15 downto 0):=(others=>'0');
216
  signal s_protocol_ip_rx       : std_logic_vector (7 downto 0) :=(others=>'0');
217
  signal s_broadcast_ip_rx      : std_logic;
218
  --========================================================================================================
219
 
220
 
221
 
222
 
223
 
224
 
225
 
226
 
227
 
228
 
229
 
230
--==================================== ARP Signals ==========================================================
231
type         t_arp_state_type is     (IDLE,LOOK_UP,WAIT_PC_REPLY);
232
signal       st_ARP_STATE             : t_arp_state_type:=IDLE;
233
signal       s_timeout_wait_reply_cnt           : std_logic_vector(31 downto 0):=(others=>'0');
234
signal       s_error_cnt             : std_logic_vector(3 downto 0):=(others=>'0');
235
 
236
--ARP_TX Signals
237
signal       s_dst_ip_addr_pc      : std_logic_vector(31 downto 0):=(others=>'0');
238
signal       s_dst_mac_addr_pc     : std_logic_vector(47 downto 0):=(others=>'0');
239
signal       s_dst_ip_addr_lookup  : std_logic_vector(31 downto 0):=(others=>'0');
240
signal       s_fpga_req_tx         : std_logic:='0';
241
signal       s_pc_req_tx           : std_logic:='0';
242
 
243
 
244
--ARP_RX Signals
245
signal       s_ip_addr0            : std_logic_vector(31 downto 0);
246
signal       s_mac_addr0           : std_logic_vector(47 downto 0);
247
signal       s_addr_valid0         : std_logic;
248
signal       s_pc_reply_rx         : std_logic;
249
signal       s_pc_req_rx           : std_logic;
250
--===========================================================================================================
251
 
252
 
253
 
254
 
255
 
256
 
257
 
258
 
259
 
260
 
261
 
262
--=============================== ARP RX Signals ============================================================
263
type t_rx_arp_state_type is       (IDLE,ETH_H,ARP_DATA,WAIT_END);
264
signal st_RX_ARP_STATE             : t_rx_arp_state_type:=IDLE;
265
signal s_cnt_arp_rx             : std_logic_vector (15 downto 0):=x"0001";
266
 
267
 
268
signal s_dst_ip            : std_logic_vector (31 downto 0):=(others=>'0');
269
signal s_operation         : std_logic_vector (15 downto 0):=(others=>'0');
270
signal s_addr_valid        : std_logic:='0';
271
signal s_pc_req            : std_logic:='0';
272
signal s_pc_reply          : std_logic:='0';
273
 
274
 
275
signal s_src_mac_arp_rx            : std_logic_vector (47 downto 0):=(others=>'0');
276
signal s_src_ip_arp_rx             : std_logic_vector (31 downto 0):=(others=>'0');
277
signal s_addr_valid_pulse   : std_logic:='0';
278
signal s_pc_req_pulse       : std_logic:='0';
279
signal s_pc_reply_pulse     : std_logic:='0';
280
signal s_trans_data_pulse   : std_logic:='0';
281
--===========================================================================================================
282
 
283
 
284
 
285
 
286
 
287
 
288
 
289
 
290
 
291
 
292
 
293
 
294
--=================================== ARP LOOKUP_TABLE Signals ==============================================
295
signal   s_timeout_lookup_table_cnt        : std_logic_vector(31 downto 0):=(others=>'0');
296
 
297
signal   s_din              : std_logic_vector(82 downto 0):=(others=>'0');
298
signal   s_wr_en            : std_logic;
299
signal   s_dout             : std_logic_vector(82 downto 0):=(others=>'0');
300
signal   s_valid            : std_logic;
301
signal   s_empty              : std_logic;
302
signal   s_notempty           : std_logic;
303
 
304
 
305
signal   s_mac_addr_out     : std_logic_vector(47 downto 0):=(others=>'0');
306
signal   s_ip_addr_out      : std_logic_vector(31 downto 0):=(others=>'0');
307
signal   s_addr_valid_out   : std_logic:='0';
308
signal   s_request_out      : std_logic:='0';
309
signal   s_reply_out        : std_logic:='0';
310
--============================================================================================================
311
 
312
 
313
 
314
 
315
 
316
 
317
 
318
 
319
 
320
 
321
 
322
--============================ ARP TX Signals ================================================================
323
type t_arp_tx_state_type   is (IDLE,WAIT_CHN,SEND_DATA);
324
signal st_tx_arp_state          : t_arp_tx_state_type:=IDLE;
325
signal s_cnt_arp_tx          : std_logic_vector (7 downto 0):=(others=>'0');
326
signal s_arp_type          : std_logic_vector (15 downto 0):=(others=>'0');
327
signal s_dst_ip_addr     : std_logic_vector (31 downto 0):=(others=>'0');
328
signal s_dst_mac_addr1   : std_logic_vector (47 downto 0):=(others=>'0');
329
signal s_dst_mac_addr2   : std_logic_vector (47 downto 0):=(others=>'0');
330
--============================================================================================================
331
 
332
 
333
 
334
 
335
 
336
 
337
 
338
 
339
 
340
 
341
 
342
 
343
--============================== PING Signals =================================================================
344
--for Delayed Inputs
345
signal   s_mac_data_in_r        : std_logic_vector (7 downto 0);
346
signal   s_mac_data_in_valid_r  : std_logic;
347
signal   s_mac_data_in_last_r   : std_logic;
348
 
349
 
350
--Sync_fifo_ping Signals
351
signal   s_ip_rx_in          : std_logic_vector(14 downto 0);
352
signal   s_ip_rx_out         : std_logic_vector(14 downto 0):=(others=>'0');
353
signal   s_mac_data_in          : std_logic_vector(7 downto 0);
354
signal   s_mac_data_in_valid  : std_logic;
355
signal   s_mac_data_in_last   : std_logic;
356
signal   s_mac_data_in_last_d : std_logic;
357
signal   s_ip_rx_err_in       : std_logic_vector(3 downto 0);
358
signal   s_no_ping_data     : std_logic;
359
signal   s_empty_sync_fifo    : std_logic:='0';
360
signal   s_not_empty_sync_fifo: std_logic;
361
 
362
 
363
--Data_fifo_ping Signals
364
signal   s_rst_fifo_ping     : std_logic:='1';
365
signal   s_wr_en_fifo_ping   : std_logic:='0';
366
signal   s_din_fifo_ping     : std_logic_vector(7 downto 0):=(others=>'0');
367
signal   s_rd_en_fifo_ping   : std_logic;
368
signal   s_dout_fifo_ping    : std_logic_vector(7 downto 0);
369
 
370
 
371
--Checksum Signals
372
signal   s_checksum_data_out   : std_logic_vector(15 downto 0);
373
signal   s_checksum_data_in    : std_logic_vector(7 downto 0);
374
signal   s_checksum_start_calc : std_logic:='0';
375
signal   s_checksum_stop_calc  : std_logic:='0';
376
 
377
 
378
--st_PING_STATE Machine Process Signals 
379
type     t_ping_state            is (IDLE,ACQUIRE_DATA,WAIT_END,WAIT_CHN,SEND_DATA);
380
signal   st_PING_STATE               : t_ping_state:=IDLE;
381
signal   s_wr_cnt              : std_logic_vector(7 downto 0):=(others=>'0');
382
signal   s_rd_cnt              : std_logic_vector(7 downto 0):=(others=>'0');
383
signal   s_start_send          : std_logic;
384
 
385
 
386
signal   s_src_mac_ping           : std_logic_vector(47 downto 0):=(others=>'0');
387
signal   s_dst_mac_ping           : std_logic_vector(47 downto 0):=(others=>'0');
388
signal   s_src_ip_ping            : std_logic_vector(31 downto 0):=(others=>'0');
389
signal   s_dst_ip_ping            : std_logic_vector(31 downto 0):=(others=>'0');
390
--=================================================================================================================
391
 
392
 
393
 
394
 
395
 
396
 
397
 
398
 
399
 
400
 
401
 
402
 
403
--================================= Ping Checksum Calc Signals ====================================================
404
type        t_checksum_state   is   (IDLE,CALC);
405
signal      st_checksum_state      : t_checksum_state:=IDLE;
406
 
407
signal      s_flag       : std_logic:='0';
408
signal      s_din_r      : std_logic_vector(7 downto 0);
409
signal      s_sum        : std_logic_vector(31 downto 0):=(others=>'0');
410
--=================================================================================================================
411
 
412
 
413
 
414
 
415
 
416
 
417
 
418
 
419
 
420
 
421
 
422
--============================ TX_Arbitior Signals =====================================================================
423
type   t_state_type is       (IDLE,DATA_REQ,ARP_REQ,PING_REQ);
424
signal st_STATE               : t_state_type:=IDLE;
425
--======================================================================================================================
426
 
427
 
428
 
429
 
430
 
431
 
432
 
433
 
434
 
435
 
436
 
437
 
438
--============================ UDP RX Signals ===========================================================================
439
  type t_rx_udp_state_type is  (IDLE, UDP_HDR, USER_DATA, WAIT_END);
440
  signal st_RX_UDP_STATE         : t_rx_udp_state_type:=IDLE;
441
  signal s_cnt_udp_rx         : std_logic_vector (15 downto 0):=x"0001";
442
 
443
  signal s_src_ip_udp_rx  : std_logic_vector (31 downto 0):=(others=>'0');
444
  signal s_src_port       : std_logic_vector (15 downto 0):=(others=>'0');
445
  signal s_dst_port       : std_logic_vector (15 downto 0):=(others=>'0');
446
  signal s_data_len_udp_rx       : std_logic_vector (15 downto 0):=(others=>'0');
447
  signal s_err_out        : std_logic_vector (3 downto 0) :=(others=>'0');
448
 --======================================================================================================================= 
449
 
450
 
451
 
452
 
453
 
454
 
455
 
456
 
457
 
458
 
459
 
460
 --============================ UDP TX Signals =============================================================================
461
  type t_tx_udp_state_type     is (IDLE,SEND_DATA);
462
  signal st_tx_udp_state        : t_tx_udp_state_type:=IDLE;
463
 
464
  signal s_cnt_udp_tx        : std_logic_vector (15 downto 0):=(others=>'0');
465
  signal s_ip_data_len   : std_logic_vector (15 downto 0);
466
  signal s_udp_header      : std_logic_vector (7 downto 0):=(others=>'0');
467
--==========================================================================================================================
468
 
469
 
470
 
471
 
472
 
473
 
474
 
475
 
476
 
477
 
478
 
479
--============================ PHY_Interface Signals =======================================================================
480
signal s_gmii_col_reg         : std_logic;
481
signal s_gmii_col_reg_reg     : std_logic;
482
signal s_gmii_rx_clk          : std_logic;
483
--==========================================================================================================================
484
 
485
 
486
 
487
 
488
 
489
 
490
 
491
 
492
 
493
 
494
 
495
--=========================== Ping_Pong Fifo Signals =======================================================================
496
signal s_empty1              : std_logic;
497
signal s_empty2              : std_logic;
498
signal s_notempty1           : std_logic;
499
signal s_notempty2           : std_logic;
500
 
501
 
502
signal s_data_m              : std_logic_vector(7 downto 0);
503
signal s_valid_m             : std_logic;
504
signal s_last_m              : std_logic;
505
 
506
 
507
signal s_wr_en_a             : std_logic:='0';
508
signal s_din_a               : std_logic_vector(7 downto 0):=(others=>'0');
509
signal s_rd_en_a             : std_logic;
510
signal s_dout_a              : std_logic_vector(7 downto 0);
511
signal s_valid_a             : std_logic;
512
signal s_empty_a             : std_logic;
513
 
514
signal s_wr_en_b             : std_logic:='0';
515
signal s_din_b               : std_logic_vector(7 downto 0):=(others=>'0');
516
signal s_rd_en_b             : std_logic;
517
signal s_dout_b              : std_logic_vector(7 downto 0);
518
signal s_valid_b             : std_logic;
519
signal s_empty_b             : std_logic;
520
 
521
 
522
signal s_cnt_a               : std_logic_vector(15 downto 0):=(others=>'0');
523
signal s_cnt_b               : std_logic_vector(15 downto 0):=(others=>'0');
524
signal s_rd_cnt_a            : std_logic_vector(15 downto 0):=(others=>'0');
525
signal s_rd_cnt_b            : std_logic_vector(15 downto 0):=(others=>'0');
526
 
527
signal s_busy_a              : std_logic:='0';
528
signal s_busy_b              : std_logic:='0';
529
 
530
signal s_last_a              : std_logic:='0';
531
signal s_last_b              : std_logic:='0';
532
 
533
signal s_dout_len          : std_logic_vector(15 downto 0);
534
 
535
type        t_pingpong_state     is (wait_data,rd_fifo_a,rd_fifo_b);
536
signal      st_ping_pong_state          : t_pingpong_state:=wait_data;
537
--========================================================================================================================= 
538
 
539
 
540
begin
541
 
542
--===== Process for Deliver Tx_Channel to IP or ARP or Ping Data ==============================
543
p_priority:process(i_tx_clk)
544
begin
545
if (rising_edge(i_tx_clk)) then
546
if (i_reset = '1') then
547
         st_STATE                       <= IDLE;
548
else
549
CASE st_STATE IS
550
 
551
WHEN     IDLE    =>
552
            if (i_req_1 = '1') then
553
                st_STATE        <= DATA_REQ;
554
            elsif (i_req_2 = '1') then
555
                st_STATE        <= ARP_REQ;
556
       elsif (i_req_3 = '1') then
557
                st_STATE        <= PING_REQ;
558
       end if;
559
 
560
WHEN     DATA_REQ    =>
561
                 if (i_req_1 = '0') then
562
                     st_STATE           <= IDLE;
563
                 end if;
564
 
565
WHEN     ARP_REQ    =>
566
                 if (i_req_2 = '0') then
567
                     st_STATE           <= IDLE;
568
                 end if;
569
 
570
WHEN     PING_REQ    =>
571
                 if (i_req_3 = '0') then
572
                     st_STATE           <= IDLE;
573
                 end if;
574
 
575
END CASE;
576
end if;
577
end if;
578
end process p_priority;
579
--==========================================================================================
580
 
581
--========== Assign Data to Output =========================================================
582
o_data      <= i_data_1     when (st_STATE=DATA_REQ) else i_data_2  when (st_STATE=ARP_REQ) else i_data_3  when (st_STATE=PING_REQ) else(others=>'0');
583
o_valid     <= i_valid_1    when (st_STATE=DATA_REQ) else i_valid_2 when (st_STATE=ARP_REQ) else i_valid_3 when (st_STATE=PING_REQ) else '0';
584
o_last      <= i_last_1     when (st_STATE=DATA_REQ) else i_last_2  when (st_STATE=ARP_REQ) else i_last_3  when (st_STATE=PING_REQ) else '0';
585
o_grant_1   <= '1'          when (st_STATE=DATA_REQ) else '0';
586
o_grant_2   <= '1'          when (st_STATE=ARP_REQ)  else '0';
587
o_grant_3   <= '1'          when (st_STATE=PING_REQ) else '0';
588
--==========================================================================================
589
 
590
end Behavioral;

powered by: WebSVN 2.1.0

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