一.以太网
1.1以太网概述
以太网(Ethernet)是当今现有局域网采用的最通用的通信协议标准(IEEE802.3),该标准定义了在局域网中采用的电缆类型和信号处理方法。其成本低、通信速率高、抗干扰性强。
1.2以太网的分类
标准以太网(10Mbit/s)、快速以太网(100Mbit/s)和千兆以太网(1000Mbit/s)。
1.3以太网的接口类型
以太网通信离不开连接端口的支持,网络数据连接的端口就是以太网接口。以太网接口类型有 RJ45 接口、RJ11 接口(电话线接口)、SC 光纤接口等。
1.4RJ45接口定义
RJ45
插座只使用了
1
、
2
、
3
、
6
这四根线,其中
1
、
2
这组负责传输数据(
TX+
、
TX-
),
而
3
、
6
这组负责接收数据(
RX+
、
RX-
),另外四根线是备用的。
这里数据DATA1+和引脚3、6相连接是为了向下兼容10M/100M.只不过不同的通信速率,其引脚功能有区别。
1.5以太网连接图
从硬件的角度来说,以太网接口电路主要由 MAC(Media Access Control)控制器和物理层接口 PHY (Physical Layer,PHY)两大部分构成。MAC 指媒体访问控制子层协议,它和 PHY 接口既可以整合到单颗芯片内,也可以分开,对于本次设计来说,MAC 控制器由 FPGA 实现,PHY 芯片指开发板板载的以太网芯片。
RGMII接口下:当实现速率为1000M时,ETH_RXC=125M,采用双边沿触发,len(ETH_RXD)=4,故125Mx2x4=1000M;当实现速率为100M时,ETH_RXC=25M,故25Mx4=100M;当实现速率为10M时,ETH_RXC=2.5M,故2.5Mx4=10M。
GMII接口下:当实现速率为1000M时,ETH_RXC=125M,len(ETH_RXD)=8,故125Mx8=1000M。
二.MDIO接口
2.1MDIO概述
MDIO(Management Data Input/Output),也被称为SMI(Serial Management Interface),即串行管理接口。
MDIO接口是MAC和PHY芯片的配置接口,可以配置 PHY 芯片的工作模式以及获取 PHY 芯
片的若干状态信息。
2.2MDIO接口连接图
MDIO接口包括 ETH_MDC(数据管理时钟)和 ETH_MDIO(数据管理输入输出)两条信号线。ETH_MDC 为 ETH_MDIO 提供时钟,ETH_MDC的最大时钟不能超过 12.5Mhz。ETH_MDIO 为双向数据引脚,既用于发送数据,也用于接收数据。
2.3MDIO接口的帧格式
Preamble
:
32
位前导码,由
MAC
端发送
32
位逻辑“
1
”,用于同步
PHY
芯片。
ST
(
Start of Frame
):
2
位帧开始信号,用
01
表示。
OP
(
Operation Code
):
2
位操作码,读:
10
写:
01
。
PHYAD
(
PHY Address
):
5
位
PHY
地址,用于表示与哪个
PHY
芯片通信,因此一个
MAC
上可以连接多个 PHY
芯片。这里高两位闲置,因此只有三根地址线,最多连接8个PHY芯片。
REGAD
(
Register Address
):
5
位寄存器地址,可以表示
32
个寄存器。
TA
(
Turnaround
):
2
位转向,在读命令中,
MDIO
在此时由
MAC
驱动改为
PHY
驱动,在第一个
TA位,MDIO
引脚为高阻状态,第二个
TA
位,
PHY
将
MDIO
引脚拉低,准备发送数据;在写命令中,不需要 MDIO
方向发生变化,
MAC
固定输出
2’b10
,随后开始写入数据。这是为了防止出现读写冲突。
DATA
:
16
位数据,在读命令中,
PHY
芯片将对应的
PHYAD
的
REGAD
寄存器的数据写到
DATA
中;在写命令中,PHY
芯片将接收到的
DATA
写入
REGAD
寄存器中。需要注意的是,在
DATA
传输的过程中,高位在前,低位在后。
IDLE
:空闲状态,此时
MDIO
为无源驱动,处于高阻状态,但一般用上拉电阻使其上拉至高电平。
2.4MDIO 接口读时序图
注意这与写操作不同的是,写操作时一直是MAC驱动MDIO数据线来传输数据;
2.5MDIO 接口写时序图
上图是以
PHY
地址为
0x01
,向寄存器地址
0x00
写入
0x1340
为例,在整个写操作过程中,
MDC
时钟和 MDIO
引脚一直由
MAC
端驱动,按照
MDIO
接口写通信协议开始传输数据。需要注意的是,
PHY
在 MDC 时钟的上升沿采集数据,为保证数据的稳定传输,
MAC
在
MDC
的下降沿将数据更新至
MDIO
引脚。 在写操作结束后,MAC
将
MDIO
引脚输出高阻,此时
MDIO
引脚的外部上拉电阻会将
MDIO
引脚拉高, 此时 MDIO
接口处于空闲状态。
三.以太网 PHY 芯片(YT8531)
3.1YT8531概述
在以太网通信中,设备之间的物理层链路均由 PHY 芯片建立。PHY 芯片有一个配置接口,即 MDIO 接口,可以配置 PHY 芯片的工作模式以及获取 PHY 芯片的若干状态信息。
YT8531/YT8511共有22位寄存器,但是我们经常用到的只有三个寄存器,分别是基本控制寄存器(Basic Control Register,BCR)、基本状态寄存器(Basic Status Register,BSR)以及PHY芯片特定状态寄存器(PHY Specific Status Register,PHYSR)。
3.2PHY地址
YT8531
芯片的
PHY
地址由
PHYAD0
、
PHYAD1
和
PHYAD2
引脚决定,如下图所示:
PHY
地址一共有3 位,我们可以通过硬件电路设置
PHYAD[2:0]
引脚为上拉或者下拉,即分配为高低电平,
0
或
1
,从而表示不同的地址。
领航者开发板上的以太网
PHY
芯片
PHYAD2
接上拉电阻,
PHYAD1
和
PHYAD0
接下拉电阻,因此
PHY
地址为
5’h04
。
3.3硬件设计
以太网的数据传输离不开以太网
PHY
(物理层)芯片的支持,物理层定义了数据发送与接收所需要的电信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。
YT8531 是一个千兆以太网物理层收发器,支持 1000/100/10Mbps 通信速率,该芯片内部的参数可以通过 MDIO 接口进行配置。原理图中的ETH_MDC和ETH_MDIO引脚均连接了上拉电阻,在空闲状态下,当 FPAG控制ETH_MDIO引脚输出高阻状态时,ETH_MDIO 会被上拉至高电平。
3.4复位
YT8531
芯片复位后,
PHY
内部寄存器的数据会恢复默认的状态,并且重新开始和
MAC
进行自协商。YT8531 支持两种复位方式,一种是硬件复位,另外一种是软件复位。硬件复位时通过
PHY_RST_N
引脚实现对 PHY
芯片的复位,当
ETH_RST_N
引脚持续
10ms
的低电平时,即可实现对
PHY
芯片的复位。软件复位通过向寄存器地址 0x00
的
Bit[15]
写入
1
进行复位,并且在完成复位后,该位会自动清零。
四.实验任务
本节实验任务是使用领航者
ZYNQ
开发板上的以太网接口,完成
MDIO
接口的读写测试实验。板载的触摸按键(TPAD
)控制
MDIO
接口进行软复位,并通过两个
LED
灯实时指示当前网口的连接速度。
当
LED0
灯亮的时候,表示当前的网口速率为
10Mbps
;当
LED1
亮的时候,表示当前网口的速率为100Mbps;当两个
LED
都亮的时候,表示当前网口的速率为
1000Mbps
;当两个
LED
灯都熄灭时,说明当前网络自协商失败,硬件或者网络存在异常。
六.代码解读
6.1MDIO_dri模块
首先根据MDIO接口通信帧格式,我们可以画出状态转换图。
st_idle:当触发信号未来临时,处于空闲状态,既不读数据也不写数据。
st_pre:触发信号来临后,写入32位前导码。
st_start:前导码写入完毕后,写入开始信号还有读写使能信号。
因为dri_clk<=12.5Mhz,这里将dri_clk设置为12.5Mhz,原理同I2C中一样。
PHY_MDC时钟采用对dri_clk时钟二分频之后的时钟,即12.5MHZ/2=6.25MHZ.
写前导码状态:因为phy要进入写数据操作,故mdio_dir拉高,进入写前导码环节,因为 PHY_MDC时dri_clk的二分频,因此两个dri_clk才能写一个数据,32个前导码需要个dri_clk,因此cnt计数范围为0~63.
写开始信号和读写使能信号,因为MDIO进行写数据操作时,是在PHY_MDC上升沿时采集数据,那么为保证数据的稳定传输,MAC 在 MDC 的下降沿将数据更新至 MDIO 引脚。因此就需要在cnt=1,3,5时更新数据。
写数据状态:依次将数据写入指定寄存器中,当数据写完后将mdio_dir拉低,释放总线,至此,写数据操作完成,op_done=1。注意:st_done代表一次状态转换操作完成,op_done代表读操作或者写操作完成。
读数据状态:首先phy发出读应答信号,然后依次发送所读数据,这里更新数据是在2,4,6,..时,因为MDIO 数据在 MDC 时钟的下降沿采集,因此 MAC 在 MDC 时钟的上升沿更新数据。
6.2MDIO_ctrl模块
因为soft_rst_trig信号连接的时触摸复位按键,这是个非同步信号,与dri_clk不同步.这里我们需要捕捉它的上升沿变,因此需要打三拍。得到pos_rst_trig信号。
因为本实验是定时读取以太网的连接状态,所以这里是每间隔80ms读取以太网的连接状态。因为dri_clk=12.5MHZ,Tclk=80ns,1000000x80ns=80ms。
但是仿真时设置TIME_CNT=1000.
这里为什么没有在pos_rst_trig=1时,就进行复位操作。这是因为该实验想用到软复位信号,而软复位信号是rst_trig_flag。故通过触摸复位控制软复位信号,在通过软复位信号对MDIO进行复位操作。参考3.4。
op_exec:启动状态机运转;
op_rh_wl:低电平代表写操作;
op_wr_data:1001_0001_0100_0000;15位选择PHY复位,13位选择了通信速度为1000Mb/s,11位表示打开自动协商使能,8位表示选择全双工模式。因此就将以上数据全部写入PHY中的基本控制寄存器中。
自协商:
当我们给网卡接入网线的时候,
PHY
芯片不断发出脉冲信号来检测对端是否有设备,它们通过标准的“语言”交流,互相协商并确定连接速度、双工模式、是否采用流控等。通常情况下,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式。这个技术被称为 Auto Negotiation,即自协商。
表示以上软复位操作完成,恢复到非复位状态。
表示80ms计时完成,接着获取以太网连接状态。
op_exec:启动状态机运转,
op_rh_wl:高电平表示进行读操作 ,
op_addr:表示从PHY中的基本状态寄存器中读取数值。
以上读操作完成,PHY给读有效应答信号,并且处于读基本状态寄存器。
跳转到d0 ,并且判断读取到基本状态寄存器中的5位和2位,若都为1,则代表以太网自协商完成并且链接建立完成。
接着回到d0,开始读下一个寄存器。
op_rh_wl:读操作,
op_addr:指定读取PHY中特定状态寄存器里面的值。
当PHY反馈有效读响应信号,并且读下一个寄存器信号为1时,表示当前正在读PHY中特定状态寄存器。
根据从PHY中特定状态寄存器读取的值,将led赋予不同的值。
七.板级验证
7.1通信速度为1000M/s时,LED0和LED1全亮
7.2通信速度为100M/s时,LED1亮,LED0灭
7.2通信速度为10M/s时,LED0亮,LED1灭