Menu Close

网速检测及Verilog实现技巧

在局域网中目前物理层(Phy)芯片基本都支持10M、100M、1000M自适应系统,而且MII的版本众多,如GMII,RGMII,MII,RMII等接口。由物理层之间支持自动协商功能,MII接口也是自动适配的,MAC层如果及时掌握这些信息,对于MAC与Phy层的交互采用什么样的速度,用哪种接口,为MAC层能够自适应控制时钟和不同接口提供有力保证。

1. 网络速度识别

有两种办法可以识别网速,一种是读取Phy芯片的寄存器识别网速。经过Auto-Negotiation之后网络物理层芯片的速度已经确定,可通过读取Phy寄存器REG17,对应的地址为0x11, 如表1所示,虽然表1使用RTL8211eVB为例进行介绍,但在IEEE802.3中这个寄存器的内容是一致的。

表1 RTL8211eVB( REG 17 )PHYSR(Phy Specific Status Register )

2. RXC时钟频率检测目的

虽然读取Phy寄存器可以得到Phy层的通信速率,但具体到底使用哪一种MII接口,不同的芯片使用的接口也有所不同,因此配合RXC时钟检测得到不同的MII的RXC的时钟频率范围基本可以确定Phy应该使用哪种接口,最终配合Phy的MODE管脚可以最终设定MII的接口。如确定RXC的频率如表2,

表2 RXC时钟频率与MII接口对应关系

RXC 时钟频率(Hz) MII具体接口 Mode(Pin on RTL8211eVB)
125M RGMII , GMII 1000Base-T 0: GMII/MII

1: RGMII

50M RMII 100Base-TX
25M MII 100Base-TX
12.5M MII (MII dual edge)100Base-T
2.5M MII 10Base-T
1.25M MII (MII with dual edge) 10Base-T

3. RXC时钟频率检测方法

由于RXC的时钟频率为检测对象,因此需要引入另外一个确定的时钟进行检测,一般采用系统时钟进行处理。本设计中系统时钟可能有如下几种情况250Mhz,200Mhz, 125Mhz, 100Mhz,50Mhz等,如果用户采用不同于上面所列的频率,可以根据如下计算进行修改。

    • 用系统时钟生成周期为2mS的方波,高电平1mS,低电平1mS

    • 在高电平1mS 期间用RXC作为时钟进行计数。

    • 根据计数值判断RXC应该是表2中对应的哪种频率并编码

    • 输出编码值为MAC接口的其它程序服务

    • 封装接口

4. RXC 时钟频率检测程序


测试程序testbench.v


仿真波形如图1所示,

图1 Phy speed 检测仿真波形

从图1仿真结果可以看出,能正确检测出rx_clk 频率,并能编码成不同类型。如何使用可以参照MAC IP 中发送和接收中对MII,RGMII的正确选择。

 

Posted in FPGA, FPGA, FPGA 教材教案, IP开发, Quartus II, Quartus II, Verilog, Vivado, Vivado, 开发语言, 教材与教案, 文章, 资料区