目录
一.以太网
1.1以太网概述
以太网(Ethernet)是当今现有局域网采用的最通用的通信协议标准(IEEE802.3),该标准定义了在局域网中采用的电缆类型和信号处理方法。其成本低、通信速率高、抗干扰性强。
1.2以太网的分类
标准以太网(10Mbit/s)、快速以太网(100Mbit/s)和千兆以太网(1000Mbit/s)。
1.3以太网的接口类型
以太网通信离不开连接端口的支持,网络数据连接的端口就是以太网接口。以太网接口类型有 RJ45 接口、RJ11 接口(电话线接口)、SC 光纤接口等。
1.4RJ45接口定义
这里数据DATA1+和引脚3、6相连接是为了向下兼容10M/100M.只不过不同的通信速率,其引脚功能有区别。
1.5以太网连接图
从硬件的角度来说,以太网接口电路主要由 MAC(Media Access Control)控制器和物理层接口 PHY (Physical Layer,PHY)两大部分构成。MAC 指媒体访问控制子层协议,它和 PHY 接口既可以整合到单颗芯片内,也可以独立分开,对于本次设计来说,MAC 控制器由 FPGA 实现,PHY 芯片指开发板板载的以太网芯片。
PHY 在发送数据的时候,接收 MAC 发过来的数据(对 PHY 来说,没有帧的概念,都是数据而不管什么地址,数据还是 CRC),把并行数据转化为串行流数据,按照物理层的编码规则把数据编码转换为模拟信号发送出去,接收数据时的流程反之。故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接口的帧格式
2.4MDIO 接口读时序图
上图是以 PHY 地址为 0x01,从寄存器地址 0x00 读出数据为例 .整个读操作过程的 MDC 时钟由 MAC驱动,同时 MAC 驱动 MDIO 引脚输出前导码+帧开始+操作码+PHY 地址+寄存器地址,随后 MDIO 引脚切换至 PHY 驱动。PHY 在 MDC 时钟的上升沿采集数据,为保证数据的稳定传输,MAC 在 MDC 的下降沿更新 MDIO 引脚的数据。当 MDIO 引脚切换至 PHY 驱动时,MDIO 数据在 MDC 时钟的下降沿更新,因此 MAC 在 MDC 时钟的上升沿采集数据。在读操作结束后,MAC 将 MDIO 引脚输出高阻,此时 MDIO 引脚的外部上拉电阻会将 MDIO 引脚拉高,此时 MDIO 接口处于空闲状态。
注意这与写操作不同的是,写操作时一直是MAC驱动MDIO数据线来传输数据;
读操作时,先由MAC驱动总线写PHY地址还有寄存器地址,然后MAC将MDIO拉高至高阻态,然后PHY端再将MDIO拉低发送应答信号,后面就可以顺利进行读数据操作。
2.5MDIO 接口写时序图
三.以太网 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地址
3.3硬件设计
YT8531 是一个千兆以太网物理层收发器,支持 1000/100/10Mbps 通信速率,该芯片内部的参数可以通过 MDIO 接口进行配置。原理图中的ETH_MDC和ETH_MDIO引脚均连接了上拉电阻,在空闲状态下,当 FPAG控制ETH_MDIO引脚输出高阻状态时,ETH_MDIO 会被上拉至高电平。
3.4复位
四.实验任务
五.系统框图设计
MDIO_dri模块:读数据时,根据MDIO_ctrl模块发来的寄存器地址,读取指定寄存器里面的数据,并将读取到的数据和读应答信号反馈给MDIO_dri模块;
写数据时,根据MDIO_ctrl模块发来的寄存器地址和数值,将该数据写入指定寄存器中。
MDIO_ctrl模块:接收MDIO_dri模块读取到的数据,指定MDIO_dri模块读/写数据的地址和数值。
六.代码解读
6.1MDIO_dri模块
首先根据MDIO接口通信帧格式,我们可以画出状态转换图。
st_idle:当触发信号未来临时,处于空闲状态,既不读数据也不写数据。
st_pre:触发信号来临后,写入32位前导码。
st_start:前导码写入完毕后,写入开始信号还有读写使能信号。
st_addr:开始信号写入完毕后,写入phy器件地址,以及该器件地址的寄存器地址。
st_wr_data:当地址写完后,如果为写命令,则进行写操作。
st_rd_data:当地址写完后,如果为读命令,则进行读操作。
因为dri_clk<=12.5Mhz,这里将dri_clk设置为12.5Mhz,原理同I2C中一样。
PHY_MDC时钟采用对dri_clk时钟二分频之后的时钟,即12.5MHZ/2=6.25MHZ.
空闲状态时,将MDIO双向数据线拉高至高阻态。若来激励信号,则将后续读写操作用到的:读写控制位,地址,数值先暂存起来方便后续使用,同时将phy应答信号拉高,表示未应答。
写前导码状态:因为phy要进入写数据操作,故mdio_dir拉高,进入写前导码环节,因为 PHY_MDC时dri_clk的二分频,因此两个dri_clk才能写一个数据,32个前导码需要64个dri_clk,因此cnt计数范围为0~63.
写开始信号和读写使能信号,因为MDIO进行写数据操作时,是在PHY_MDC上升沿时采集数据,那么为保证数据的稳定传输,MAC 在 MDC 的下降沿将数据更新至 MDIO 引脚。因此就需要在cnt=1,3,5时更新数据。
写地址状态:依次写入PHY的器件地址还有PHY中的指定寄存器地址。
写数据状态:依次将数据写入指定寄存器中,当数据写完后将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_addr:代表指定phy中的基本控制寄存器,因为该寄存器地址为0x00.
op_wr_data:1001_0001_0100_0000;15位选择PHY复位,13位选择了通信速度为1000Mb/s,11位表示打开自动协商使能,8位表示选择全双工模式。因此就将以上数据全部写入PHY中的基本控制寄存器中。
自协商:
表示以上软复位操作完成,恢复到非复位状态。
表示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赋予不同的值。