Remove old mac. Good riddance.
[debian/gnuradio] / usrp2 / fpga / eth / rtl / verilog / MAC_tx / MAC_tx_ctrl.v
diff --git a/usrp2/fpga/eth/rtl/verilog/MAC_tx/MAC_tx_ctrl.v b/usrp2/fpga/eth/rtl/verilog/MAC_tx/MAC_tx_ctrl.v
deleted file mode 100644 (file)
index 8da2e25..0000000
+++ /dev/null
@@ -1,656 +0,0 @@
-//////////////////////////////////////////////////////////////////////\r
-////                                                              ////\r
-////  MAC_tx_ctrl.v                                               ////\r
-////                                                              ////\r
-////  This file is part of the Ethernet IP core project           ////\r
-////  http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////\r
-////                                                              ////\r
-////  Author(s):                                                  ////\r
-////      - Jon Gao (gaojon@yahoo.com)                            ////\r
-////                                                              ////\r
-////                                                              ////\r
-//////////////////////////////////////////////////////////////////////\r
-////                                                              ////\r
-//// Copyright (C) 2001 Authors                                   ////\r
-////                                                              ////\r
-//// This source file may be used and distributed without         ////\r
-//// restriction provided that this copyright statement is not    ////\r
-//// removed from the file and that any derivative work contains  ////\r
-//// the original copyright notice and the associated disclaimer. ////\r
-////                                                              ////\r
-//// This source file is free software; you can redistribute it   ////\r
-//// and/or modify it under the terms of the GNU Lesser General   ////\r
-//// Public License as published by the Free Software Foundation; ////\r
-//// either version 2.1 of the License, or (at your option) any   ////\r
-//// later version.                                               ////\r
-////                                                              ////\r
-//// This source is distributed in the hope that it will be       ////\r
-//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////\r
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////\r
-//// PURPOSE.  See the GNU Lesser General Public License for more ////\r
-//// details.                                                     ////\r
-////                                                              ////\r
-//// You should have received a copy of the GNU Lesser General    ////\r
-//// Public License along with this source; if not, download it   ////\r
-//// from http://www.opencores.org/lgpl.shtml                     ////\r
-////                                                              ////\r
-//////////////////////////////////////////////////////////////////////\r
-//                                                                    \r
-// CVS Revision History                                               \r
-//                                                                    \r
-// $Log: MAC_tx_Ctrl.v,v $\r
-// Revision 1.4  2006/06/25 04:58:56  maverickist\r
-// no message\r
-//\r
-// Revision 1.3  2006/01/19 14:07:54  maverickist\r
-// verification is complete.\r
-//\r
-// Revision 1.3  2005/12/16 06:44:17  Administrator\r
-// replaced tab with space.\r
-// passed 9.6k length frame test.\r
-//\r
-// Revision 1.2  2005/12/13 12:15:38  Administrator\r
-// no message\r
-//\r
-// Revision 1.1.1.1  2005/12/13 01:51:45  Administrator\r
-// no message\r
-//                                           \r
-\r
-module MAC_tx_ctrl (  \r
-Reset               ,\r
-Clk                 ,\r
-//CRC_gen Interface  \r
-CRC_init            ,\r
-Frame_data          ,\r
-Data_en             ,\r
-CRC_rd              ,\r
-CRC_end             ,\r
-CRC_out             ,\r
-//Ramdon_gen interfac\r
-Random_init         ,\r
-RetryCnt            ,\r
-Random_time_meet    ,\r
-//flow control      \r
-pause_apply         ,\r
-pause_quanta_sub    ,\r
-xoff_gen            ,\r
-xoff_gen_complete   ,\r
-xon_gen             ,\r
-xon_gen_complete    ,\r
-//MAC_tx_FF          \r
-Fifo_data           ,\r
-Fifo_rd             ,\r
-Fifo_eop            ,\r
-Fifo_da             ,\r
-Fifo_rd_finish      ,\r
-Fifo_rd_retry       ,\r
-Fifo_ra             ,\r
-Fifo_data_err_empty ,\r
-Fifo_data_err_full  ,\r
-//RMII               \r
-TxD                 ,\r
-TxEn                ,\r
-CRS                 , \r
-//MAC_tx_addr_add   \r
-MAC_tx_addr_rd      ,\r
-MAC_tx_addr_data    ,\r
-MAC_tx_addr_init    ,\r
-//RMON               \r
-Tx_pkt_type_rmon    ,\r
-Tx_pkt_length_rmon  ,\r
-Tx_apply_rmon       ,\r
-Tx_pkt_err_type_rmon,\r
-//CPU  \r
-pause_quanta_set    ,              \r
-MAC_tx_add_en       ,  \r
-FullDuplex          ,\r
-MaxRetry            ,\r
-IFGset          \r
-);\r
-\r
-input           Reset               ;\r
-input           Clk                 ;\r
-                //CRC_gen Interface \r
-output          CRC_init            ;\r
-output  [7:0]   Frame_data          ;\r
-output          Data_en             ;\r
-output          CRC_rd              ;\r
-input           CRC_end             ;\r
-input   [7:0]   CRC_out             ;\r
-                //Ramdon_gen interface\r
-output          Random_init         ;\r
-output  [3:0]   RetryCnt            ;\r
-input           Random_time_meet    ;//levle hight indicate random time passed away\r
-                //flow control\r
-input           pause_apply         ;\r
-output          pause_quanta_sub    ;\r
-input           xoff_gen            ;\r
-output          xoff_gen_complete   ;\r
-input           xon_gen             ;\r
-output          xon_gen_complete    ;               \r
-                //MAC_rx_FF\r
-input   [7:0]   Fifo_data           ;\r
-output          Fifo_rd             ;\r
-input           Fifo_eop            ;\r
-input           Fifo_da             ;\r
-output          Fifo_rd_finish      ;\r
-output          Fifo_rd_retry       ;\r
-input           Fifo_ra             ;\r
-input           Fifo_data_err_empty ;\r
-input           Fifo_data_err_full  ;\r
-                //RMII\r
-output  [7:0]   TxD                 ;\r
-output          TxEn                ;   \r
-input           CRS                 ;\r
-                //MAC_tx_addr_add\r
-output          MAC_tx_addr_init    ;\r
-output          MAC_tx_addr_rd      ;\r
-input   [7:0]   MAC_tx_addr_data    ;\r
-                //RMON\r
-output  [2:0]   Tx_pkt_type_rmon    ;\r
-output  [15:0]  Tx_pkt_length_rmon  ;\r
-output          Tx_apply_rmon       ;\r
-output  [2:0]   Tx_pkt_err_type_rmon;   \r
-                //CPU\r
-input   [15:0]  pause_quanta_set    ;\r
-input           MAC_tx_add_en       ;               \r
-input           FullDuplex          ;\r
-input   [3:0]   MaxRetry            ;\r
-input   [5:0]   IFGset              ;\r
-//******************************************************************************        \r
-//internal signals                                                              \r
-//******************************************************************************   \r
-parameter       StateIdle           =4'd00;\r
-parameter       StatePreamble       =4'd01;\r
-parameter       StateSFD            =4'd02;\r
-parameter       StateData           =4'd03;\r
-parameter       StatePause          =4'd04;\r
-parameter       StatePAD            =4'd05;\r
-parameter       StateFCS            =4'd06;\r
-parameter       StateIFG            =4'd07;\r
-parameter       StateJam            =4'd08;\r
-parameter       StateBackOff        =4'd09;\r
-parameter       StateJamDrop        =4'd10;\r
-parameter       StateFFEmptyDrop    =4'd11;\r
-parameter       StateSwitchNext     =4'd12;\r
-parameter       StateDefer          =4'd13;\r
-parameter       StateSendPauseFrame =4'd14;\r
-\r
-reg [3:0]      Current_state;\r
-reg [3:0]       Next_state;\r
-reg [5:0]       IFG_counter;\r
-reg [4:0]       Preamble_counter;//\r
-reg [7:0]       TxD_tmp             ;   \r
-reg             TxEn_tmp            ;   \r
-reg [15:0]      Tx_pkt_length_rmon  ;\r
-reg             Tx_apply_rmon       ;\r
-reg [2:0]       Tx_pkt_err_type_rmon;   \r
-reg [3:0]       RetryCnt            ;\r
-reg             Random_init         ;\r
-reg             Fifo_rd_finish      ;\r
-reg             Fifo_rd_retry       ;\r
-reg [7:0]       TxD                 ;   \r
-reg             TxEn                ;   \r
-reg             CRC_init            ;\r
-reg             Data_en             ;\r
-reg             CRC_rd              ;\r
-reg             Fifo_rd             ;\r
-reg             MAC_tx_addr_rd      ;\r
-reg             MAC_header_slot     ;\r
-reg             MAC_header_slot_tmp ;\r
-reg [2:0]       Tx_pkt_type_rmon    ;\r
-wire            Collision           ; \r
-reg             MAC_tx_addr_init    ;\r
-reg             Src_MAC_ptr         ;\r
-reg [7:0]       IPLengthCounter     ;//for pad append\r
-reg [1:0]       PADCounter          ;\r
-reg [7:0]       JamCounter          ;\r
-reg             PktDrpEvenPtr       ;\r
-reg [7:0]       pause_counter       ;\r
-reg             pause_quanta_sub    ;\r
-reg [15:0]      pause_quanta_set_dl1    ;\r
-reg             xoff_gen_complete   ;\r
-reg             xon_gen_complete    ;\r
-//******************************************************************************    \r
-//boundery signal processing                                                             \r
-//****************************************************************************** \r
-always @(posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        begin  \r
-        pause_quanta_set_dl1            <=0;\r
-        end\r
-    else\r
-        begin  \r
-        pause_quanta_set_dl1            <=pause_quanta_set      ;\r
-        end     \r
-//******************************************************************************    \r
-//state machine                                                             \r
-//****************************************************************************** \r
-assign Collision=TxEn&CRS;\r
-\r
-always @(posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        IPLengthCounter     <=0;\r
-    else if (Current_state==StateDefer)\r
-        IPLengthCounter     <=0;    \r
-    else if (IPLengthCounter!=8'hff&&(Current_state==StateData||Current_state==StateSendPauseFrame||Current_state==StatePAD))\r
-        IPLengthCounter     <=IPLengthCounter+1;\r
-\r
-always @(posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        PADCounter      <=0;\r
-    else if (Current_state!=StatePAD)\r
-        PADCounter      <=0;\r
-    else\r
-        PADCounter      <=PADCounter+1;\r
-\r
-always @(posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        Current_state       <=StateDefer;\r
-    else \r
-        Current_state       <=Next_state;    \r
-        \r
-always @ (*)\r
-        case (Current_state)   \r
-            StateDefer:\r
-                if ((FullDuplex)||(!FullDuplex&&!CRS))\r
-                    Next_state=StateIFG;\r
-                else\r
-                    Next_state=Current_state;   \r
-            StateIFG:\r
-                if (!FullDuplex&&CRS)\r
-                    Next_state=StateDefer;\r
-                else if ((FullDuplex&&IFG_counter==IFGset-4)||(!FullDuplex&&!CRS&&IFG_counter==IFGset-4))//remove some additional time\r
-                    Next_state=StateIdle;\r
-                else\r
-                    Next_state=Current_state;           \r
-            StateIdle:\r
-                if (!FullDuplex&&CRS)\r
-                    Next_state=StateDefer;\r
-               else if (xoff_gen||xon_gen)\r
-                 Next_state=StatePreamble;\r
-                else if (pause_apply)\r
-                    Next_state=StatePause;          \r
-                else if ((FullDuplex||~CRS)&&Fifo_ra)\r
-                    Next_state=StatePreamble;\r
-                else\r
-                    Next_state=Current_state;   \r
-            StatePause:\r
-                if (pause_counter==512/8)\r
-                    Next_state=StateDefer;\r
-               else if (xoff_gen||xon_gen)\r
-                 Next_state=StateIdle;\r
-                else\r
-                    Next_state=Current_state;               \r
-            StatePreamble:\r
-                if (!FullDuplex&&Collision)\r
-                    Next_state=StateJam;\r
-                else if ((FullDuplex&&Preamble_counter==6)||(!FullDuplex&&!Collision&&Preamble_counter==6))\r
-                    Next_state=StateSFD;\r
-                else\r
-                    Next_state=Current_state;\r
-            StateSFD:\r
-                if (!FullDuplex&&Collision)\r
-                    Next_state=StateJam;\r
-                else if (xoff_gen||xon_gen)\r
-                    Next_state=StateSendPauseFrame;\r
-                else \r
-                    Next_state=StateData;\r
-            StateSendPauseFrame:\r
-                if (IPLengthCounter==17)\r
-                    Next_state=StatePAD;\r
-                else\r
-                    Next_state=Current_state;\r
-            StateData:\r
-                if (!FullDuplex&&Collision)\r
-                    Next_state=StateJam;\r
-                else if (Fifo_data_err_empty)\r
-                    Next_state=StateFFEmptyDrop;                \r
-                else if (Fifo_eop&&IPLengthCounter>=59)//IP+MAC+TYPE=60 ,start from 0\r
-                    Next_state=StateFCS;\r
-                else if (Fifo_eop)\r
-                    Next_state=StatePAD;\r
-                else \r
-                    Next_state=StateData;       \r
-            StatePAD:\r
-                if (!FullDuplex&&Collision)\r
-                    Next_state=StateJam; \r
-                else if (IPLengthCounter>=59)\r
-                    Next_state=StateFCS;        \r
-                else \r
-                    Next_state=Current_state;\r
-            StateJam:\r
-                if (RetryCnt<=MaxRetry&&JamCounter==16) \r
-                    Next_state=StateBackOff;\r
-                else if (RetryCnt>MaxRetry)\r
-                    Next_state=StateJamDrop;\r
-                else\r
-                    Next_state=Current_state;\r
-            StateBackOff:\r
-                if (Random_time_meet)\r
-                    Next_state  =StateDefer;\r
-                else \r
-                    Next_state  =Current_state;\r
-            StateFCS:\r
-                if (!FullDuplex&&Collision)\r
-                    Next_state  =StateJam;\r
-                else if (CRC_end)\r
-                    Next_state  =StateSwitchNext;\r
-                else\r
-                    Next_state  =Current_state;\r
-            StateFFEmptyDrop:\r
-                if (Fifo_eop)\r
-                    Next_state  =StateSwitchNext;\r
-                else\r
-                    Next_state  =Current_state;             \r
-            StateJamDrop:\r
-                if (Fifo_eop)\r
-                    Next_state  =StateSwitchNext;\r
-                else\r
-                    Next_state  =Current_state;\r
-            StateSwitchNext:\r
-                    Next_state  =StateDefer;            \r
-            default:\r
-                Next_state  =StateDefer;\r
-        endcase\r
-\r
\r
-        \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        JamCounter      <=0;\r
-    else if (Current_state!=StateJam)\r
-        JamCounter      <=0;\r
-    else if (Current_state==StateJam)\r
-        JamCounter      <=JamCounter+1;\r
-        \r
-             \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        RetryCnt        <=0;\r
-    else if (Current_state==StateSwitchNext)\r
-        RetryCnt        <=0;\r
-    else if (Current_state==StateJam&&Next_state==StateBackOff)\r
-        RetryCnt        <=RetryCnt + 1;\r
-            \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        IFG_counter     <=0;\r
-    else if (Current_state!=StateIFG)\r
-        IFG_counter     <=0;\r
-    else \r
-        IFG_counter     <=IFG_counter + 1;\r
-\r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        Preamble_counter    <=0;\r
-    else if (Current_state!=StatePreamble)\r
-        Preamble_counter    <=0;\r
-    else\r
-        Preamble_counter    <=Preamble_counter+ 1;\r
-        \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)      \r
-        PktDrpEvenPtr       <=0;\r
-    else if(Current_state==StateJamDrop||Current_state==StateFFEmptyDrop)\r
-        PktDrpEvenPtr       <=~PktDrpEvenPtr;\r
-//******************************************************************************    \r
-//generate output signals                                                           \r
-//****************************************************************************** \r
-//CRC related\r
-always @(Current_state)\r
-    if (Current_state==StateSFD)\r
-        CRC_init    =1;\r
-    else\r
-        CRC_init    =0;\r
-        \r
-assign Frame_data=TxD_tmp;\r
-\r
-always @(Current_state)\r
-    if (Current_state==StateData||Current_state==StateSendPauseFrame||Current_state==StatePAD)\r
-        Data_en     =1;\r
-    else\r
-        Data_en     =0;\r
-        \r
-always @(Current_state)\r
-    if (Current_state==StateFCS)\r
-        CRC_rd      =1;\r
-    else\r
-        CRC_rd      =0;     \r
-    \r
-//Ramdon_gen interface\r
-always @(Current_state or Next_state)\r
-    if (Current_state==StateJam&&Next_state==StateBackOff)\r
-        Random_init =1;\r
-    else\r
-        Random_init =0; \r
-\r
-//MAC_rx_FF\r
-//data have one cycle delay after fifo read signals  \r
-always @ (*)\r
-    if (Current_state==StateData ||\r
-        Current_state==StateSFD&&!(xoff_gen||xon_gen)  ||\r
-        Current_state==StateJamDrop&&PktDrpEvenPtr||\r
-        Current_state==StateFFEmptyDrop&&PktDrpEvenPtr )\r
-        Fifo_rd     =1;\r
-    else\r
-        Fifo_rd     =0; \r
-        \r
-always @ (Current_state)\r
-    if (Current_state==StateSwitchNext)     \r
-        Fifo_rd_finish  =1;\r
-    else\r
-        Fifo_rd_finish  =0;\r
-        \r
-always @ (Current_state)\r
-    if (Current_state==StateJam)        \r
-        Fifo_rd_retry   =1;\r
-    else\r
-        Fifo_rd_retry   =0;     \r
-//RMII\r
-always @(Current_state)\r
-    if (Current_state==StatePreamble||Current_state==StateSFD||\r
-        Current_state==StateData||Current_state==StateSendPauseFrame||\r
-        Current_state==StateFCS||Current_state==StatePAD||Current_state==StateJam)\r
-        TxEn_tmp    =1;\r
-    else\r
-        TxEn_tmp    =0;\r
-\r
-//gen txd data      \r
-always @(*)\r
-    case (Current_state)\r
-        StatePreamble:\r
-            TxD_tmp =8'h55;\r
-        StateSFD:\r
-            TxD_tmp =8'hd5;\r
-        StateData:\r
-            if (Src_MAC_ptr&&MAC_tx_add_en)       \r
-                TxD_tmp =MAC_tx_addr_data;\r
-            else\r
-                TxD_tmp =Fifo_data;\r
-        StateSendPauseFrame:\r
-            if (Src_MAC_ptr&&MAC_tx_add_en)       \r
-                TxD_tmp =MAC_tx_addr_data;\r
-            else \r
-                case (IPLengthCounter)\r
-                    8'd0:   TxD_tmp =8'h01;\r
-                    8'd1:   TxD_tmp =8'h80;\r
-                    8'd2:   TxD_tmp =8'hc2;\r
-                    8'd3:   TxD_tmp =8'h00;\r
-                    8'd4:   TxD_tmp =8'h00;\r
-                    8'd5:   TxD_tmp =8'h01;\r
-                    8'd12:  TxD_tmp =8'h88;//type\r
-                    8'd13:  TxD_tmp =8'h08;//\r
-                    8'd14:  TxD_tmp =8'h00;//opcode\r
-                    8'd15:  TxD_tmp =8'h01;\r
-                    8'd16:  TxD_tmp =xon_gen?8'b0:pause_quanta_set_dl1[15:8];\r
-                    8'd17:  TxD_tmp =xon_gen?8'b0:pause_quanta_set_dl1[7:0];\r
-//                    8'd60:  TxD_tmp =8'h26;\r
-//                    8'd61:  TxD_tmp =8'h6b;\r
-//                    8'd62:  TxD_tmp =8'hae;\r
-//                    8'd63:  TxD_tmp =8'h0a;\r
-                    default:TxD_tmp =0;\r
-                endcase\r
-        \r
-        StatePAD:\r
-                TxD_tmp =8'h00; \r
-        StateJam:\r
-                TxD_tmp =8'h01; //jam sequence\r
-        StateFCS:\r
-            TxD_tmp =CRC_out;\r
-        default:\r
-            TxD_tmp =2'b0;\r
-    endcase\r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        begin\r
-        TxD     <=0;\r
-        TxEn    <=0;\r
-        end\r
-    else\r
-        begin\r
-        TxD     <=TxD_tmp;\r
-        TxEn    <=TxEn_tmp;\r
-        end     \r
-//RMON\r
-\r
-\r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        Tx_pkt_length_rmon      <=0;\r
-    else if (Current_state==StateSFD)\r
-        Tx_pkt_length_rmon      <=0;\r
-    else if (Current_state==StateData||Current_state==StateSendPauseFrame||Current_state==StatePAD||Current_state==StateFCS)\r
-        Tx_pkt_length_rmon      <=Tx_pkt_length_rmon+1;\r
-        \r
-\r
-reg [2:0] Tx_apply_rmon_reg;\r
-\r
-always @( posedge Clk or posedge Reset )\r
-  if ( Reset )\r
-    begin\r
-      Tx_apply_rmon <= 0;\r
-      Tx_apply_rmon_reg <= 'b0;\r
-    end\r
-  else\r
-    begin\r
-      if ( (Fifo_eop&&Current_state==StateJamDrop)     ||\r
-           (Fifo_eop&&Current_state==StateFFEmptyDrop) ||\r
-           CRC_end )\r
-        Tx_apply_rmon <= 1;\r
-      else\r
-        if ( Tx_apply_rmon_reg[2] )\r
-          Tx_apply_rmon <= 0;\r
-\r
-      Tx_apply_rmon_reg <= { Tx_apply_rmon_reg[1:0], Tx_apply_rmon  };\r
-    end\r
-\r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        Tx_pkt_err_type_rmon    <=0;    \r
-    else if(Fifo_eop&&Current_state==StateJamDrop)\r
-        Tx_pkt_err_type_rmon    <=3'b001;//\r
-    else if(Fifo_eop&&Current_state==StateFFEmptyDrop)\r
-        Tx_pkt_err_type_rmon    <=3'b010;//underflow\r
-    else if(Fifo_eop&&Fifo_data_err_full)\r
-        Tx_pkt_err_type_rmon    <=3'b011;//overflow\r
-    else if(CRC_end)\r
-        Tx_pkt_err_type_rmon    <=3'b100;//normal\r
-        \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        MAC_header_slot_tmp <=0;\r
-    else if(Current_state==StateSFD&&Next_state==StateData)\r
-        MAC_header_slot_tmp <=1;    \r
-    else\r
-        MAC_header_slot_tmp <=0;\r
-        \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        MAC_header_slot     <=0;\r
-    else \r
-        MAC_header_slot     <=MAC_header_slot_tmp;\r
-\r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        Tx_pkt_type_rmon    <=0;\r
-    else if (Current_state==StateSendPauseFrame)\r
-        Tx_pkt_type_rmon    <=3'b100;\r
-    else if(MAC_header_slot)\r
-        Tx_pkt_type_rmon    <={1'b0,TxD[7:6]};\r
-\r
-       \r
-always @(Tx_pkt_length_rmon)\r
-    if (Tx_pkt_length_rmon>=6&&Tx_pkt_length_rmon<=11)\r
-        Src_MAC_ptr         =1;\r
-    else\r
-        Src_MAC_ptr         =0;        \r
-\r
-//MAC_tx_addr_add  \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        MAC_tx_addr_rd  <=0;\r
-    else if ((Tx_pkt_length_rmon>=4&&Tx_pkt_length_rmon<=9)&&(MAC_tx_add_en||Current_state==StateSendPauseFrame))\r
-        MAC_tx_addr_rd  <=1;\r
-    else\r
-        MAC_tx_addr_rd  <=0;\r
-\r
-   always @*\r
-     //if ((Tx_pkt_length_rmon==3)&&Fifo_rd)\r
-     if (Current_state==StatePreamble)\r
-       MAC_tx_addr_init=1;\r
-     else\r
-       MAC_tx_addr_init=0;\r
-\r
-//**************************************************************************************************************\r
-// CFH: this implementation delays the time it sends an entire Ethernet frame with 512 bits for every pause\r
-//      request of 512 bits. Actually, it should only delay the time it takes to transmit 512 bits, not counting\r
-//      Ethernet header, CRC, Interframe Gap etc.\r
-//      Hence the current implementation waits longer than the pause frame actually requests (~20% more)\r
-//**************************************************************************************************************\r
-\r
-//flow control\r
-always @(posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        pause_counter   <=0;\r
-    else if (Current_state!=StatePause)\r
-        pause_counter   <=0;\r
-    else \r
-        pause_counter   <=pause_counter+1;\r
-        \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset)\r
-        pause_quanta_sub    <=0;\r
-    else if(pause_counter==512/8)\r
-        pause_quanta_sub    <=1;\r
-    else\r
-        pause_quanta_sub    <=0;\r
-\r
-// FIXME  The below probably won't work if the pause request comes when we are in the wrong state\r
-   reg clear_xonxoff;\r
-   always @(posedge Clk or posedge Reset)\r
-     if(Reset)\r
-       clear_xonxoff <= 0;\r
-     else if((Current_state==StateSendPauseFrame) & (IPLengthCounter==17))\r
-       clear_xonxoff <= 1;\r
-     else if(~xon_gen & ~xoff_gen)\r
-       clear_xonxoff <= 0;\r
-   \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset) \r
-        xoff_gen_complete   <=0;\r
-    else if(clear_xonxoff & xoff_gen)\r
-        xoff_gen_complete   <=1;\r
-    else\r
-        xoff_gen_complete   <=0;\r
-    \r
-    \r
-always @ (posedge Clk or posedge Reset)\r
-    if (Reset) \r
-        xon_gen_complete    <=0;\r
-    else if(clear_xonxoff & xon_gen)\r
-        xon_gen_complete    <=1;\r
-    else\r
-        xon_gen_complete    <=0;\r
-\r
-endmodule\r