文章目录
1. GMAC系统框架
- 术语
- EMAC是百兆mac, GMAC是千兆mac
GMAC通常由MAC控制器和PHY构成。以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为PHY。
MAC控制器:主要完成数据链路层的IP数据报打包成网络帧并将数据发送给PHY。
PHY:主要完成速度协商,数字信号到模拟信号的转换最后把信号输出到网线上。
CPU,MAC,PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,将MAC集成进CPU,而将PHY留在片外,这种结构是最常见的。当然更灵活、密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合。
- CPU内部集成了MAC和PHY (难度较高)
- CPU内部集成MAC,PHY采用独立芯片 (主流方案)
- CPU不集成MAC和PHY,MAC和PHY采用独立芯片或者集成芯片 (高端采用)
以常用的第二种:CPU内部集成MAC,PHY采用独立的芯片方案,虚线内表示CPU和MAC集成在一起,PHY芯片通过MII接口与CPU上的MAC互联。
2. 网卡
网卡(Network Interface Card,简称NIC),也称网络适配器,是电脑与局域网相互连接的设备。无论是普通电脑还是高端服务器,只要连接到局域网,就都需要安装一块网卡。如果有必要,一台电脑也可以同时安装两块或多块网卡。
电脑之间在进行相互通讯时,数据不是以流而是以帧的方式进行传输的。我们可以把帧看做是一种数据包,在数据包中不仅包含有数据信息,而且还包含有数据的发送地、接收地信息和数据的校验信息。
一个网卡主要包括OSI的最下面的两层,物理层和数据链路层
物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。物理层的芯片称之为PHY
数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。数据链路层的芯片称之为MAC控制器
3. 网卡系统框架结构
从硬件的角度来分析,以太网的电路接口一般由CPU、MAC(Media Access Control)控制器和物理层接口(physical Layer PHY)组成,如下图所示:
3.1 管理配置
- MDC——配置接口时钟
- MDIO——配置接口I/O
管理配置接口控制PHY的特性.该接口有32个寄存器地址,每个地址16位.其中前16个已经在”IEEE 802.3,2000-22.2.4 Management Functions”中规定了用途,其余的则由各器件自己指定
4. PHY(Physical Layer,物理层)
一般PHY芯片为模数混合电路,负责接收电、光这类模拟信号,经过解调和A/D转换后通过MII接口将信号交给MAC芯片进行处理。一般MAC芯片为纯数字电路。
PHY(Physical Layer)是IEEE802.3中定义的一个标准模块,STA(Station Management Entity,管理实体,一般为MAC或CPU)通过MIIM(MII Manage Interface)对PHY的行为、状态进行管理和控制,而具体管理和控制动作是通过读写PHY内部的寄存器实现的。PHY的基本结构如下图:
5. MAC(Media Access Control、媒体访问控制器)
DMA Controler :直接记忆器存取控制器,执行直接记忆器存取作业的控制单元,由一组缓存器(Register)和高速电路组成,总线提供最快的资料移转速度。
因芯片面积及模拟/数字混合架构的原因,MAC集成进CPU而将PHY留在片外,这种结构是最常见的。 下图是以太网结构大框架,虚框表示CPU,MAC集成在CPU中,PHY芯片通过MII接口与CPU上的MAC连接:
6. 以太网结构大框架
7. MAC硬件框图
8. 以太网接口
8.1 MII
8.2 RMII
精简MII接口,节省了一半的数据线,信号线数量由MII的14根减少为7根,所以它一般要求是50兆的总线时钟。
RMII一般用在多端口的交换机,它不是每个端口安排收、发两个时钟,而是所有的数据端口公用一个时钟用于所有端口的收发,这里就节省了不少的端口数目。RMII的一个端口要求7个数据线,比MII少了一倍,所以交换机能够接入多一倍数据的端口。和MII一样,RMII支持10兆和100兆的总线接口速度。
其中CRS_DV是MII中RX_DV和CRS两个信号的合并,当物理层接收到载波信号后CRS_DV变得有效,将数据发送给RXD。当载波信号消失后,CRS_DV会变为无效。在100M以太网速率中,MAC层每个时钟采样一次RXD[1:0]上的数据,在10M以太网速率中,MAC层每10个时钟采样一次RXD[1:0]上的数据,此时物理层接收的每个数据会在RXD[1:0]保留10个时钟。