10G以太网

概述

  • 该文章得验证平台位xilinx KCU105开发板,实现了双通道10g eth收发,以及内外循环。

10g以太网系统框图

10G以太网_第1张图片

  • 时钟

    • PCS/PMA接收外部差分参考时钟(156.25MHz),经过内部锁相环输出coreclk(156.25MHz),从而驱动整个系统工作
  • 数据

    • 发送:用户在156.25MHz时钟下,通过64bit位宽axi stream总线将数据发送给MAC核,MAC将axi stream数据转换成xgmii协议数据发送给PCS/PMA,PCM/PMA内部经过64b/66b等操作最终通过GTX接口发出。
    • 接收:接收过程是发送过程得逆过程
      10G以太网_第2张图片
  • 控制(监测)

    • MicroBlaze通过axi_lite接口控制User和MAC模块,MAC与PCS/PMA模块间通过MDIO总线走控制信号,后续内容有详细介绍。

一、 PCS/PMA内部时钟

10G以太网_第3张图片

  • 1、pcs/pma接收差分refclk(156.25MHz)
  • 2、红框内得逻辑在多个pcs/pma时可以共享给其他模块
    10G以太网_第4张图片

二、 XGMII帧格式

10G以太网_第5张图片

  • 若payload_size = 64,源地址48’h1111_0000_0000,目标地址48’h2222_0000_0000,发送完3frame后payload_size = 125
  • 根据XGMII需求:帧间最小间隔(12+Byte) + 前导码(7Byte)+ 帧开始符(1Byte)+ ethernet_header(16Byte) + Payload2(62Byte)+ FCS(4Byte)
  • ethernet_header(16Byte) = MAC目标地址(6Byte)+ MAC源地址(6Byte)+ 长度/类型(2Byte)+ Payload1(2Byte)
    assign ethernet_header [47:0]     = XIL_MAC_ID_OTHER;   
    assign ethernet_header [95:48]    = XIL_MAC_ID_THIS;
    assign ethernet_header [111:96]   = {data_payload[7:0], data_payload[15:8]};
    assign ethernet_header [127:112]  = seq_no_g;
    
  • 实际XGMII格式为
     frame0_1 : 0707_0707_0707_0707
     frame0_2 : df55_5555_5555_55fb
     frame0_3 : 0000_2222_0000_0000
     frame0_5 : 0000_4000_1111_0000
     frame0_6 : 0000_0000_0000_0000
     frame0_7 : 0000_0000_0000_0000
     frame0_8 : 0000_0000_0000_0000
     frame0_9 : 0000_0000_0000_0000
     frame0_10: 0000_0000_0000_0000
     frame0_11: 0904_0000_0000_0000
     
     frame1_1 : 0707_0707_07fd_fd4a
     frame1_2 : 0707_0707_0707_0707
     frame1_3 : df55_5555_5555_55fb
     frame1_4 : 0000_2222_0000_0000
     frame1_5 : 0001_4000_1111_0000
     frame1_6 : 0001_0001_0001_0001
     frame1_7 : 0001_0001_0001_0001
     frame1_8 : 0001_0001_0001_0001
     frame1_9 : 0001_0001_0001_0001
     frame1_10: 0001_0001_0001_0001
     frame1_11: 0001_0001_0001_0001
     frame1_12: 0001_0001_0001_0001
     frame1_13: d864_0001_0001_0001
     
     frame2_1 : 0707_0707_07fd_3991
     frame2_2 : 0707_0707_0707_0707
     frame2_3 : df55_5555_5555_55fb
     frame1_4 : 0000_2222_0000_0000
     frame1_5 : 0002_4000_1111_0000
     frame1_6 : 0002_0002_0002_0002
     frame1_7 : 0002_0002_0002_0002
     frame1_8 : 0002_0002_0002_0002
     frame1_9 : 0002_0002_0002_0002
     frame1_10: 0002_0002_0002_0002
     frame1_11: 0002_0002_0002_0002
     frame1_12: 0002_0002_0002_0002
     frame1_13: ad85_0002_0002_0002
     
     frame3_1 : 0707_0707_07fd_af8c
     frame3_2 : 0707_0707_0707_0707
     frame3_3 : df55_5555_5555_55fb
     frame3_4 : 0000_2222_0000_0000
     frame3_5 : 0003_4000_1111_0000
     frame3_6 : 0003_0003_0003_0003
     frame3_7 : 0003_0003_0003_0003
     frame3_8 : 0003_0003_0003_0003
     frame3_9 : 0003_0003_0003_0003
     frame3_10: 0003_0003_0003_0003
     frame3_11: 0003_0003_0003_0003
     frame3_12: 0003_0003_0003_0003
     frame3_13: 7ce5_0003_0003_0003
    
     frame4_1 : 0707_0707_07fd_6b57
     frame4_2 : 0707_0707_0707_0707
     frame4_3 : df55_5555_5555_55fb
     frame4_4 : 0000_2222_0000_0000
     frame4_5 : 0004_7d00_1111_0000
     frame4_6 : 0004_0004_0004_0004
     frame4_7 : 0004_0004_0004_0004
     frame4_8 : 0004_0004_0004_0004
     frame4_9 : 0004_0004_0004_0004
     frame4_10: 0004_0004_0004_0004
     frame4_11: 0004_0004_0004_0004
     frame4_12: 0004_0004_0004_0004
     frame4_13: 0004_0004_0004_0004
     frame4_14: 0004_0004_0004_0004
     frame4_15: 0004_0004_0004_0004
     frame4_16: 0004_0004_0004_0004
     frame4_17: 0004_0004_0004_0004
     frame4_18: 0004_0004_0004_0004
     frame4_19: 0004_0004_0004_0004
     frame4_20: 0004_0004_0004_0004
     frame4_21: 0004_0004_0004_0004
     frame4_22: fda1_6eb5_a404_0004
    
     frame5_1 : 0707_0707_0707_0707
     frame5_2 : 5555_55fb_0707_0707
     frame5_3 : 0000_0000_df55_5555
     frame5_4 : 1111_0000_0000_2222
     frame5_5 : 0005_0005_0005_7d00
     frame5_6 : 0005_0005_0005_0005
     frame5_7 : 0005_0005_0005_0005
     frame5_8 : 0005_0005_0005_0005
     frame5_9 : 0005_0005_0005_0005
     frame5_10: 0005_0005_0005_0005
     frame5_11: 0005_0005_0005_0005
     frame5_12: 0005_0005_0005_0005
     frame5_13: 0005_0005_0005_0005
     frame5_14: 0005_0005_0005_0005
     frame5_15: 0005_0005_0005_0005
     frame5_16: 0005_0005_0005_0005
     frame5_17: 0005_0005_0005_0005
     frame5_18: 0005_0005_0005_0005
     frame5_19: 0005_0005_0005_0005
     frame5_20: 0005_0005_0005_0005
     frame5_21: 0005_0005_0005_0005
     frame5_22: ec05_6eb5_a405_0005
    
  • 可以得出以下结论,1每帧间用"fd 07 07 07 …"填充最少12Byte,根据payload长度(自适应动态调整)07个数,最终把整帧凑成8的整数倍数
    • 如payload =63,XGMII_frame = fd + 07*14 + df55_5555_5555_55fb + 长度/类型 + payload + FCS = 104 ,104/8 = 13;
    • 如payload =64,XGMII_frame = fd + 07*13 + df55_5555_5555_55fb + 长度/类型 + payload + FCS = 104 ,104/8 = 13;
    • 如payload =65,XGMII_frame = fd + 07*12 + df55_5555_5555_55fb + 长度/类型 + payload + FCS = 104 ,104/8 = 13;
    • 如payload =66,XGMII_frame = fd + 07*11 + df55_5555_5555_55fb + 长度/类型 + payload + FCS = 104 ,104/8 = 13;
    • 如payload =67,XGMII_frame = fd + 07*14 + df55_5555_5555_55fb + 长度/类型 + payload + FCS = 108 ,连发两次216可被8整除;
    • 如payload =68,XGMII_frame = fd + 07*13 + df55_5555_5555_55fb + 长度/类型 + payload + FCS = 108 ,连发两次216可被8整除;
    • 如payload =69,XGMII_frame = fd + 07*12 + df55_5555_5555_55fb + 长度/类型 + payload + FCS = 108 ,连发两次216可被8整除;
    • 如payload =70,XGMII_frame = fd + 07*11 + df55_5555_5555_55fb + 长度/类型 + payload + FCS = 108 ,连发两次216可被8整除;
    • 如payload =71,XGMII_frame = fd + 07*14 + df55_5555_5555_55fb + 长度/类型 + payload + FCS = 112,112/8 = 14;
    • 如此反复循环
  • 前导码(7Byte)+ 帧开始符(1Byte)为“”df55_5555_5555_55fb“
  • FCS加在frame结尾(CRC)
  • 数据流
    • 进MAC层前,格式为目标地址+源地址+类型/长度+playload,通过axi_stream进入MAC层(不可被8整除时用Keep补齐)
    • MAC做了以下工作
      • 剔除axi_stream中的无效数据
      • 根据XGMII协议补充间隔符、前导码、FCS
      • 最终生成复合MGMII协议格式的数据
  • 发送效率
    • 文档中的发送效率如下图所示
      10G以太网_第6张图片

    • 上图中默认间隔符号的个数为12Byte,但是在实际发送过程中由于XGMII每个帧的长度为8的整数倍,所以间隔符号在12Byte-15Byte间调整,例如Payload为64byte时,间隔符的实际个数为14byte,那么无效数据的个数并非38byte而是41byte。

三、PHY(PCS/PMA)

  • 该层位于OSI模型的第一层即PHY层,PHY层与MAC(MAC时OSI模型第二层)层相连
  • PHY(第一层)进一步划分为物理介质层(PMD),物理中间层(PMA)和物理编码子层(PCS),例如:光纤收发机属于PMD
    10G以太网_第7张图片

10G以太网_第8张图片

  • 10GBASE_R core内部结构框图如下图所示
    10G以太网_第9张图片

    • XGMII interface
    • 传输路径,包括 64b/66b encoder, 加扰器, Gearbox
    • 接收路行,包括包括块同步、解扰器、译码器和BER(Bit Error Rate)监视器
    • 接收数据路径中的弹性缓冲区
    • Test pattern generation and checking
    • 光学串行接口
    • Management registers (PCS/PMA) with optional MDIO interface
      • 与 MAC 相连时 mdio_tri 不需要连接
  • 10GBASE_KR core内部结构框图如下图所示
    10G以太网_第10张图片

    • 相比于10GBASE_R,KR在传输和接收通道上增加了FEC(前向纠错), AN(自主协商)

四、MDIO

  • MDIO interface 为 MAC core 提供 PCS/PMA core 的控制通道,MAC core 框图如下:
    10G以太网_第11张图片

  • PCS/PMA core MDIO 接口如下表所示

    • Signal Name Direction Description
      mdc I Management clock
      mdio_in I MDIO Input
      mdio_out O MDIO Output
      mdio_tri O MDIO 3-state control.1 disconnects the output driver from the MDIO bus.
      prtad[4:0] I MDIO port address. When multiple MDIO-managed ports appear on the same bus, this input can be used to set the address of each port.
    • mdc 由 MAC core产生
      在这里插入图片描述

      • 其中 fHOST_CLK = 156.25MHz
      • fMDC 频率不可超过2.5MHz
      • 例如:Clock Divide[5:0] = 39,通过上式计算fMDC约为1.95MHz
    • mdio 时序图如下所示
      10G以太网_第12张图片

10G以太网_第13张图片

* 上图中的PRTAD、 DEVAD由 MAC core reg “MDIO configuration Word1”根据实际情况下发的。
  * parad[4:0],由 PCS/PMA core 引用出可由逻辑层配置
  * DEVAD(device address),当操作PMA时该值为5‘b0_0001,当操作PCS时该值为5‘b0_0011。此地址对应PCS/PMA MDIO Registers Address X.YYYYY中的X,例如 “MDIO Register 1.0: PMA/PMD Control 1” 的Registers Address的地址为1.0,则DEVAD的值为5‘b0_0001。
* 上图中的OP也是由MAC core reg “MDIO configuration Word1”根据实际情况下发的。
  * 配置地址时OP=2‘b00;
  * 写时OP=2‘b01;
  * 读时OP=2‘b11;
* 上图中的ST表示START,值为2‘b00
  • 例1,MAC core 通过MDIO 向 PCS/PMA写数据
    • 1).通过使能 MAC core 的 “MDIO Configuration Word 0”寄存器 “MDIO Enable”和“CLK Divide”
      10G以太网_第14张图片10G以太网_第15张图片
      10G以太网_第16张图片
      10G以太网_第17张图片

    • 2).按照下表顺序操作MAC core相关寄存器
      10G以太网_第18张图片

      • 向 MDIO TX Date寄存器写入欲操作的PCS/PMA core寄存器的地址
        • 注意这里的地址为PCS/PMA core reg addr 中的 X.YYYYY,中的Y
      • 配置“MDIO Configuration Word 1”中的 DEVAD,PRTAD,OP(00)
      • 等待(读取)“MDIO Configuration Word 1”的bit7变为0
      • 将 欲写入 PCS/PMA core寄存器 的数据写入 MAC core的寄存器MDIO TX Date。
      • 配置“MDIO Configuration Word 1”中的 DEVAD,PRTAD,OP(01)
      • 等待(读取)“MDIO Configuration Word 1”的bit7变为0
  • 例2,MAC core 通过MDIO 从 PCS/PMA读数据
    • 1).通过使能 MAC core 的 “MDIO Configuration Word 0”寄存器 “MDIO Enable”和“CLK Divide”(若已经使能忽略该步骤)
    • 2).按照下表顺序操作MAC core相关寄存器
      10G以太网_第19张图片

五、各种长度专题

  • payload_size
    • 由仿真文件中的tg_config或Gen reg_14决定
      10G以太网_第20张图片

    • 在实际应用中由Microblaze通过axi_lite配置eth_axi_stream_gen_mon的reg_14实现
      10G以太网_第21张图片

10G以太网_第22张图片

  • pkg_length

    • 该信号位于axi_stream_gen模块内
      在这里插入图片描述

    • pkg_length = payload_size + 14
      10G以太网_第23张图片

  • packet_count

    • 由Microblaze通过axi_lite配置eth_axi_stream_gen_mon的reg_1C实现
    • 仿真时没有用到,实际跑时可以关注下
  • frame_length

    • 该信号由10G Ethernet Mac(xilinx IP)产生,用于统计MAC发送frame len框图如下
      10G以太网_第24张图片

    • frame_length = vector[19:5] = 目标地址 + 源地址 + 类型/长度 + payload_size + FCS(4Byte),时序和位定义如下:
      10G以太网_第25张图片10G以太网_第26张图片

  • frame_count

    • 在仿真tb文件中用于统计mac 传输的frame数量
    • 如上图所示每个valid信号会出发一次vector传输,也就是每次frame传输开始时都会产生一个valid信号所以可以通过统计valid信号个数表示frame传输次数
    • 仿真波形如下
      在这里插入图片描述

你可能感兴趣的:(fpga)