高速接口_(10Gbps )万兆网络中物理编码层 64B66B 编码解码实现

发布时间 2023-09-03 22:44:41作者: 李白的白

万兆网络中物理编码层 64B66B 编码解码实现

目的

  • 万兆以太网的物理编码层(PCS)的编码和解码工作原理和实现方法
  • 使用赛灵思官方提供的 GT Wizard IP 来配置和控制高速接口的参数和功能
  • 实现自定义的 64B66B 编码器和解码器,并进行了测试和验证
  • 使用自定义的数据或标准的以太网数据来进行高速传输

前提条件

  • 需要有一个支持 10.3125 Gbps 的高速接口的开发板或服务器
  • 需要有一定的 FPGA 开发和高速接口设计的基础知识

万兆以太网的架构和层次结构

graph LR A[MAC层] --> B[RS子层] B --> C[XGMII子层] C --> D[PCS子层] D --> E[PMA子层] E --> F[PMD子层] F --> G[MDI子层] subgraph 数据链路层 A B C D end subgraph 物理层 E F G end B --> H{编码/解码} C --> I{8字节转换为66位块} D --> J{64B/66B信号编码} E --> K{串行/并行转换} F --> L{电气/光学信号转换}
其中:

- MAC层:媒体访问控制层,负责生成和解析以太网帧,提供全双工的MAC接口。
- RS子层:重协调子层,负责在MAC层和XGMII子层之间进行信号映射,添加或删除控制字符。
- XGMII子层:10千兆位媒体独立接口子层,负责提供32位宽的并行数据路径,支持全双工操作。
- PCS子层:物理编码子层,负责将8字节的XGMII数据编码为66位的块,或者将66位的块解码为8字节的XGMII数据,传输给PMA子层或从PMA子层接收。
- PMA子层:物理介质附着子层,负责将PCS子层的数据进行串行化或并行化,并提供时钟恢复功能。
- PMD子层:物理介质相关子层,负责将PMA子层的信号转换为适合传输介质的电气或光学信号,或者将传输介质的信号转换为适合PMA子层的信号。
- MDI子层:媒体相关接口子层,负责定义传输介质的类型、规格和连接方式。

物理编码层(PCS)的作用和结构

  • PCS 是万兆以太网中负责将 MAC 层的数据转换为适合高速传输的格式的层
  • PCS 的主要功能有:
    • 将 64 位数据转换为 66 位数据,添加同步头(SYNC Header)来区分不同类型的帧
    • 对数据进行加扰(Scrambling)来保证零一均衡,避免直流失调和时钟恢复困难
    • 对数据进行变速器(Gearbox)操作,实现并行数据和串行数据之间的速率转换
    • 对接收到的数据进行同步头搜索(SYNC Header Search),实现帧对齐和锁定
    • 对发送端的数据进行序列暂停(Sequence Pause),实现流量控制
  • PCS 的结构如下图所示:
graph TD A[MAC层] --> B[RS层] B --> C[PCS层] C --> D[PMA层] D --> E[PMD层] E --> F[高速接口] subgraph PCS层 C1[64比特数据] --> C2[加扰器] C2 --> C3[同步头添加器] C3 --> C4[66比特数据] C4 --> C5[变速器Gearbox] C5 --> D end subgraph 加扰器 C21[输入数据] --> C22[58位一位计算器] C22 --> C23[异或运算器] C23 --> C24[输出数据] end subgraph 同步头添加器 C31[输入数据] --> C32[根据帧类型选择同步头01或10] C32 --> C33[在低位插入两比特同步头] C33 --> C34[输出数据] end subgraph 变速器Gearbox C51[输入数据] --> C52[根据时钟速率进行数据转换] C52 --> D end

说明

  • MAC层是媒体访问控制层,负责以太网帧的生成和解析。
    • MAC 层负责将上层提供的数据帧进行封装、校验、排队等处理,然后通过可重组子层(RS)将数据帧分割为 64 比特的块,并添加一些控制信息,然后交给 PCS 层
  • RS层是重新分片层,负责在MAC层和PCS层之间进行数据的分片和重组。
  • PCS层是物理编码层,负责将64比特数据转换为66比特数据,并进行加扰和同步头的添加。
    • PCS 层负责将 MAC 层提供的数据进行编码、加扰、同步等处理,然后通过物理媒介附件层(PMA)和物理媒介依赖子层(PMD)将数据串行化并发送到物理媒介上
  • PMA层是物理媒介附加层,负责将66比特数据转换为高速接口所需的格式,并进行时钟恢复和对齐。
  • PMD层是物理媒介依赖层,负责将高速接口的信号转换为电气或光学信号,并进行驱动和接收。
  • 高速接口是用于连接不同设备的串行接口,如SFP+或QSFP+等。

64B66B 编码原理和规则

  • 64B66B 编码是一种将 64 位数据转换为 66 位数据的编码方式,每个帧都有两位同步头来标识帧类型
  • 64B66B 编码有两种帧类型:
    • 纯数据帧(Data Frame):同步头为 01,后面跟着 64 位数据,无控制字(Control Character)
    • 混合数据帧(Mixed Data Frame):同步头为 10,后面跟着一个字节的类型字段(Type Field),表示控制字或数据字的个数,以及 56 位的控制字或数据字
  • 控制字是一种用于表示特殊含义的 7 位字符,如空闲、起始、结束等,它们不会出现在正常的数据中,可以用于帧对齐和识别
  • 数据字是一种用于表示正常数据的 8 位字符,它们可以是 MAC 层传递过来的任意数据
  • 下表给出了不同类型字段对应的混合数据帧结构:
Type Field Frame Structure Description
0x78 SYNC + Type + D0 + D1 + … + D6 起始帧,后面跟着七个字节的数据
0x79 SYNC + Type + C0 + D0 + … + D5 起始帧,后面跟着一个控制字和六个字节的数据
0x7F SYNC + Type + C0 + C1 + … + C6 起始帧,后面跟着七个控制字
0x87 SYNC + Type + C0 + C1 + … + C7 结束帧,后面跟着八个控制字
0x8F SYNC + Type + D0 + D1 + … + D7 结束帧,后面跟着八个字节的数据
0x1E SYNC + Type + C0 + C1 + … + C7 空闲帧,后面跟着八个控制字

加扰和解扰的原理和方法

  • 加扰(Scrambling)是一种对数据进行变换的方法,目的是使数据中的零和一的比例接近 50%,避免出现长串的零或一,影响高速传输的质量
  • 解扰(Descrambling)是一种对加扰后的数据进行还原的方法,目的是恢复原始的数据内容,便于后续的处理
  • 加扰和解扰使用相同的多项式和电路,只是输入和输出互换,多项式为 x^58 + x^19 + 1

设计加扰器

根据加扰器的结构框图设计加扰器,并用 verilog 代码实现,使用以上提供的
测试向量进行激励,对比加扰之后的结果是否正确。
58个寄存器初始值初始值全 1;

有两种方案:
第一种使用组合逻辑描述这个编码过程,然后用寄存器锁存编码结果。

模块接口定义
输入: 
	sclk,系统时钟
	rst,复位, 高有效 
	data_valid_in,rawdata 有效标志 
	data_in,需要加扰的数据[63:0] 
	head_valid_in,头有效信号 
	head_in,头信号用于 64/66 编码
输出: 
	data_valid_out,加扰之后的数据有效标志 
	Data_out,加扰后的数据
	Head_valid_out,头有效信号 
	Head_out,

第二种方案:使用移位寄存器加时序逻辑的并行运算模式

S58=D58+S19+S0 
S59=D59+S20+S1 
S60=D60+S21+S2
…………………………

需要推到出来送入此绕码模块并行的 64bit 数据 1 个时钟节拍输出绕码结果

推到过程标

绿色表示前一拍的值,紫色表示当前拍值

Sr 寄存器变量需要时序逻辑实现。Sr 在没有赋值之前是保存着上一拍的组合逻辑结果。

S 组合逻辑实现,s[64]~s[127]是当前拍的组合逻辑结果

D 当前的输入等待编码的数据,可以理解 d[64:127] 当前输入的 d[0:63]

s58 = d58 s19 s0 sr58
s59 = d59 s20 s1 sr59
s60 = d60 s21 s2 sr60
s61 = d61 s22 s3 sr61
s62 = d62 s23 s4 sr62
s63 = d63 s24 s5 sr63
s64 = d64 sr25 sr6 = sr0
s65 = d65 sr26 sr7 = sr1
s66 = d66 sr27 sr8 = sr2
s67 = d67 sr28 sr9 = sr3
s68 = d68 sr29 sr10 = sr4
s69 = d69 sr30 sr11 = sr5
s70 = d70 sr31 sr12 = sr6
s71 = d71 sr32 sr13 = sr7
s72 = d72 sr33 sr14 = sr8
s73 = d73 sr34 sr15 = sr9
s74 = d74 sr35 sr16 = sr10
s75 = d75 sr36 sr17 = sr11
s76 = d76 sr37 sr18 = sr12
s77 = d77 sr38 sr19 = sr13
s78 = d78 sr39 sr20 = sr14
s79 = d79 sr40 sr21 = sr15
s80 = d80 sr41 sr22 = sr16
s81 = d81 sr42 sr23 = sr17
s82 = d82 sr43 sr24 = sr18
s83 = d83 sr44 sr25 = sr19
s84 = d84 sr45 sr26 = sr20
s85 = d85 sr46 sr27 = sr21
s86 = d86 sr47 sr28 = sr22
s87 = d87 sr48 sr29 = sr23
s88 = d88 sr49 sr30 = sr24
s89 = d89 sr50 sr31 = sr25
s90 = d90 sr51 sr32 = sr26
s91 = d91 sr52 sr33 = sr27
s92 = d92 sr53 sr34 = sr28
s93 = d93 sr54 sr35 = sr29
s94 = d94 sr55 sr36 = sr30
s95 = d95 sr56 sr37 = sr31
s96 = d96 sr57 sr38 = sr32
s97 = d97 sr58 sr39 = sr33
s98 = d98 sr59 sr40 = sr34
s99 = d99 sr60 sr41 = sr35
s100 = d100 sr61 sr42 = sr36
s101 = d101 sr62 sr43 = sr37
s102 = d102 sr63 sr44 = sr38
s103 = d103 s64 sr45 = sr39
s104 = d104 s65 sr46 = sr40
s105 = d105 s66 sr47 = sr41
s106 = d106 s67 sr48 = sr42
s107 = d107 s68 sr49 = sr43
s108 = d108 s69 sr50 = sr44
s109 = d109 s70 sr51 = sr45
s110 = d110 s71 sr52 = sr46
s111 = d111 s72 sr53 = sr47
s112 = d112 s73 sr54 = sr48
s113 = d113 s74 sr55 = sr49
s114 = d114 s75 sr56 = sr50
s115 = d115 s76 sr57 = sr51
s116 = d116 s77 sr58 = sr52
s117 = d117 s78 sr59 = sr53
s118 = d118 s79 sr60 = sr54
s119 = d119 s80 sr61 = sr55
s120 = d120 s81 sr62 = sr56
s121 = d121 s82 sr63 = sr57
s122 = d122 s83 s64 = sr58
s123 = d123 s84 s65 = sr59
s124 = d124 s85 s66 = sr60
s125 = d125 s86 s67 = sr61
s126 = d126 s87 s68 = sr62
s127 = d127 s88 s69 = sr63

设计解扰器

第一种方法

模块接口定义
输入: 
​	sclk,系统时钟
​	rst,复位, 高有效 
​	data_valid_in,rawdata 有效标志 
​	data_in,需要加扰的数据[63:0] 
​	head_valid_in,头有效信号 
​	head_in,头信号用于 64/66 编码
输出: 
​	data_valid_out,加扰之后的数据有效标志 
​	Data_out,加扰后的数据
​	Head_valid_out,头有效信号 
​	Head_out,

第二种方法

并行推导解扰的公式

D[0:63]解扰输出

S64~s127 是待解码的数据输入

Sr0~63 在没有更新之前是保存着上一排的 s 的值。

d58 = s58 s19 s0 s58 = sr58
d59 = s59 s20 s1 s59 = sr59
d60 = s60 s21 s2 s60 = sr60
d61 = s61 s22 s3 s61 = sr61
d62 = s62 s23 s4 s62 = sr62
d63 = s63 s24 s5 s63 = sr63
d0 = s64 sr25 sr6 s64 = sr0
d1 = s65 sr26 sr7 s65 = sr1
d2 = s66 sr27 sr8 s66 = sr2
d3 = s67 sr28 sr9 s67 = sr3
d4 = s68 sr29 sr10 s68 = sr4
d5 = s69 sr30 sr11 s69 = sr5
d6 = s70 sr31 sr12 s70 = sr6
d7 = s71 sr32 sr13 s71 = sr7
d8 = s72 sr33 sr14 s72 = sr8
d9 = s73 sr34 sr15 s73 = sr9
d10 = s74 sr35 sr16 s74 = sr10
d11 = s75 sr36 sr17 s75 = sr11
d12 = s76 sr37 sr18 s76 = sr12
d13 = s77 sr38 sr19 s77 = sr13
d14 = s78 sr39 sr20 s78 = sr14
d15 = s79 sr40 sr21 s79 = sr15
d16 = s80 sr41 sr22 s80 = sr16
d17 = s81 sr42 sr23 s81 = sr17
d18 = s82 sr43 sr24 s82 = sr18
d19 = s83 sr44 sr25 s83 = sr19
d20 = s84 sr45 sr26 s84 = sr20
d21 = s85 sr46 sr27 s85 = sr21
d22 = s86 sr47 sr28 s86 = sr22
d23 = s87 sr48 sr29 s87 = sr23
d24 = s88 sr49 sr30 s88 = sr24
d25 = s89 sr50 sr31 s89 = sr25
d26 = s90 sr51 sr32 s90 = sr26
d27 = s91 sr52 sr33 s91 = sr27
d28 = s92 sr53 sr34 s92 = sr28
d29 = s93 sr54 sr35 s93 = sr29
d30 = s94 sr55 sr36 s94 = sr30
d31 = s95 sr56 sr37 s95 = sr31
d32 = s96 sr57 sr38 s96 = sr32
d33 = s97 sr58 sr39 s97 = sr33
d34 = s98 sr59 sr40 s98 = sr34
d35 = s99 sr60 sr41 s99 = sr35
d36 = s100 sr61 sr42 s100 = sr36
d37 = s101 sr62 sr43 s101 = sr37
d38 = s102 sr63 sr44 s102 = sr38
d39 = s103 s64 sr45 s103 = sr39
d40 = s104 s65 sr46 s104 = sr40
d41 = s105 s66 sr47 s105 = sr41
d42 = s106 s67 sr48 s106 = sr42
d43 = s107 s68 sr49 s107 = sr43
d44 = s108 s69 sr50 s108 = sr44
d45 = s109 s70 sr51 s109 = sr45
d46 = s110 s71 sr52 s110 = sr46
d47 = s111 s72 sr53 s111 = sr47
d48 = s112 s73 sr54 s112 = sr48
d49 = s113 s74 sr55 s113 = sr49
d50 = s114 s75 sr56 s114 = sr50
d51 = s115 s76 sr57 s115 = sr51
d52 = s116 s77 sr58 s116 = sr52
d53 = s117 s78 sr59 s117 = sr53
d54 = s118 s79 sr60 s118 = sr54
---- ---- ---- ---- ---- ---- ---- ---- ----
d55 = s119 s80 sr61 s119 = sr55
d56 = s120 s81 sr62 s120 = sr56
d57 = s121 s82 sr63 s121 = sr57
d58 = s122 s83 s64 s122 = sr58
d59 = s123 s84 s65 s123 = sr59
d60 = s124 s85 s66 s124 = sr60
d61 = s125 s86 s67 s125 = sr61
d62 = s126 s87 s68 s126 = sr62
d63 = s127 s88 s69 s127 = sr63

GT Wizard IP 的配置和使用

GT Wizard IP 是什么?

  • GT Wizard IP 是赛灵思官方提供的一个用于配置高速接口的 IP,可以支持多种协议和模式,如 64B/66B、8B/10B、Aurora 等。
  • GT Wizard IP 可以根据用户的选择,生成相应的 GT 子系统,包括 PMA、PCS、TX/RX Buffer 等模块,以及一些示例代码和测试平台。
  • GT Wizard IP 可以帮助用户快速搭建高速接口的设计,无需了解底层的细节,只需要通过图形界面设置一些参数,就可以生成可综合的 HDL 代码。

如何配置 GT Wizard IP?

  • 配置 GT Wizard IP 的第一步是选择目标器件和目标协议,例如,在项目中,选择 Kintex UltraScale+ 器件和 64B/66B 协议。
  • 配置 GT Wizard IP 的第二步是设置 PMA 层的参数,例如,在本项目中,设置线速率为 10.3125 Gbps,参考时钟为 156.25 MHz,数据宽度为 64 位等。
  • 配置 GT Wizard IP 的第三步是设置 PCS 层的参数,例如,在本项目中,设置编码方式为 64B/66B,同步头为 01 或 10,加扰方式为 X58 + X19 + 1 等。
  • 配置 GT Wizard IP 的第四步是设置 Buffer 层的参数,例如,在本项目中,设置 TX Buffer 和 RX Buffer 的深度为 16 字节,使能了 TX Buffer 的 FIFO 模式和 RX Buffer 的帧模式等。
  • 配置 GT Wizard IP 的第五步是生成输出文件,包括 HDL 源码、仿真文件、约束文件、文档等。

如何使用 GT Wizard IP?

  • 使用 GT Wizard IP 的第一步是将生成的 HDL 源码添加到项目中,并根据需要修改一些参数或逻辑。
  • 使用 GT Wizard IP 的第二步是将生成的约束文件添加到项目中,并根据实际的管脚分配进行修改。
  • 使用 GT Wizard IP 的第三步是将生成的仿真文件添加到项目中,并根据需要修改一些测试向量或波形。
  • 使用 GT Wizard IP 的第四步是进行综合、布局、布线、生成比特流等操作,得到可以烧录到 FPGA 上的文件。
  • 使用 GT Wizard IP 的第五步是将 FPGA 连接到高速接口的物理媒介上,并进行实际的数据传输和测试。

举例说明

  • 假设要设计一个 10Gbps 的以太网收发器,使用 Kintex UltraScale+ 器件和 FMC 卡作为硬件平台。
  • 可以按照以下步骤来配置和使用 GT Wizard IP:
    • 打开 Vivado 软件,创建一个新项目,选择 Kintex UltraScale+ 器件作为目标器件。
    • 在项目中添加一个新的 IP 核,搜索并选择 GT Wizard IP。
    • 在 GT Wizard IP 的图形界面中,选择 Line Rate 为 10.3125 Gbps,Reference Clock Frequency 为 156.25 MHz,Data Width 为 64 bits。
    • 在 PMA Attributes 标签页中,选择 Transceiver Technology 为 GTH/GTY/GTP/GTX/GTPE2/GTZE2/GTHE4/GTYE4/GTME4/GTYE3/GTHE3/GTXE2/GTPA1/GTPA2/GTPDUAL,选择 Line Side Mode 为 64B/66B,选择 Reference Clock Selection 为 Single-ended。
    • 在 PCS Attributes 标签页中,选择 PCS Mode 为 64B/66B,选择 Sync Header 为 01 or 10,选择 Scrambler Polynomial 为 X58 + X19 + 1。
    • 在 Buffer Attributes 标签页中,选择 TX Buffer Depth 为 16 bytes,选择 RX Buffer Depth 为 16 bytes,使能 TX Buffer FIFO Mode 和 RX Buffer Frame Mode。
    • 在 Output Products 标签页中,选择生成 HDL Source Files、Simulation Files、Constraints Files、Documentation 等输出文件。
    • 点击 Generate 按钮,等待 GT Wizard IP 生成输出文件,并将其添加到项目中。
    • 在项目中打开生成的 HDL 源码,查看并修改一些参数或逻辑,例如,在本文中,我们修改了 TX 的数据生成逻辑,使其能够发送一个以太网帧的数据。
    • 在项目中打开生成的约束文件,查看并修改一些管脚分配,例如,在本文中,我们修改了 GT REFCLK 的管脚分配,使其能够接收 FMC 卡上的差分时钟信号。
    • 在项目中打开生成的仿真文件,查看并修改一些测试向量或波形,例如,在本文中,我们修改了 RX 的数据检测逻辑,使其能够验证接收到的以太网帧的数据是否正确。
    • 在项目中进行综合、布局、布线、生成比特流等操作,得到可以烧录到 FPGA 上的文件。
    • 将 FPGA 连接到 FMC 卡上,并将 FMC 卡上的高速接口连接到以太网交换机或其他设备上。
    • 使用 JTAG 或其他方式将比特流文件烧录到 FPGA 上,并观察高速接口的数据传输和测试结果。
  • GT Wizard 的主要接口有:
    • TXUSRCLK/TXUSRCLK2:用户时钟,用于驱动 TX 端的并行数据和控制信号
    • TXDATA/TXD[63:0]:用户数据,64 比特宽度,用于发送到 PCS 的编码数据
    • TXHEADER/TXH[1:0]:用户头部,2 比特宽度,用于发送到 PCS 的同步头
    • TXELECIDLE:用户空闲信号,用于控制 PCS 进入空闲状态
    • RXUSRCLK/RXUSRCLK2:用户时钟,用于驱动 RX 端的并行数据和控制信号
    • RXDATA/RXD[63:0]:用户数据,64 比特宽度,用于接收从 PCS 的编码数据
    • RXHEADER/RXH[1:0]:用户头部,2 比特宽度,用于接收从 PCS 的同步头
    • RXELECIDLE:用户空闲信号,用于检测 PCS 是否处于空闲状态

变速器(Gearbox)的原理和方法

Gearbox是什么?

  • Gearbox是一种用于高速串行接口的数据速率转换器,可以在不同的数据速率之间进行数据的对齐和转换。
  • Gearbox可以分为发送端和接收端,发送端用于将并行数据转换为串行数据,接收端用于将串行数据转换为并行数据,并进行同步头的搜索和锁定。

Gearbox为什么需要?

  • Gearbox的作用是为了适应高速接口的数据传输需求,例如:

    • 在10G以太网中,物理编码层(PCS)使用64位数据,而物理媒介层(PMA)使用66位数据,因此需要一个64B/66B同步Gearbox来进行转换。
    • 在PCIe中,传输层(TL)使用32位数据,而物理层(PHY)使用8位或16位数据,因此需要一个32B/8B或32B/16B异步Gearbox来进行转换。
  • Gearbox的主要作用是解决高速串行接口中的两个问题:

    • 数据速率不匹配:由于不同的编码方式或者不同的传输介质,发送端和接收端的数据速率可能不一致,例如64B/66B编码和8B/10B编码。
    • 数据同步丢失:由于高速串行接口中没有时钟信号,发送端和接收端需要通过同步头来进行数据的对齐和恢复,但是由于信号干扰或者编码方式的不同,同步头可能会被破坏或者无法识别。

Gearbox如何工作?

  • Gearbox工作的基本原理是使用一组寄存器和逻辑门来实现数据的缓存、移位和选择。

  • Gearbox有两个主要部分:发送端Gearbox和接收端Gearbox。

  • 发送端Gearbox将64位并行数据转换为66位串行数据,接收端Gearbox将66位串行数据转换为64位并行数据

  • 发送端Gearbox:

    - 发送端首先将并行数据按照一定的编码方式进行编码,例如64B/66B编码或者8B/10B编码,以增加数据的可靠性和传输效率。
    - 发送端然后将编码后的并行数据通过Gearbox进行速率转换,使得输出的串行数据与接收端的速率相匹配,例如将64位并行数据转换为66位串行数据。
    - 发送端最后将串行数据通过高速接口进行传输,例如通过光纤或者电缆。
    
    • 发送端Gearbox的输入是64位并行数据和一个时钟信号。
    • 发送端Gearbox的输出是66位串行数据和一个时钟信号。
    • 发送端Gearbox的工作流程如下:
      1. 将64位并行数据按照8字节为一组进行分组,并在每组前面添加两位同步头(01或10)。
      2. 将每组66位数据存储到一个66位寄存器中,并使用一个计数器记录当前存储了多少组数据。
      3. 当计数器达到8时,表示已经存储了一帧(512位)的数据,此时启动一个输出使能信号,并将寄存器中的数据依次移出。
      4. 使用一个分频器将输入时钟信号分频为输出时钟信号,使得输出时钟信号的频率为输入时钟信号的8.25倍(即10.3125Gbps)。
      5. 使用输出时钟信号作为移位寄存器的时钟,将寄存器中的数据按照从高位到低位的顺序移出,并输出为66位串行数据。
  • 接收端Gearbox:

    - 接收端首先将从高速接口接收到的串行数据通过Gearbox进行速率转换,使得输出的并行数据与发送端的速率相匹配,例如将66位串行数据转换为64位并行数据。
    - 接收端然后通过Gearbox进行同步头的搜索和锁定,以确定数据的起始位置和结束位置,并进行时钟恢复。
    - 接收端最后将并行数据按照一定的编码方式进行解码,例如66B/64B解码或者10B/8B解码,以还原原始的数据内容。
    
    • 接收端Gearbox的输入是66位串行数据和一个时钟信号。
    • 接收端Gearbox的输出是64位并行数据和一个时钟信号。
    • 接收端Gearbox的工作流程如下:
      1. 使用一个锁相环(PLL)将输入时钟信号锁定到10.3125Gbps,并产生一个本地时钟信号。
      2. 使用本地时钟信号作为移位寄存器的时钟,将输入的66位串行数据按照从低位到高位的顺序移入,并存储到一个66位寄存器中。
      3. 使用一个状态机来检测同步头(01或10),并根据同步头的位置来确定数据的边界。
      4. 当检测到一组完整的66位数据时,将寄存器中的数据移出,并去掉同步头,只保留64位数据。
      5. 将每组64位数据存储到一个64位寄存器中,并使用一个计数器记录当前存储了多少组数据。
      6. 当计数器达到8时,表示已经存储了一帧(512位)的数据,此时启动一个输出使能信号,并将寄存器中的数据依次移出。
      7. 使用一个分频器将本地时钟信号分频为输出时钟信号,使得输出时钟信号的频率为本地时钟信号的0.121倍(即1.25Gbps)。
      8. 使用输出时钟信号作为移位寄存器的时钟,将寄存器中的数据按照从高位到低位的顺序移出,并输出为64位并行数据。

Gearbox如何设计?

Gearbox的设计要考虑以下几个方面:

  • 数据对齐:要保证输入和输出的数据在时序上正确对齐,避免数据丢失或错误。

  • 数据同步:要保证输入和输出的数据在时钟上正确同步,避免时钟偏差或抖动。

  • 数据格式:要保证输入和输出的数据在格式上正确转换,避免编码错误或冲突。

  • 发送端

    • 发送端需要设计一个编码器,用于将并行数据按照一定的编码方式进行编码,例如64B/66B编码或者8B/10B编码。
    • 发送端需要设计一个变速器(gearbox),用于将编码后的并行数据进行速率转换,例如将64位并行数据转换为66位串行数据。
    • 发送端需要设计一个高速串行器(serializer),用于将变速器输出的串行数据进行串行化,并输出到高速接口。
  • 接收端

    • 接收端需要设计一个高速反串器(deserializer),用于将从高速接口接收到的串行数据进行反串化,并输出到变速器。
    • 接收端需要设计一个变速器(gearbox),用于将反串器输出的串行数据进行速率转换,例如将66位串行数据转换为64位并行数据。
    • 接收端需要设计一个解码器,用于将变速器输出的并行数据按照一定的编码方式进行解码,例如66B/64B解码或者10B/8B解码。
    • 接收端需要设计一个同步头搜索器(sync header detector),用于在解码后的并行数据中搜索和锁定同步头,以确定数据的起始位置和结束位置,并进行时钟恢复。

Gearbox如何实现?

  • Gearbox的实现可以分为两个部分:发送端和接收端。
  • 发送端:
    • 发送端可以使用Verilog或者VHDL等硬件描述语言来实现编码器、变速器和高速串行器等模块,并进行仿真和综合。
    • 发送端可以使用赛灵思(Xilinx)或者英特尔(Intel)等FPGA厂商提供的IP核来实现高速串行接口,例如GTY或者GXB等。
    • 发送端可以使用赛灵思(Xilinx)或者英特尔(Intel)等FPGA厂商提供的开发板和工具链来实现硬件上板和测试。
  • 接收端:
    • 接收端可以使用Verilog或者VHDL等硬件描述语言来实现高速反串器、变速器、解码器和同步头搜索器等模块,并进行仿真和综合。
    • 接收端可以使用赛灵思(Xilinx)或者英特尔(Intel)等FPGA厂商提供的IP核来实现高速串行接口,例如GTY或者GXB等。
    • 接收端可以使用赛灵思(Xilinx)或者英特尔(Intel)等FPGA厂商提供的开发板和工具链来实现硬件上板和测试。

Gearbox有什么应用?

  • Gearbox有很多应用,例如:
    • 在10G以太网中,使用64B/66B编码和8B/10B编码的混合模式,需要在发送端和接收端使用Gearbox进行数据速率转换。
    • 在25G以太网中,使用64B/66B编码和64B/67B编码的混合模式,需要在发送端和接收端使用Gearbox进行数据速率转换。
    • 在PCI Express中,使用8B/10B编码和128B/130B编码的混合模式,需要在发送端和接收端使用Gearbox进行数据速率转换。

Gearbox有什么优点和缺点?

  • Gearbox的优点是:
    • 可以在不同的数据速率之间进行数据的对齐和转换,提高了数据传输的效率和兼容性。
    • 可以在不同的编码方式之间进行数据的转换,增加了数据传输的可靠性和安全性。
    • 可以在不同的传输介质之间进行数据的转换,扩展了数据传输的范围和场景。
  • Gearbox的缺点是:
    • 增加了硬件设计的复杂度和成本,需要额外的电路资源和功耗。
    • 增加了数据传输的延时和误差,需要额外的同步头和校验位。
    • 增加了数据传输的风险和故障,需要额外的错误检测和恢复机制。

同步头搜索和帧对齐的原理和方法

  • 同步头搜索(SYNC Header Search)是一种对接收到的数据进行帧对齐和锁定的方法,目的是识别出不同类型的帧,并将其分配给相应的处理模块

  • 同步头搜索有两种模式:

    • 初始搜索模式(Initial Search Mode):在接收端复位后或者失去锁定后,对接收到的数据进行同步头匹配,找出起始帧或空闲帧,并进入锁定模式(Locked Mode)
    • 锁定模式(Locked Mode):在找到起始帧或空闲帧后,根据同步头和类型字段来确定每个帧的长度和类型,并将其发送给相应的处理模块,如解码器、序列暂停处理器等,如果发现错误或失去同步,则返回初始搜索模式(Initial Search Mode)
  • 同步头搜索使用一个 gearbox 模块来实现,gearbox 模块可以将串行数据转换为并行数据,并进行速率转换和同步头检测

graph TB subgraph gearbox模块 B[输入端口B] -->|接收数据| G[gearbox] G -->|发送数据| A[输出端口A] G -->|更新状态| S[状态寄存器] end subgraph 同步头搜索和对齐 B -->|检测同步头| H[同步头检测器] H -->|发送信号| C[控制器] C -->|发送信号| G C -->|发送信号| S end subgraph 状态转移 S -->|初始状态| S1((1)) S1 -->|接收到同步头信号| S2((2)) S2 -->|接收到对齐信号| S3((3)) S3 -->|接收到数据信号| S4((4)) S4 -->|接收到结束信号或超时信号| S5((5)) S5 -->|接收到同步头信号或超时信号| S6((6)) S6 -->|接收到对齐信号或超时信号| S7((7)) S7 -->|接收到数据信号或超时信号| S8((8)) S8 -.-> S1 end

序列暂停的原理和方法

  • 序列暂停(Sequence Pause)是一种对发送端的数据进行流量控制的方法,目的是使发送端和接收端之间的数据速率保持一致,避免出现数据溢出或丢失
  • 序列暂停有两种类型:
    • 发送端序列暂停(TX Sequence Pause):在发送端收到接收端的暂停请求后,停止发送正常数据,而是发送一系列的空闲帧,直到接收端取消暂停请求或者超时
    • 接收端序列暂停(RX Sequence Pause):在接收端检测到数据缓冲区快满时,向发送端发送一个暂停请求,请求发送端停止发送正常数据,直到接收端检测到数据缓冲区有足够的空间时,再向发送端发送一个取消暂停请求

解码器的原理和方法

  • 解码器(Decoder)是一种对接收到的数据进行还原和校验的方法,目的是恢复原始的 MAC 层数据,并检测是否有错误或异常
  • 解码器的主要功能有:
    • 根据同步头和类型字段来识别不同类型的帧,并将其分为控制字和数据字
    • 对控制字进行解释,如空闲、起始、结束等,并根据其含义来处理数据流
    • 对数据字进行还原,去除多余的填充字节(Pad Byte),并拼接成 MAC 层数据
    • 对数据进行校验,计算并比较循环冗余校验码(CRC),如果发现错误或异常,则报告给上层

序列暂停处理器的原理和方法

  • 序列暂停处理器(Sequence Pause Processor)是一种对接收到的暂停请求和取消暂停请求进行处理的方法,目的是控制发送端的数据流量,避免出现数据溢出或丢失
  • 序列暂停处理器的主要功能有:
    • 根据接收到的控制字来识别暂停请求和取消暂停请求,并将其转换为相应的信号
    • 对发送端序列暂停模块进行控制,使其根据暂停请求和取消暂停请求来调整发送数据的状态
    • 对发送端序列暂停模块进行监测,检测是否有超时或异常情况,并报告给上层

测试和验证的步骤和方法

  • 测试和验证(Test and Verification)是一种对编码解码实现进行功能和性能检测的步骤和方法,目的是确保编码解码实现能够正确地工作,并满足万兆以太网的标准
  • 测试和验证的主要步骤有:
    • 准备测试环境,包括开发板或服务器、高速接口线缆、测试仪器等
    • 配置测试参数,如线速率、参考时钟、编码方式等,使之与 GT Wizard IP 的配置一致
    • 生成测试数据,可以使用随机数生成器或者预先定义的数据模式,如全零、全一、交替等
    • 运行测试程序,将测试数据通过高速接口发送给编码解码实现,并观察输出数据是否与输入数据一致,以及是否有错误或异常发生
    • 分析测试结果,计算并记录各项性能指标,如误码率(BER)、吞吐量(Throughput)、延迟(Latency)等,并与万兆以太网的标准进行比较