1、 基于ML605 FPGA的10GEPON设计1、系统框架图1.1 系统框架图FPGA 通过XAUI接口与AEL2005模块相连,需要逻辑及8051核软硬件结合控制实现三种自环的操作:Line Loop、PHY XS Line Loop及FPGA XGMII Loop;上图中FMC_HPC模块对应ML605的J64模块,且需要的时钟频率为156.25MHz。对应的系统实物图如下所示:图1.2 系统实物图注意:其中采用的是两根多模光纤与Smartbits数据通信测试仪的XFP模块相连。FMC_HPC配置的是GTX Bank112中GTXE1_X0Y0、GTXE1_X0Y1、GTXE1_X0Y2、
2、GTXE1_X0Y3,并由管脚MGTREFCLK0P_112、MGTREFCLK0N_112提供156.25MHz的时钟频率:图1.3 本测试中Virtex-6 GTX的配置2 XAUI IP设计2.1 XAUI IP介绍XAUI利用4对3.125Gbps差分通道(4-lane)传输10G以太数据。每对差分通道采用8b10b编码,以方便差分数据的恢复。信号采用CML电平。为了实现发送与接收的通道,在发送方插入特定的码字。XAUI IP与用户端口采用XGMII的接口标准。在FPGA内部,XAUI接口的框架如下图所示:其特性为:l 对于每一个通道而言,产生IDLE字码l 每一对差分通道完成字同步l
3、 四队通道Alignment设置。控制字含义IDLE字符规则:(1) 在|T|之后必须跟2.2 Xilinx XAUI IP生成打开Core Generator选择xaui 10.2版本,并选择XGMII接口如下所示,跟物理层可以完美对接:图2.1 XAUI IP 生成生成好后在工程中加入自动生成的example的例子这里注意要把ODDR的部分隐去。因为我们用的这块不作为最终工程的top顶层。3 MDIO接口设计3.1 系统框图MDIO控制接口框图如下图所示。MDIO控制逻辑采用Wishbone接口,MDIO接口提供四个信号。MDIO的发起操作有两种:可以通过寄存器发起本次操作(快速访问,在发
4、起操作之后,处理器可以做其他工作,然后通过读取寄存器来判断本次操作是否已经完成),也可以通过直接访问Wishbone总线直接访问MDIO设备。图3.1 MDIO接口框图3.2 Wishbone接口信号定义从WISHBONE Master端来看,WISHBONE协议接口定义如下表所示:信号信号方向含义Rst输入系统复位信号,高电平有效Clk输入系统时钟cyc_i输入单次总线访问持续信号:在整个总线访问周期内该信号置高。一旦检测到ACK_I信号为高,则该信号置低,表示单次总线访问周期结束。不支持突发传输we_i输入读写控制信号:仅仅高电平表示本次mdio访问为写操作,低电平读有效。tgc_i输入W
5、ashbone访问类型标识信号,高表示访问内部寄存器,低电平表示直接访问MDIOaddr_i9.0输入寄存器地址信号:当tgc_i为高。 Addr_i1:0: 2b00, ctl寄存器;2b01, data_o寄存器;2b10, data_i寄存器当tgc_i为低时,addr_i4:0, reg地址;addr_i9:5, phy地址ack_o输出反馈信号:置高一个时钟,标示单次总线访问周期结束。data_o 15.0 输出数据输出:输出mdio读操作的得到的数据,在ack_i置高后有效。data_i 15.0输入数据输入:输入需要在wishbone写操作时存入不同寄存器的数据。图3.2 WIS
6、HBONE操作时序示意图3.2 MDIO接口定义(外部接口)图3.3 MDIO外部接口信号信号方向含义MDC输出时钟信号:输出mdio总线的时钟信号,在802.3协议规定的最高时钟频率为8.3MHz。MDIO双向mdio数据信号:用于传输STA和PHY之间的控制和状态信息。此处定义的mdio接口提供了一种简单的、双线的、串行接口,其目的是连接控制端和被其控制的PHY设备,以达到控制PHY设备和获知PHY设备状态的功能。3.3 内部寄存器定义寄存器含义偏移地址含义MDIO_CON(R/W)0MDIO控制寄存器:详见X.2.1DATA_o(R/W)1MDIO数据寄存器:用于写入mdio端口需要发送
7、的数据。可以进行读写操作。DATA_i(R)2MDIO接收到得数据,只有在Start/busy状态信号为0 时,该信号才有效3.3.1 MDIO_CON控制寄存器寄存器位定义说明默认值4:0reg_addr寄存器地址:PHY设备中的寄存器地址5b000009:5Phy_addrPHY设备地址:PHY设备的设备地址5b0000010Write/rd#mdio读写操作控制位:置1为写操作,置0为读操作11Start/busy总线状态标志位:不起控制作用。在mdio操作开始时自动置1,在mdio操作结束时自动置0。12前导码控制mdio前导码控制位:置1时,MDIO操作发送的数据包含前导码否则。置0
8、时,不发送前导码015:13MDC时钟控制寄存器15:13000001010111clk时钟分频系数50801102603b0003.3.2 DATA_o寄存器(R/W)该寄存器可以进行读写操作,用于写入mdio端口需要发送的数据。写mdio周期时,Washbone总线将要发送的数据写入此寄存器。3.3.3 DATA_i 寄存器(R)当控制寄存器的Start/busy信号为低电平,并且本次操作为MDIO读操作时,该寄存器存储读取到得MDIO内容3.4 MDIO寄存器操作时序3.4.1 控制寄存器访问时序(MDIO_CON)MDIO_CON控制寄存器支持读写操作,访问该寄存器需要三个时钟周期,如
9、图 50所示,其中mdio_con_reg就是内部的控制寄存器。图3.4 MDIO_CON访问时序3.4.2 输出寄存器访问时序(DATA_o)该寄存器支持读写操作,访问该寄存器需要3个时钟周期。图3.5 DATA_o访问时序3.4.3 输出寄存器访问时序(DATA_i)该寄存器支持读写操作,访问该寄存器需要3个时钟周期。图3.6 DATA_i访问时序3.5 MDIO访问方式3.5.1 直接访问方式1设置MDIO_CON15:12,也即设置MDIO总线速率以及是否采用前导码,其它位设置为0。2启动通过WISHBONE总线发起MDIO读写操作(TGC_i必须为低电平,地址总线的4:0为reg地址
10、,地址总线的9:5为phy地址)。图3.7 MDIO写操作访问时序(没有前导码)图3.8 MDIO读操作访问时序(没有前导码)3.5.2 间接访问方式1间接写操作访问l 把要写的数据写入mdio_o寄存器l 设置mdio_con相关寄存器(包括reg_addr, phy_addr,等),并把Write/rd#设置为1, start_busy设置为1l 然后循环读取mdio_con寄存器,如果start_busy信号为0,则表示本次操作已经完成。MDIO访问发起操作有两种:一种是通过MDIO_CON寄存器发起2间接读操作访问l 设置mdio_con相关寄存器(包括reg_addr, phy_ad
11、dr,等),并把Write/rd#设置为0, start_busy设置为1l 然后循环读取mdio_con寄存器,如果start_busy信号为0,则表示本次操作已经完成。l 从mdio_i寄存器读取mdio获取的数据3.5.3 访问特点1 直接访问与间接访问需要按照上述介绍的次序进行。2 在间接访问期间,不能启动直接访问,否则会造成逻辑的紊乱3 在启动间接访问时,如果再次启动间接访问,则后面配置的参数在本次访问期间不起作用,不用启动第二次MDIO访问。不过相关配置参数(例如reg_addr, phy_addr)会在下次操作起作用4 每次mdio访问都会重新设置MDIO的波特率(不会造成MDC
12、的短脉冲毛刺),在启动MDIO访问前,会多发一个高电平,提高系统的稳定性和兼容性4 XGMII与GMII之间转换模块设计4.1 xgmii2gmii模块设计XGMII总线转GMII总线如Error! Reference source not found.所示,利用两个FIFO实现高速与低速总线的转换。数据帧FIFO的宽度为65位,其中低64位存储XGMII总线的数据,第65位用来记录存储数据是否为该帧的最后一位。帧状态FIFO用来存储存储数据帧FIFO的状态。图4.1 xgmii2gmii模块仿真图4.2 xgmii2gmii实现框图图4.3 gmii2gmii写控制模块状态转换图Xgmii2
13、gmii写控制模块状态转换Error! Reference source not found.所示。其中l 转换状态A: 只有XGMII总线上出现起始字符并且数据帧FIFO非慢的时候才实现状态的转换。当数据帧FIFO写满时,丢弃XGMII总线的数据帧。l 转换状态A:当检测到XGMII总线上出现错误帧、结束帧或者传输传输数据包为大包时,则结束数据存储。系统设计不支持huge packet传输。如果在数据写入数据帧时,数据帧出现些慢时,则放弃本次操作,这样就不会造成系统传输传输的紊乱。l 操作A:当出现状态转换时,把XGMII总线的第一次写操作状态记录到帧状态FIFO。根据IEEE802.3,X
14、GMII总线传输的首字节可能出现XGMII总的7:0上,或者XGMII总线的39:32上。利用转换状态FIFO的最高位来记录该状态,如果XGMII总线传输数据帧的首字节出现在XGMII总的7:0,则该位为0(如图 所示),否则为1(图 )。同时在该状态启动XGMII总线的存储操作,有XGMII总线的传输速度为156.25MHz,传输速度相对来说比较高,为了减少逻辑的复杂度,存储数据内容与XGMII总线内容一致,不进行修改。图 4.4数据帧在XGMII总线的最低位存储仿真图图 4.5数据帧在XGMII总线的第4Byte位置存储仿真图l 操作B:操作B包括两种情况:(1)把最后的数据帧写入到数据F
15、IFO中,并在数据帧FIFO的64位记录为高电平(2)记录数据帧在64为XGMII总线上的有效数量(0-7Bytes),并写入到帧状态FIFO中,图 。图 4.7记录XGMII总线结束状态有效字节。4.2 gmii2xgmii模块图 4.8数据帧首字节修改成XGMII的开始字符图 4.9数据帧末字节增加XGMII的结束字符5 测试结果5.1 AEL2005 Line Loop图5.1 Line Loop串口显示图5.2 SmartBits测试数据SmartBits连续发包,从测试数据中可以看出没有误码。5.2 PHY XS LINE LOOP图5.3 PHY XS LINE LOOP的串口显示图5.4 SmartBits测试数据SmartBits连续发包,从测试数据中可以看出没有误码。5.3 FPGA XGMII LOOP图5.5 FPGA XGMII LOOP串口显示图5.6 SmartBits测试数据