OpenCores
URL https://opencores.org/ocsvn/ethernet_tri_mode/ethernet_tri_mode/trunk

Subversion Repositories ethernet_tri_mode

[/] [ethernet_tri_mode/] [tags/] [release-1-0/] [rtl/] [verilog/] [MAC_tx/] [MAC_tx_Ctrl.v] - Blame information for rev 15

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 maverickis
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  MAC_tx_ctrl.v                                               ////
4
////                                                              ////
5
////  This file is part of the Ethernet IP core project           ////
6
////  http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////
7
////                                                              ////
8
////  Author(s):                                                  ////
9 7 maverickis
////      - Jon Gao (gaojon@yahoo.com)                            ////
10 5 maverickis
////                                                              ////
11
////                                                              ////
12
//////////////////////////////////////////////////////////////////////
13
////                                                              ////
14
//// Copyright (C) 2001 Authors                                   ////
15
////                                                              ////
16
//// This source file may be used and distributed without         ////
17
//// restriction provided that this copyright statement is not    ////
18
//// removed from the file and that any derivative work contains  ////
19
//// the original copyright notice and the associated disclaimer. ////
20
////                                                              ////
21
//// This source file is free software; you can redistribute it   ////
22
//// and/or modify it under the terms of the GNU Lesser General   ////
23
//// Public License as published by the Free Software Foundation; ////
24
//// either version 2.1 of the License, or (at your option) any   ////
25
//// later version.                                               ////
26
////                                                              ////
27
//// This source is distributed in the hope that it will be       ////
28
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
29
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
30
//// PURPOSE.  See the GNU Lesser General Public License for more ////
31
//// details.                                                     ////
32
////                                                              ////
33
//// You should have received a copy of the GNU Lesser General    ////
34
//// Public License along with this source; if not, download it   ////
35
//// from http://www.opencores.org/lgpl.shtml                     ////
36
////                                                              ////
37
//////////////////////////////////////////////////////////////////////
38
//                                                                    
39
// CVS Revision History                                               
40
//                                                                    
41 6 maverickis
// $Log: not supported by cvs2svn $
42 7 maverickis
// Revision 1.3  2005/12/16 06:44:17  Administrator
43
// replaced tab with space.
44
// passed 9.6k length frame test.
45 6 maverickis
//
46 7 maverickis
// Revision 1.2  2005/12/13 12:15:38  Administrator
47
// no message
48
//
49 6 maverickis
// Revision 1.1.1.1  2005/12/13 01:51:45  Administrator
50
// no message
51
//                                           
52 5 maverickis
 
53
module MAC_tx_ctrl (
54 7 maverickis
Reset               ,
55
Clk                 ,
56 5 maverickis
//CRC_gen Interface  
57 7 maverickis
CRC_init            ,
58
Frame_data          ,
59
Data_en             ,
60
CRC_rd              ,
61
CRC_end             ,
62
CRC_out             ,
63 5 maverickis
//Ramdon_gen interfac
64 7 maverickis
Random_init         ,
65
RetryCnt            ,
66
Random_time_meet    ,
67 5 maverickis
//flow control      
68 7 maverickis
pause_apply         ,
69
pause_quanta_sub    ,
70
xoff_gen            ,
71
xoff_gen_complete   ,
72
xon_gen             ,
73
xon_gen_complete    ,
74 5 maverickis
//MAC_tx_FF          
75 7 maverickis
Fifo_data           ,
76
Fifo_rd             ,
77
Fifo_eop            ,
78
Fifo_da             ,
79
Fifo_rd_finish      ,
80
Fifo_rd_retry       ,
81
Fifo_ra             ,
82
Fifo_data_err_empty ,
83
Fifo_data_err_full  ,
84 5 maverickis
//RMII               
85 7 maverickis
TxD                 ,
86
TxEn                ,
87
CRS                 ,
88 5 maverickis
//MAC_tx_addr_add   
89 7 maverickis
MAC_tx_addr_rd      ,
90
MAC_tx_addr_data    ,
91 5 maverickis
MAC_tx_addr_init    ,
92
//RMON               
93 7 maverickis
Tx_pkt_type_rmon    ,
94
Tx_pkt_length_rmon  ,
95
Tx_apply_rmon       ,
96 5 maverickis
Tx_pkt_err_type_rmon,
97
//CPU  
98 7 maverickis
pause_frame_send_en ,
99
pause_quanta_set    ,
100
MAC_tx_add_en       ,
101
FullDuplex          ,
102
MaxRetry            ,
103
IFGset
104 5 maverickis
);
105
 
106 7 maverickis
input           Reset               ;
107
input           Clk                 ;
108
                //CRC_gen Interface 
109
output          CRC_init            ;
110
output  [7:0]   Frame_data          ;
111
output          Data_en             ;
112
output          CRC_rd              ;
113
input           CRC_end             ;
114
input   [7:0]   CRC_out             ;
115
                //Ramdon_gen interface
116
output          Random_init         ;
117
output  [3:0]   RetryCnt            ;
118
input           Random_time_meet    ;//levle hight indicate random time passed away
119
                //flow control
120
input           pause_apply         ;
121
output          pause_quanta_sub    ;
122
input           xoff_gen            ;
123
output          xoff_gen_complete   ;
124
input           xon_gen             ;
125
output          xon_gen_complete    ;
126
                //MAC_rx_FF
127
input   [7:0]   Fifo_data           ;
128
output          Fifo_rd             ;
129
input           Fifo_eop            ;
130
input           Fifo_da             ;
131
output          Fifo_rd_finish      ;
132
output          Fifo_rd_retry       ;
133
input           Fifo_ra             ;
134
input           Fifo_data_err_empty ;
135
input           Fifo_data_err_full  ;
136
                //RMII
137
output  [7:0]   TxD                 ;
138
output          TxEn                ;
139
input           CRS                 ;
140
                //MAC_tx_addr_add
141
output          MAC_tx_addr_init    ;
142
output          MAC_tx_addr_rd      ;
143
input   [7:0]   MAC_tx_addr_data    ;
144
                //RMON
145
output  [2:0]   Tx_pkt_type_rmon    ;
146
output  [15:0]  Tx_pkt_length_rmon  ;
147
output          Tx_apply_rmon       ;
148
output  [2:0]   Tx_pkt_err_type_rmon;
149
                //CPU
150
input           pause_frame_send_en ;
151
input   [15:0]  pause_quanta_set    ;
152
input           MAC_tx_add_en       ;
153
input           FullDuplex          ;
154
input   [3:0]   MaxRetry            ;
155
input   [5:0]   IFGset              ;
156
//******************************************************************************        
157 5 maverickis
//internal signals                                                              
158
//******************************************************************************   
159 7 maverickis
parameter       StateIdle           =4'd00;
160
parameter       StatePreamble       =4'd01;
161
parameter       StateSFD            =4'd02;
162
parameter       StateData           =4'd03;
163
parameter       StatePause          =4'd04;
164
parameter       StatePAD            =4'd05;
165
parameter       StateFCS            =4'd06;
166
parameter       StateIFG            =4'd07;
167
parameter       StateJam            =4'd08;
168
parameter       StateBackOff        =4'd09;
169
parameter       StateJamDrop        =4'd10;
170
parameter       StateFFEmptyDrop    =4'd11;
171
parameter       StateSwitchNext     =4'd12;
172
parameter       StateDefer          =4'd13;
173
parameter       StateSendPauseFrame =4'd14;
174 5 maverickis
 
175 7 maverickis
reg [3:0]       Current_state   /*synthesis syn_keep=1 */;
176
reg [3:0]       Next_state;
177
reg [5:0]       IFG_counter;
178
reg [4:0]       Preamble_counter;//
179
reg [7:0]       TxD_tmp             ;
180
reg             TxEn_tmp            ;
181
reg [15:0]      Tx_pkt_length_rmon  ;
182
reg             Tx_apply_rmon       ;
183
reg [2:0]       Tx_pkt_err_type_rmon;
184
reg [3:0]       RetryCnt            ;
185
reg             Random_init         ;
186
reg             Fifo_rd_finish      ;
187
reg             Fifo_rd_retry       ;
188
reg [7:0]       TxD                 ;
189
reg             TxEn                ;
190
reg             CRC_init            ;
191
reg             Data_en             ;
192
reg             CRC_rd              ;
193
reg             Fifo_rd             ;
194
reg             MAC_tx_addr_rd      ;
195
reg             MAC_header_slot     ;
196
reg             MAC_header_slot_tmp ;
197
reg [2:0]       Tx_pkt_type_rmon    ;
198
wire            Collision           ;
199
reg             MAC_tx_addr_init    ;
200
reg             Src_MAC_ptr         ;
201
reg [7:0]       IPLengthCounter     ;//for pad append
202
reg [1:0]       PADCounter          ;
203
reg [7:0]       JamCounter          ;
204
reg             PktDrpEvenPtr       ;
205
reg [7:0]       pause_counter       ;
206
reg             pause_quanta_sub    ;
207
reg             pause_frame_send_en_dl1 ;
208
reg [15:0]      pause_quanta_set_dl1    ;
209
reg [4:0]       send_pause_frame_counter    ;
210
reg             xoff_gen_complete   ;
211
reg             xon_gen_complete    ;
212 5 maverickis
//******************************************************************************    
213
//boundery signal processing                                                             
214
//****************************************************************************** 
215
always @(posedge Clk or posedge Reset)
216 7 maverickis
    if (Reset)
217
        begin
218
        pause_frame_send_en_dl1         <=0;
219
        pause_quanta_set_dl1            <=0;
220
        end
221
    else
222
        begin
223
        pause_frame_send_en_dl1         <=pause_frame_send_en   ;
224
        pause_quanta_set_dl1            <=pause_quanta_set      ;
225
        end
226 5 maverickis
//******************************************************************************    
227
//state machine                                                             
228
//****************************************************************************** 
229
assign Collision=TxEn&CRS;
230
 
231
always @(posedge Clk or posedge Reset)
232 7 maverickis
    if (Reset)
233
        send_pause_frame_counter    <=0;
234
    else if(Current_state!=StateSendPauseFrame)
235
        send_pause_frame_counter    <=0;
236
    else
237
        send_pause_frame_counter    <=send_pause_frame_counter +1;
238 5 maverickis
 
239
always @(posedge Clk or posedge Reset)
240 7 maverickis
    if (Reset)
241
        pause_counter   <=0;
242
    else if (Current_state!=StatePause)
243
        pause_counter   <=0;
244
    else
245
        pause_counter   <=pause_counter+1;
246
 
247 5 maverickis
always @(posedge Clk or posedge Reset)
248 7 maverickis
    if (Reset)
249
        IPLengthCounter     <=0;
250
    else if (Current_state==StateSwitchNext)
251
        IPLengthCounter     <=0;
252
    else if (IPLengthCounter!=8'hff&&(Current_state==StateData||Current_state==StatePAD))
253
        IPLengthCounter     <=IPLengthCounter+1;
254 5 maverickis
 
255
always @(posedge Clk or posedge Reset)
256 7 maverickis
    if (Reset)
257
        PADCounter      <=0;
258
    else if (Current_state!=StatePAD)
259
        PADCounter      <=0;
260
    else
261
        PADCounter      <=PADCounter+1;
262 5 maverickis
 
263
always @(posedge Clk or posedge Reset)
264 7 maverickis
    if (Reset)
265
        Current_state       <=StateDefer;
266
    else
267
        Current_state       <=Next_state;
268
 
269 5 maverickis
always @ (*)
270 7 maverickis
        case (Current_state)
271
            StateDefer:
272
                if ((FullDuplex)||(!FullDuplex&&!CRS))
273
                    Next_state=StateIFG;
274
                else
275
                    Next_state=Current_state;
276
            StateIFG:
277
                if (!FullDuplex&&CRS)
278
                    Next_state=StateDefer;
279
                else if ((FullDuplex&&IFG_counter==IFGset-4)||(!FullDuplex&&!CRS&&IFG_counter==IFGset-4))//È¥µôһЩµ¢¸éµÄʱ¼ä
280
                    Next_state=StateIdle;
281
                else
282
                    Next_state=Current_state;
283
            StateIdle:
284
                if (!FullDuplex&&CRS)
285
                    Next_state=StateDefer;
286
                else if (pause_apply)
287
                    Next_state=StatePause;
288
                else if ((FullDuplex&&Fifo_ra)||(!FullDuplex&&!CRS&&Fifo_ra)||(pause_frame_send_en_dl1&&(xoff_gen||xon_gen)))
289
                    Next_state=StatePreamble;
290
                else
291
                    Next_state=Current_state;
292
            StatePause:
293
                if (pause_counter==512/8)
294
                    Next_state=StateDefer;
295
                else
296
                    Next_state=Current_state;
297
            StatePreamble:
298
                if (!FullDuplex&&Collision)
299
                    Next_state=StateJam;
300
                else if ((FullDuplex&&Preamble_counter==7)||(!FullDuplex&&!Collision&&Preamble_counter==7))
301
                    Next_state=StateSFD;
302
                else
303
                    Next_state=Current_state;
304
            StateSFD:
305
                if (!FullDuplex&&Collision)
306
                    Next_state=StateJam;
307
                else if (pause_frame_send_en_dl1&&(xoff_gen||xon_gen))
308
                    Next_state=StateSendPauseFrame;
309
                else
310
                    Next_state=StateData;
311
            StateSendPauseFrame:
312
                if (send_pause_frame_counter==19)
313
                    Next_state=StatePAD;
314
                else
315
                    Next_state=Current_state;
316
            StateData:
317
                if (!FullDuplex&&Collision)
318
                    Next_state=StateJam;
319
                else if (Fifo_data_err_empty)
320
                    Next_state=StateFFEmptyDrop;
321
                else if (Fifo_eop&&IPLengthCounter>=59)//IP+MAC+TYPE=60 ,start from 0
322
                    Next_state=StateFCS;
323
                else if (Fifo_eop)
324
                    Next_state=StatePAD;
325
                else
326
                    Next_state=StateData;
327
            StatePAD:
328
                if (!FullDuplex&&Collision)
329
                    Next_state=StateJam;
330
                else if (IPLengthCounter>=59)
331
                    Next_state=StateFCS;
332
                else
333
                    Next_state=Current_state;
334
            StateJam:
335
                if (RetryCnt<=MaxRetry&&JamCounter==16)
336
                    Next_state=StateBackOff;
337
                else if (RetryCnt>MaxRetry)
338
                    Next_state=StateJamDrop;
339
                else
340
                    Next_state=Current_state;
341
            StateBackOff:
342
                if (Random_time_meet)
343
                    Next_state  =StateDefer;
344
                else
345
                    Next_state  =Current_state;
346
            StateFCS:
347
                if (!FullDuplex&&Collision)
348
                    Next_state  =StateJam;
349
                else if (pause_frame_send_en_dl1&&(xoff_gen||xon_gen))
350
                    Next_state  =StateDefer;
351
                else if (CRC_end)
352
                    Next_state  =StateSwitchNext;
353
                else
354
                    Next_state  =Current_state;
355
            StateFFEmptyDrop:
356
                if (Fifo_eop)
357
                    Next_state  =StateSwitchNext;
358
                else
359
                    Next_state  =Current_state;
360
            StateJamDrop:
361
                if (Fifo_eop)
362
                    Next_state  =StateSwitchNext;
363
                else
364
                    Next_state  =Current_state;
365
            StateSwitchNext:
366
                    Next_state  =StateDefer;
367
            default:
368
                Next_state  =StateDefer;
369
        endcase
370 5 maverickis
 
371
 
372 7 maverickis
 
373 5 maverickis
always @ (posedge Clk or posedge Reset)
374 7 maverickis
    if (Reset)
375
        JamCounter      <=0;
376
    else if (Current_state!=StateJam)
377
        JamCounter      <=0;
378
    else if (Current_state==StateJam)
379
        JamCounter      <=JamCounter+1;
380
 
381
 
382 5 maverickis
always @ (posedge Clk or posedge Reset)
383 7 maverickis
    if (Reset)
384
        RetryCnt        <=0;
385
    else if (Current_state==StateSwitchNext)
386
        RetryCnt        <=0;
387
    else if (Current_state==StateJam&&Next_state==StateBackOff)
388
        RetryCnt        <=RetryCnt + 1;
389
 
390 5 maverickis
always @ (posedge Clk or posedge Reset)
391 7 maverickis
    if (Reset)
392
        IFG_counter     <=0;
393
    else if (Current_state!=StateIFG)
394
        IFG_counter     <=0;
395
    else
396
        IFG_counter     <=IFG_counter + 1;
397 5 maverickis
 
398
always @ (posedge Clk or posedge Reset)
399 7 maverickis
    if (Reset)
400
        Preamble_counter    <=0;
401
    else if (Current_state!=StatePreamble)
402
        Preamble_counter    <=0;
403
    else
404
        Preamble_counter    <=Preamble_counter+ 1;
405
 
406 5 maverickis
always @ (posedge Clk or posedge Reset)
407 7 maverickis
    if (Reset)
408
        PktDrpEvenPtr       <=0;
409
    else if(Current_state==StateJamDrop||Current_state==StateFFEmptyDrop)
410
        PktDrpEvenPtr       <=~PktDrpEvenPtr;
411 5 maverickis
//******************************************************************************    
412
//generate output signals                                                           
413
//****************************************************************************** 
414
//CRC related
415
always @(Current_state)
416 7 maverickis
    if (Current_state==StateSFD)
417
        CRC_init    =1;
418
    else
419
        CRC_init    =0;
420
 
421 5 maverickis
assign Frame_data=TxD_tmp;
422
 
423
always @(Current_state)
424 7 maverickis
    if (Current_state==StateData||Current_state==StatePAD)
425
        Data_en     =1;
426
    else
427
        Data_en     =0;
428
 
429 5 maverickis
always @(Current_state)
430 7 maverickis
    if (Current_state==StateFCS)
431
        CRC_rd      =1;
432
    else
433
        CRC_rd      =0;
434
 
435 5 maverickis
//Ramdon_gen interface
436
always @(Current_state or Next_state)
437 7 maverickis
    if (Current_state==StateJam&&Next_state==StateBackOff)
438
        Random_init =1;
439
    else
440
        Random_init =0;
441 5 maverickis
 
442
//MAC_rx_FF
443
//data have one cycle delay after fifo read signals  
444
always @ (*)
445 7 maverickis
    if (Current_state==StateData ||
446
        Current_state==StateSFD&&!(pause_frame_send_en_dl1&&(xoff_gen||xon_gen))  ||
447
        Current_state==StateJamDrop&&PktDrpEvenPtr||
448
        Current_state==StateFFEmptyDrop&&PktDrpEvenPtr )
449
        Fifo_rd     =1;
450
    else
451
        Fifo_rd     =0;
452
 
453 5 maverickis
always @ (Current_state)
454 7 maverickis
    if (Current_state==StateSwitchNext)
455
        Fifo_rd_finish  =1;
456
    else
457
        Fifo_rd_finish  =0;
458
 
459 5 maverickis
always @ (Current_state)
460 7 maverickis
    if (Current_state==StateJam)
461
        Fifo_rd_retry   =1;
462
    else
463
        Fifo_rd_retry   =0;
464 5 maverickis
//RMII
465
always @(Current_state)
466 7 maverickis
    if (Current_state==StatePreamble||Current_state==StateSFD||
467
        Current_state==StateData||Current_state==StateSendPauseFrame||
468
        Current_state==StateFCS||Current_state==StatePAD||Current_state==StateJam)
469
        TxEn_tmp    =1;
470
    else
471
        TxEn_tmp    =0;
472 5 maverickis
 
473 7 maverickis
//gen txd data      
474 5 maverickis
always @(*)
475 7 maverickis
    case (Current_state)
476
        StatePreamble:
477
            TxD_tmp =8'h55;
478
        StateSFD:
479
            TxD_tmp =8'hd5;
480
        StateData:
481
            if (Src_MAC_ptr&&MAC_tx_add_en)
482
                TxD_tmp =MAC_tx_addr_data;
483
            else
484
                TxD_tmp =Fifo_data;
485
        StateSendPauseFrame:
486
            if (Src_MAC_ptr)
487
                TxD_tmp =MAC_tx_addr_data;
488
            else
489
                case (send_pause_frame_counter)
490
                    5'd0:   TxD_tmp =8'h01;
491
                    5'd1:   TxD_tmp =8'h80;
492
                    5'd2:   TxD_tmp =8'hc2;
493
                    5'd3:   TxD_tmp =8'h00;
494
                    5'd4:   TxD_tmp =8'h00;
495
                    5'd5:   TxD_tmp =8'h01;
496
                    5'd12:  TxD_tmp =8'h88;//type
497
                    5'd13:  TxD_tmp =8'h08;//
498
                    5'd14:  TxD_tmp =8'h00;//opcode
499
                    5'd15:  TxD_tmp =8'h01;
500
                    5'd16:  TxD_tmp =pause_quanta_set_dl1[15:8];
501
                    5'd17:  TxD_tmp =pause_quanta_set_dl1[7:0];
502
                    default:TxD_tmp =0;
503
                endcase
504
 
505
        StatePAD:
506
                TxD_tmp =8'h00;
507
        StateJam:
508
                TxD_tmp =8'h01; //jam sequence
509
        StateFCS:
510
            TxD_tmp =CRC_out;
511
        default:
512
            TxD_tmp =2'b0;
513
    endcase
514 5 maverickis
always @ (posedge Clk or posedge Reset)
515 7 maverickis
    if (Reset)
516
        begin
517
        TxD     <=0;
518
        TxEn    <=0;
519
        end
520
    else
521
        begin
522
        TxD     <=TxD_tmp;
523
        TxEn    <=TxEn_tmp;
524
        end
525 5 maverickis
//RMON
526
 
527
 
528
always @ (posedge Clk or posedge Reset)
529 7 maverickis
    if (Reset)
530
        Tx_pkt_length_rmon      <=0;
531
    else if (Current_state==StateSFD)
532
        Tx_pkt_length_rmon      <=0;
533
    else if (Current_state==StateData)
534
        Tx_pkt_length_rmon      <=Tx_pkt_length_rmon+1;
535
 
536 5 maverickis
always @ (posedge Clk or posedge Reset)
537 7 maverickis
    if (Reset)
538
        Tx_apply_rmon       <=0;
539
    else if ((Fifo_eop&&Current_state==StateJamDrop)||
540
             (Fifo_eop&&Current_state==StateFFEmptyDrop)||
541
             CRC_end)
542
        Tx_apply_rmon       <=1;
543
    else
544
        Tx_apply_rmon       <=0;
545
 
546 5 maverickis
always @ (posedge Clk or posedge Reset)
547 7 maverickis
    if (Reset)
548
        Tx_pkt_err_type_rmon    <=0;
549
    else if(Fifo_eop&&Current_state==StateJamDrop)
550
        Tx_pkt_err_type_rmon    <=3'b001;//
551
    else if(Fifo_eop&&Current_state==StateFFEmptyDrop)
552
        Tx_pkt_err_type_rmon    <=3'b010;//underflow
553
    else if(Fifo_eop&&Fifo_data_err_full)
554
        Tx_pkt_err_type_rmon    <=3'b011;//overflow
555
    else if(CRC_end)
556
        Tx_pkt_err_type_rmon    <=3'b100;
557
 
558 5 maverickis
always @ (posedge Clk or posedge Reset)
559 7 maverickis
    if (Reset)
560
        MAC_header_slot_tmp <=0;
561
    else if(Current_state==StateSFD&&Next_state==StateData)
562
        MAC_header_slot_tmp <=0;
563
    else
564
        MAC_header_slot_tmp <=0;
565
 
566 5 maverickis
always @ (posedge Clk or posedge Reset)
567 7 maverickis
    if (Reset)
568
        MAC_header_slot     <=0;
569
    else
570
        MAC_header_slot     <=MAC_header_slot_tmp;
571 5 maverickis
 
572
always @ (posedge Clk or posedge Reset)
573 7 maverickis
    if (Reset)
574
        Tx_pkt_type_rmon    <=0;
575
    else if (Current_state==StateSendPauseFrame)
576
        Tx_pkt_type_rmon    <=3'b100;
577
    else if(MAC_header_slot)
578
        Tx_pkt_type_rmon    <={1'b0,TxD_tmp};
579 5 maverickis
 
580 7 maverickis
 
581 5 maverickis
always @(Tx_pkt_length_rmon)
582 7 maverickis
    if (Tx_pkt_length_rmon>=6&&Tx_pkt_length_rmon<=11)
583
        Src_MAC_ptr         =1;
584
    else
585
        Src_MAC_ptr         =0;
586 5 maverickis
 
587
//MAC_tx_addr_add  
588 7 maverickis
always @ (posedge Clk or posedge Reset)
589
    if (Reset)
590
        MAC_tx_addr_rd  <=0;
591
    else if ((Tx_pkt_length_rmon>=4&&Tx_pkt_length_rmon<=9)&&(MAC_tx_add_en||Current_state==StateSendPauseFrame))
592
        MAC_tx_addr_rd  <=1;
593
    else
594
        MAC_tx_addr_rd  <=0;
595 5 maverickis
 
596
always @ (Tx_pkt_length_rmon or Fifo_rd)
597 7 maverickis
    if ((Tx_pkt_length_rmon==3)&&Fifo_rd)
598
        MAC_tx_addr_init=1;
599
    else
600
        MAC_tx_addr_init=0;
601 5 maverickis
 
602
//flow control
603
always @ (posedge Clk or posedge Reset)
604 7 maverickis
    if (Reset)
605
        pause_quanta_sub    <=0;
606
    else if(pause_counter==512/8)
607
        pause_quanta_sub    <=1;
608
    else
609
        pause_quanta_sub    <=0;
610 5 maverickis
 
611
 
612
always @ (posedge Clk or posedge Reset)
613 7 maverickis
    if (Reset)
614
        xoff_gen_complete   <=0;
615
    else if(Current_state==StateDefer&&xoff_gen)
616
        xoff_gen_complete   <=1;
617
    else
618
        xoff_gen_complete   <=0;
619
 
620
 
621 5 maverickis
always @ (posedge Clk or posedge Reset)
622 7 maverickis
    if (Reset)
623
        xon_gen_complete    <=0;
624
    else if(Current_state==StateDefer&&xon_gen)
625
        xon_gen_complete    <=1;
626
    else
627
        xon_gen_complete    <=0;
628 5 maverickis
 
629
endmodule

powered by: WebSVN 2.1.0

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