1100  MMAACC
Ethernet
 RS-485CAN 
 Internet  TCP/IP
 USB 2.0IEEE 1394 
x 
x 
x 
x 
x 
 FPGA 
 FPGA MAC
10.1    
 IEEE  802.3 LANLocal  Area 
Network CSMA/CD 
CSMA/CD  Carrier sense multiple Access with Collision Detection 
 IEEE 802.3 
10.1.1 
 OSI Open System Interconnect Reference Model
 10-1 
 4 
x 10 Mbit/s10Base-T 
x 100 Mbit/s
x 1000 Mbit/s 802.3z
x 10 IEEE 802.3ae
 10  MAC
 10-1 
MAC 
/
 IP TCP HTTP 
 TCP/IP  10-2 
 10-2 
 FTP  FTP 
 10-3 
 IP  IP
 TCPUDPICMP 
 TCP/IP 
 RJ-45 
 MAC
367
FPGA 
 MAC 
 10-3    FTP 
10.1.2    MAC 
MAC 
 IEEE 802.3 
1
IEEE 802.3  MAC  10-4 
 10-4 
x PreamblePRE 1  0 
x Start-of-frame delimiterSFD 1  0 
 1
x Destination AddressDA
x Source AddressSA
x Length/Type/ MAC 
368
 10  MAC
x Data n46n1500
x Frame check sequenceFCS 32 CRC
2
MAC 
 MAC 
x 
x 
x 
x  46  46 
x / CRC 
MAC 
half duplexfull duplexIEEE 802.3  MAC 
3
CRC CRC 
MAC 
10.1.3 Media Independent Interface
IEEE 802.3 Media Independent InterfaceMII
MAC PHY 10-5 
!"45
!"#$%
 
+,
2 10-5 !"#$%
369
FPGA 
MAC 
 MAC 
 10Mbit/s  1 / 100Mbit/s
 4 / 1000Mbit/s 
 8 /
10.2 MAC
MACMAC
 IEEE 802.3  IEEE 802.3u  10Mbit/s  100Mbit/s 
 10-6  PHY 
 FTPHTTP 
 10-6 
x  IEEE 802.3x 
x  CSMA/CD 
x 32  CRC 
x 
x 
x  IEEE 802.3  MII
 10-7 
x Host Interface
370
 10  MAC
MAC
Host Interface
Register Module
Transmit Module
Media Independent 
Module
Status Module
Control Module
Receive Module
 10-7 
x Transmit Module
 CRC 
x Receive Module
CRC 
x Control Module
x Media Independent Interface
 PHY 
x Status Module
x Register Module
10.3    MAC
MAC
10.3.1 ——eth_top
module eth_top 
(
    //
    wb_clk_i, wb_rst_i, wb_dat_i, wb_dat_o,   
    …. 
);
// 
input                      clk_i;          //  
input                      rst_i;          //  
input      [31:0]    dat_i;          //  
output    [31:0]    dat_o;          //  
output                  err_o;          //  
371
FPGA 
_i),   
……
//
//
eth_miim miim1 
(
    .Clk(wb_clk_i),                                                  .Reset(wb_rst_i),                                      .Divider(r_ClkDiv),   
……
);
//
eth_registers ethreg1 
(
    .DataIn(wb_dat_i),                                            .Address(wb_adr_i[9:2]),                                        .Rw(wb_we
……     
);
//
eth_maccontrol maccontrol1 
(
    .MTxClk(mtx_clk_pad_i),                                              .TPauseRq(TPauseRq),   
……
);
//
eth_txethmac txethmac1 
(
    .MTxClk(mtx_clk_pad_i),                          .Reset(wb_rst_i),                                      .CarrierSense(TxCarrierS
ense),   
……       
);
//
eth_rxethmac rxethmac1 
(
    .MRxClk(mrx_clk_pad_i),                              .MRxDV(MRxDV_Lb),                                          .MRxD(MRx
D_Lb), 
……
);
//
always @ (posedge mtx_clk_pad_i or posedge wb_rst_i) 
begin
    if(wb_rst_i) 
        begin 
            TxPauseRq_sync1 <= #Tp 1'b0; 
            TxPauseRq_sync2 <= #Tp 1'b0; 
            TxPauseRq_sync3 <= #Tp 1'b0; 
        end 
    else 
        begin 
            TxPauseRq_sync1 <= #Tp (r_TxPauseRq & r_TxFlow); 
            TxPauseRq_sync2 <= #Tp TxPauseRq_sync1; 
            TxPauseRq_sync3 <= #Tp TxPauseRq_sync2; 
        end 
end
372
 10  MAC
always @ (posedge mtx_clk_pad_i or posedge wb_rst_i) 
begin
    if(wb_rst_i) 
        TPauseRq <= #Tp 1'b0; 
    else 
        TPauseRq <= #Tp TxPauseRq_sync2 & (~TxPauseRq_sync3); 
end
//
eth_macstatus macstatus1   
(
    .MRxClk(mrx_clk_pad_i),                          .Reset(wb_rst_i), 
….
);
endmodule
10.3.2 Media Independent Interface Module
 PHY  PHY 
 10-8 
 10-8 
 3 
x  MII  PHY 
x  MII  PHY 
x  PHY  PHY 
x 
 MII 
`include "timescale.v" 
module eth_miim 
(    Clk,    Reset,    Divider,    NoPre,    CtrlData,    Rgad,    Fiad,    WCtrlData,    RStat,    ScanStat,    Mdi, 
373