1. 数据流过程
1MB 数据通过 RoCEv2 协议,从 RFSoC-4x2 传输到另一台 RFSoC-4x2 的完整数据流过程。
重点展示串并转换、并串转换的每个细节,以及跨器件时的协议封装/解封装。
1.1. 传输概览
| 参数 | 数值 |
|---|---|
| 数据量 | 1 MB = 8,388,608 bits |
| 线速率 | 100 Gbps (4×25.78125 Gbps) |
| 理论最小时间 | ≈ 84 μs |
| 实际传输时间 | ≈ 100-120 μs(含协议开销) |
| 每通道速率 | 25.78125 Gbps |
| UI (Unit Interval) | 38.788 ps |
1.2. 发送端 RFSoC-4x2 详细数据流
步骤 ①:Host CPU → Verbs API
┌─────────────────────────────────────────┐
│ Host CPU (ARM Cortex-A53 / RISC-V) │
│ 应用层调用 ibv_post_send() │
│ - 指定 QP #42 (Queue Pair) │
│ - 1MB 数据已注册到 Memory Region (MR) │
│ - 生成 SGE (Scatter-Gather Entry) 列表 │
│ - 通常每 SGE = 4KB,共 256 个 SGE │
└─────────────────────────────────────────┘
↓
PCIe Gen3 x8 TLP (Transaction Layer Packet)
↓
关键操作:CPU 不直接拷贝数据,而是通过 DMA 描述符告诉网卡"数据在哪里"。
步骤 ②:PCIe → DMA Engine
┌─────────────────────────────────────────┐
│ DMA Engine (FPGA 内部硬核/软核) │
│ - 读取 Host 内存中的 SGE 列表 │
│ - 按 SGE 分段从 Host DDR 取数 │
│ - 每段 4KB,通过 PCIe TLP 读取 │
│ - 写入 FPGA 内部 TX Buffer (BRAM/URAM) │
└─────────────────────────────────────────┘
↓
并行数据总线: 512-bit @ ~200 MHz (PCIe 有效带宽)
↓
数据形态 :此时数据仍是字节流,1MB 被切分为 256 个 4KB 块。
步骤 ③:RDMA 引擎封装
┌─────────────────────────────────────────┐
│ RDMA 引擎 (FPGA 软逻辑实现) │
│ 对每个 4KB 块封装 RDMA 协议头: │
│ │
│ ┌─────────┬─────────┬───────────────┐ │
│ │ BTH │ RETH │ Payload │ │
│ │ 12B │ 16B │ 4KB │ │
│ │ │ │ │ │
│ │ - Opcode│ - VA │ (实际数据) │ │
│ │ - PSN │ - RKey │ │ │
│ │ - QPN │ - DMA Length │ │
│ └─────────┴─────────┴───────────────┘ │
│ │
│ 1MB → 256 个 RDMA Write 包 │
│ 每包 Payload = 4KB │
│ 加上头后每包 ≈ 4KB + 28B │
└─────────────────────────────────────────┘
↓
并行数据总线: 512-bit @ 312.5 MHz
↓
BTH (Base Transport Header):
- Opcode:
RDMA_WRITE_ONLY(0x14) - PSN (Packet Sequence Number): 0, 1, 2, ... 255
- QPN (Queue Pair Number): 42
- P_Key: 0xFFFF
RETH (RDMA Extended Transport Header):
- Virtual Address: 接收端 MR 的虚拟地址
- R_Key: 接收端内存区域的密钥
- DMA Length: 4096
步骤 ④:RoCEv2 协议栈封装
┌─────────────────────────────────────────┐
│ RoCEv2 协议栈 (UDP/IP/Eth 封装) │
│ │
│ ┌────────┬────────┬────────┬────────┐ │
│ │ Eth │ IP │ UDP │ RDMA │ │
│ │ Header │ Header │ Header │ Packet │ │
│ │ 14B │ 20B │ 8B │ 4KB+28B│ │
│ │ │ │ │ │ │
│ │ - DMAC │ - SIP │ - Sport│ │ │
│ │ - SMAC │ - DIP │ - Dport│ │ │
│ │ - VLAN │ - TTL │ =4791 │ │ │
│ │ │ - TOS │ │ │ │
│ └────────┴────────┴────────┴────────┘ │
│ │
│ 每包总大小 = 14 + 20 + 8 + 28 + 4096 │
│ = 4166 bytes │
│ 1MB 实际发送 ≈ 256 × 4166B ≈ 1.067 MB │
└─────────────────────────────────────────┘
↓
并行数据总线: 512-bit @ 312.5 MHz
↓
UDP 目的端口 = 4791:IANA 分配给 RoCEv2 的标准端口。
步骤 ⑤:CMAC US+ (MAC 层)
┌─────────────────────────────────────────┐
│ CMAC US+ (100G Ethernet 硬核) │
│ │
│ 输入: 512-bit 数据总线 @ 312.5 MHz │
│ (每周期 64 bytes = 512 bits) │
│ │
│ MAC 层操作: │
│ 1. 添加 Preamble (7B) + SFD (1B) │
│ 2. 计算 FCS (Frame Check Sequence) │
│ CRC32 多项式: x^32 + x^26 + ... + 1 │
│ 3. 添加最小帧间隙 (IPG = 12B) │
│ │
│ 输出: 完整 Ethernet 帧 │
│ 每帧 = 8(Preamble+SFD) + 4166 + 4(FCS) │
│ = 4178 bytes │
└─────────────────────────────────────────┘
↓
并行数据总线: 512-bit @ 312.5 MHz
↓
时钟计算:
- 512-bit × 312.5 MHz = 160 Gbps (内部总线带宽)
- 实际有效: 100 Gbps (含编码开销后)
步骤 ⑥:PCS 编码层 (关键:并→并转换)
┌─────────────────────────────────────────┐
│ PCS (Physical Coding Sublayer) │
│ │
│ 输入: 512-bit 并行 @ 312.5 MHz │
│ (来自 CMAC 的 MAC 帧数据) │
│ │
│ 操作 1: 64b/66b 编码 │
│ ┌─────────────────────────────────────┐ │
│ │ 每 64-bit 数据块 → 66-bit 编码块 │ │
│ │ 添加 2-bit Sync Header: │ │
│ │ - 10 = 数据块 (Data Block) │ │
│ │ - 01 = 控制块 (Control Block) │ │
│ └─────────────────────────────────────┘ │
│ │
│ 操作 2: 扰码 (Scrambling) │
│ 多项式: 1 + x^39 + x^58 │
│ 目的: 确保 DC 平衡,避免长连 0/1 │
│ │
│ 操作 3: 虚拟通道分配 (20 VLs) │
│ 100G = 20 个 Virtual Lanes │
│ 每 VL = 66-bit 块流 │
│ │
│ 操作 4: Gearbox (20VL → 4PL) │
│ ┌─────────────────────────────────────┐ │
│ │ 20 个虚拟通道 → 4 个物理通道 │ │
│ │ 每 PL 承载 5 个 VL 的交错数据 │ │
│ │ 输出: 4 × 160-bit 并行 @ 161.13 MHz │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────┘
↓
4 × 160-bit 并行总线 @ 161.1328125 MHz
↓
Gearbox 详细:
| 参数 | 值 |
|---|---|
| 输入 | 20 VLs × 66-bit @ 644.53 MHz (等效) |
| 输出 | 4 PLs × 160-bit @ 161.13 MHz |
| 转换比 | (20 × 66) / (4 × 160) = 1320 / 640 = 2.0625 |
| 实际实现 | 块交错 + 缓冲对齐 |
步骤 ⑦:PMA 层 (关键:并→串转换)
┌─────────────────────────────────────────┐
│ PMA (Physical Medium Attachment) │
│ │
│ 输入: 160-bit 并行 @ 161.13 MHz │
│ (每通道独立处理) │
│ │
│ 并→串转换 (SerDes): │
│ ┌─────────────────────────────────────┐ │
│ │ 160-bit 并行数据 │ │
│ │ ↓ │ │
│ │ 并串转换器 (Serializer) │ │
│ │ - 160:1 多路复用 │ │
│ │ - 时钟: 161.13 MHz × 160 │ │
│ │ = 25.78125 GHz │ │
│ │ ↓ │ │
│ │ 1-bit 串行数据流 │ │
│ │ 速率: 25.78125 Gbps │ │
│ │ UI = 38.788 ps │ │
│ └─────────────────────────────────────┘ │
│ │
│ 输出: 1-bit 串行差分信号 (txp/txn) │
└─────────────────────────────────────────┘
↓
4 × 1-bit 串行差分信号
每通道 25.78125 Gbps
↓
SerDes 核心:
- 160:1 串行器,使用高速移位寄存器 + 多相时钟
- 输出经过 TX 预加重 (Pre-emphasis) 补偿信道损耗
步骤 ⑧:GTY 驱动 + QSFP28
┌─────────────────────────────────────────┐
│ GTY 收发器 (4 通道) │
│ │
│ CH0 (X0Y4): Lane 0 差分对 (txp0/txn0) │
│ CH1 (X0Y5): Lane 1 差分对 (txp1/txn1) │
│ CH2 (X0Y6): Lane 2 差分对 (txp2/txn2) │
│ CH3 (X0Y7): Lane 3 差分对 (txp3/txn3) │
│ │
│ TX 驱动器: │
│ - 差分摆幅: 800-1200 mV │
│ - 预加重: 补偿 PCB 走线高频损耗 │
│ - 4 通道由 QPLL 同步驱动 │
│ │
│ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ │
│ │
│ QSFP28 光模块: │
│ - 4 对差分电信号 → 4 路光调制器 │
│ - 每路 25.78125 Gbps NRZ 光信号 │
│ - 总输出: 100 Gbps 光信号 │
└─────────────────────────────────────────┘
↓
4×25G 光信号 → 单模/多模光纤
↓
1.3. 光纤链路
┌─────────────────────────────────────────┐
│ 光纤链路 │
│ │
│ 光信号参数: │
│ - 调制方式: NRZ (Non-Return-to-Zero) │
│ - 每通道: 25.78125 Gbps │
│ - 4 通道并行传输 │
│ - 波长: 850nm (多模) / 1310nm (单模) │
│ │
│ 光纤类型: │
│ - OM3/OM4 多模: 最长 100m │
│ - OS2 单模: 最长 10km (LR4) │
│ │
│ 传输时间: │
│ - 100m 光纤: ~0.5 μs (光在光纤中 │
│ 传播速度 ≈ 5 ns/m) │
│ - 可忽略不计 │
└─────────────────────────────────────────┘
↓
4×25G 光信号
↓
1.4. 接收端 RFSoC-4x2 详细数据流
步骤 ⑧':QSFP28 → GTY 接收
┌─────────────────────────────────────────┐
│ QSFP28 光模块 (接收端) │
│ │
│ - 4 路光电探测器 (PIN/APD) │
│ - 每路 25.78125 Gbps 光 → 电转换 │
│ - 输出: 4 对差分电信号 (rxp/rxn) │
│ │
│ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ │
│ │
│ GTY 接收器 (4 通道): │
│ CH0 (X0Y4): Lane 0 差分对 (rxp0/rxn0) │
│ CH1 (X0Y5): Lane 1 差分对 (rxp1/rxn1) │
│ CH2 (X0Y6): Lane 2 差分对 (rxp2/rxn2) │
│ CH3 (X0Y7): Lane 3 差分对 (rxp3/rxn3) │
│ │
│ RX 模拟前端: │
│ - CTLE (Continuous Time Linear Eq) │
│ - DFE (Decision Feedback Equalizer) │
│ - 补偿信道损耗和码间干扰 (ISI) │
└─────────────────────────────────────────┘
↓
4 × 1-bit 串行差分信号 @ 25.78125 Gbps
↓
步骤 ⑦':PMA 层 (关键:串→并转换)
┌─────────────────────────────────────────┐
│ PMA (Physical Medium Attachment) │
│ │
│ 输入: 1-bit 串行差分信号 @ 25.78125 Gbps│
│ │
│ 串→并转换 (CDR + Deserializer): │
│ ┌─────────────────────────────────────┐ │
│ │ 1-bit 串行数据流 │ │
│ │ ↓ │ │
│ │ CDR (Clock Data Recovery) │ │
│ │ - 从数据流中提取时钟 │ │
│ │ - 无需独立时钟线! │ │
│ │ - 使用 PLL + 相位插值器 │ │
│ │ ↓ │ │
│ │ 串并转换器 (Deserializer) │ │
│ │ - 1:160 解复用 │ │
│ │ - 输出: 160-bit 并行 @ 161.13 MHz │ │
│ │ ↓ │ │
│ │ 弹性缓冲 (Elastic Buffer) │ │
│ │ - 补偿收发端时钟频偏 │ │
│ │ - 典型深度: 64~128 字 │ │
│ └─────────────────────────────────────┘ │
│ │
│ 输出: 160-bit 并行 @ 161.13 MHz │
│ (每通道独立) │
└─────────────────────────────────────────┘
↓
4 × 160-bit 并行总线 @ 161.13 MHz
↓
CDR 关键:
- 从 25.78125 Gbps 的 NRZ 数据流中恢复 25.78125 GHz 时钟
- 使用 Bang-Bang PLL 或 Mueller-Muller 算法
- 锁定时间: 通常 < 1 ms
步骤 ⑥':PCS 解码层 (关键:并→并转换)
┌─────────────────────────────────────────┐
│ PCS (Physical Coding Sublayer) │
│ │
│ 输入: 4 × 160-bit 并行 @ 161.13 MHz │
│ │
│ 操作 1: Gearbox 逆变换 (4PL → 20VL) │
│ ┌─────────────────────────────────────┐ │
│ │ 4 个物理通道 → 20 个虚拟通道 │ │
│ │ 解交错恢复原始 VL 顺序 │ │
│ │ 输出: 20 VLs × 66-bit │ │
│ └─────────────────────────────────────┘ │
│ │
│ 操作 2: 去扰 (Descrambling) │
│ 多项式: 1 + x^39 + x^58 (与发送端同步) │
│ │
│ 操作 3: 64b/66b 解码 │
│ ┌─────────────────────────────────────┐ │
│ │ 检查 2-bit Sync Header: │ │
│ │ - 10 = 有效数据块 │ │
│ │ - 01 = 控制块 (对齐标记等) │ │
│ │ - 00/11 = 错误 (Sync Header Viol) │ │
│ │ 提取 64-bit 数据 → 512-bit 总线 │ │
│ └─────────────────────────────────────┘ │
│ │
│ 操作 4: BIP-8 误码检测 │
│ 每 VL 独立计算 BIP-8 │
│ 与发送端插入的值比对 │
│ 不匹配 → BIP-8 Error Counter ++ │
│ │
│ 操作 5: 通道对齐 (Lane Deskew) │
│ 使用 Alignment Marker (AM) │
│ 补偿 4 通道间的传播延迟差 │
│ 典型 skew 容限: ± 几个 UI │
│ │
│ 输出: 512-bit 并行 @ 312.5 MHz │
└─────────────────────────────────────────┘
↓
512-bit 并行总线 @ 312.5 MHz
↓
步骤 ⑤':CMAC US+ (MAC 层校验)
┌─────────────────────────────────────────┐
│ CMAC US+ (100G Ethernet 硬核) │
│ │
│ 输入: 512-bit 数据总线 @ 312.5 MHz │
│ │
│ MAC 层操作: │
│ 1. 去除 Preamble (7B) + SFD (1B) │
│ 2. FCS (CRC32) 校验 │
│ - 计算接收数据的 CRC │
│ - 与帧尾 FCS 字段比对 │
│ - 不匹配 → FCS Error, 丢弃帧 │
│ 3. 去除 FCS (4B) │
│ 4. 去除 IPG (Inter-Packet Gap) │
│ │
│ 输出: 纯 Ethernet Payload │
│ (即 RoCEv2 包: Eth + IP + UDP + RDMA) │
└─────────────────────────────────────────┘
↓
512-bit 并行总线 @ 312.5 MHz
↓
步骤 ④':RoCEv2 协议栈解封装
┌─────────────────────────────────────────┐
│ RoCEv2 协议栈解封装 │
│ │
│ 1. Ethernet Header 解析: │
│ - DMAC 匹配本机 MAC? │
│ - VLAN Tag 处理 │
│ │
│ 2. IP Header 解析: │
│ - 目的 IP 匹配? │
│ - Header Checksum 校验 │
│ - ECN 字段提取 (拥塞通知) │
│ │
│ 3. UDP Header 解析: │
│ - 目的 Port = 4791? (RoCEv2) │
│ - UDP Checksum 校验 (可选) │
│ │
│ 输出: RDMA 包 (BTH + RETH + Payload) │
└─────────────────────────────────────────┘
↓
512-bit 并行总线 @ 312.5 MHz
↓
步骤 ③':RDMA 引擎解封装
┌─────────────────────────────────────────┐
│ RDMA 引擎解封装 │
│ │
│ 1. BTH 解析: │
│ - Opcode: RDMA_WRITE_ONLY? │
│ - PSN (Packet Sequence Number) 校验 │
│ 期望 PSN = 上次 + 1 │
│ 乱序/丢包 → 放入重排序缓冲 │
│ - QPN (Queue Pair Number): 42 │
│ │
│ 2. RETH 解析: │
│ - Virtual Address: 目标内存地址 │
│ - R_Key: 内存区域权限校验 │
│ - DMA Length: 4096 bytes │
│ │
│ 3. Payload 写入 RX Buffer: │
│ - 根据 VA + R_Key 翻译物理地址 │
│ - 通过 DMA 写入 Host 内存 │
│ - 每包 4KB Payload │
│ │
│ 4. 生成 ACK (可选): │
│ - 如果是 RDMA_WRITE_WITH_IMM │
│ - 发送 ACK 包回发送端 │
└─────────────────────────────────────────┘
↓
512-bit 并行总线 @ ~200 MHz (DMA 内部)
↓
步骤 ②':DMA → Host 内存
┌─────────────────────────────────────────┐
│ DMA Engine (接收方向) │
│ │
│ - 按 SGE 列表 Gather 数据 │
│ - 通过 PCIe TLP (Memory Write) │
│ 写入 Host DDR │
│ - 每完成一个 SGE,更新 CQ │
│ │
│ 数据重组: │
│ - 256 个 4KB 块 → 按 PSN 顺序重组 │
│ - 写入连续的 1MB 内存区域 │
│ │
│ 完成通知: │
│ - 写入 CQ Entry (Completion Queue Entry) │
│ - 触发 MSI-X 中断通知 CPU │
└─────────────────────────────────────────┘
↓
PCIe Gen3 x8 TLP
↓
步骤 ①':Host CPU 完成
┌─────────────────────────────────────────┐
│ Host CPU (接收端) │
│ │
│ 1. 收到 MSI-X 中断 │
│ 2. 调用 ibv_poll_cq() │
│ 3. 读取 CQ Entry: │
│ - WC (Work Completion) 状态 = SUCCESS │
│ - 字节数 = 1,048,576 (1MB) │
│ - QP #42 │
│ 4. 通知应用层: 1MB 数据传输完成 │
│ │
│ 端到端时间: ~100-120 μs │
│ (含协议开销、DMA 延迟、中断处理) │
└─────────────────────────────────────────┘
1.5. 串并转换/并串转换总结
| 位置 | 转换类型 | 输入 | 输出 | 关键组件 |
|---|---|---|---|---|
| 发送端 PCS | 并→并 | 512-bit @ 312.5 MHz | 4×160-bit @ 161.13 MHz | Gearbox (20VL→4PL) |
| 发送端 PMA | 并→串 | 160-bit @ 161.13 MHz | 1-bit @ 25.78125 Gbps | SerDes (160:1) |
| 接收端 PMA | 串→并 | 1-bit @ 25.78125 Gbps | 160-bit @ 161.13 MHz | CDR + Deserializer (1:160) |
| 接收端 PCS | 并→并 | 4×160-bit @ 161.13 MHz | 512-bit @ 312.5 MHz | Gearbox (4PL→20VL) |
1.6. 关键时序参数
| 参数 | 发送端 | 接收端 |
|---|---|---|
| 内部总线时钟 | 312.5 MHz | 312.5 MHz |
| PCS 接口时钟 | 161.13 MHz | 161.13 MHz |
| SerDes 线速率 | 25.78125 Gbps | 25.78125 Gbps |
| UI | 38.788 ps | 38.788 ps |
| 每通道有效载荷 | 25 Gbps (64b/66b 后) | 25 Gbps |
| 总有效带宽 | 100 Gbps | 100 Gbps |
1.7. 数据形态变化全景
1MB 数据形态变化:
Host 内存: [1MB 连续字节流]
↓
PCIe TLP: [256 × 4KB TLP Read]
↓
FPGA TX Buffer: [256 × 4KB 并行块 @ 512-bit]
↓
RDMA 封装: [256 × (BTH+RETH+4KB Payload)]
↓
RoCEv2 封装: [256 × (Eth+IP+UDP+RDMA)]
↓
CMAC MAC: [256 × Ethernet Frame (4178B)]
↓
PCS 64b/66b: [256 × 66-bit 块流]
↓
PCS Gearbox: [4 通道 × 160-bit 并行 @ 161MHz]
↓
PMA SerDes: [4 通道 × 1-bit 串行 @ 25.78Gbps]
↓
GTY 驱动: [4 对差分电信号]
↓
QSFP28: [4 路光信号 @ 25.78G]
↓
光纤: [4 路光信号传播]
↓
QSFP28 (接收): [4 路光 → 4 对差分电信号]
↓
GTY 接收: [4 通道 × 1-bit 串行 @ 25.78Gbps]
↓
PMA CDR+Des: [4 通道 × 160-bit 并行 @ 161MHz]
↓
PCS Gearbox: [20VL × 66-bit → 512-bit @ 312.5MHz]
↓
CMAC MAC: [256 × Ethernet Frame]
↓
RoCEv2 解封: [256 × (Eth+IP+UDP+RDMA)]
↓
RDMA 解封: [256 × (BTH+RETH+4KB)]
↓
DMA 写回: [256 × 4KB TLP Write]
↓
Host 内存: [1MB 连续字节流] ← 完成!

2. 电气连接
以下是 模块级逻辑链接图 的详细文字说明,对应上图的完整数据流:
2.1. 发送端 RFSoC-4x2 模块链路
2.1.1 Host CPU → PCIe Hard IP
| 模块 | 接口 | 总线宽度 | 时钟 | 协议 |
|---|---|---|---|---|
| Host CPU (Cortex-A53) | AXI4-Lite | 32-bit | ~100 MHz | 寄存器配置 |
| PCIe Hard IP (Gen3 x8) | AXI4-Stream | 512-bit | 312.5 MHz | TLP 传输 |
数据流 :ibv_post_send() → 内核 RDMA 驱动 → PCIe TLP (Memory Read) → FPGA
2.1.2 PCIe → DMA Engine
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| DMA Engine | AXI4-Stream | 512-bit | 312.5 MHz | Scatter-Gather |
子模块:
- Desc Ring:描述符环形缓冲区,存储 SGE 列表
- TX Buffer:发送数据缓冲 (BRAM/URAM)
- Addr Trans:虚拟地址 → 物理地址转换
- IRQ Ctrl:中断控制
2.1.3 DMA → RDMA Engine
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| RDMA Engine | AXI4-Stream | 512-bit | 312.5 MHz | QP/CQ/WR 管理 |
子模块:
- QP Table:Queue Pair 状态表
- PSN Mgmt:Packet Sequence Number 管理
- BTH Gen:Base Transport Header 生成
- RETH Gen:RDMA Extended Transport Header 生成
2.1.4 RDMA → RoCEv2 Stack
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| RoCEv2 Stack | AXI4-Stream | 512-bit | 312.5 MHz | UDP/IP/Eth 封装 |
子模块:
- Eth:Ethernet Header (14B) + VLAN
- IP:IP Header (20B) + ECN
- UDP:UDP Header (8B, Dst Port=4791)
- PFC/ECN:Priority Flow Control / Explicit Congestion Notification
- Checksum:IP/UDP 校验和计算
2.1.5 RoCEv2 → CMAC US+
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| CMAC US+ | AXI4-Stream | 512-bit | 312.5 MHz | 100GbE MAC/PCS |
子模块:
- TX MAC:帧封装、CRC32 (FCS)、Preamble/SFD 添加
- RX MAC:帧校验、FCS 校验
- TX PCS:64b/66b 编码、扰码
- RX PCS:64b/66b 解码、去扰
2.1.6 CMAC → PCS Gearbox (关键:并→并转换)
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| PCS Gearbox | CAUI-4 | 4×160-bit | 161.13 MHz | 20VL → 4PL |
子模块:
- 64b/66b Enc:64-bit 数据 → 66-bit 编码块 (2-bit Sync Header)
- Scrambler:扰码 (多项式: 1 + x³⁹ + x⁵⁸)
- VL Mapper:20 虚拟通道 → 4 物理通道映射
- AM Insert:Alignment Marker 插入 (用于通道对齐)
转换细节:
输入: 512-bit @ 312.5 MHz (来自 CMAC)
↓
20 VLs × 66-bit @ 644.53 MHz (等效)
↓
Gearbox 交错分配
↓
输出: 4 PLs × 160-bit @ 161.13 MHz
2.1.7 PCS Gearbox → PMA SerDes (关键:并→串转换)
| 模块 | 接口 | 总线宽度 | 时钟/速率 | 功能 |
|---|---|---|---|---|
| PMA SerDes | PMA | 4×160-bit → 4×1-bit | 161.13 MHz → 25.78 GHz | 160:1 Serializer |
子模块:
- Serializer :160:1 并串转换
- 160-bit 并行数据 → 1-bit 串行数据流
- 时钟: 161.13 MHz × 160 = 25.78125 GHz
- TX Driver :差分驱动器
- 预加重 (Pre-emphasis)
- 差分摆幅: 800-1200 mV
2.1.8 PMA → GTY Quad
| 模块 | 接口 | 总线宽度 | 速率 | 功能 |
|---|---|---|---|---|
| GTY Quad | 差分对 | 4×1-bit | 4×25.78125 Gbps | 高速收发器 |
通道分配:
| 通道 | 位置 | 对应 QSFP Lane |
|---|---|---|
| CH0 | X0Y4 | Lane 0 |
| CH1 | X0Y5 | Lane 1 |
| CH2 | X0Y6 | Lane 2 |
| CH3 | X0Y7 | Lane 3 |
2.1.9 GTY → QSFP28
| 模块 | 接口 | 总线宽度 | 速率 | 功能 |
|---|---|---|---|---|
| QSFP28 | 差分对 | 4×差分对 | 4×25.78125 Gbps | 光电转换 |
QSFP28 内部:
- 4 路电信号 → 4 路激光驱动器 → 4 路光调制器
- 输出: 4×25.78125 Gbps NRZ 光信号
2.2. 光纤链路
| 参数 | 值 |
|---|---|
| 介质 | 单模/多模光纤 |
| 波长 | 850nm (多模) / 1310nm (单模) |
| 调制 | NRZ (Non-Return-to-Zero) |
| 总速率 | 100 Gbps (4×25.78125 Gbps) |
| 传播延迟 | ~5 ns/m |
2.3. 接收端 RFSoC-4x2 模块链路 (镜像逆过程)
2.3.1 QSFP28 → GTY Quad
| 模块 | 接口 | 总线宽度 | 速率 | 功能 |
|---|---|---|---|---|
| QSFP28 | 差分对 | 4×差分对 | 4×25.78125 Gbps | 光电转换 |
QSFP28 内部:
- 4 路光信号 → 4 路光电探测器 → 4 路 TIA/LA
- 输出: 4 对差分电信号 (rxp/rxn)
2.3.2 GTY → PMA SerDes
| 模块 | 接口 | 总线宽度 | 速率 | 功能 |
|---|---|---|---|---|
| GTY Quad | 差分对 | 4×1-bit | 4×25.78125 Gbps | 接收器 |
RX 模拟前端:
- CTLE (Continuous Time Linear Equalizer)
- DFE (Decision Feedback Equalizer)
- 眼图扫描 / 误码监测
2.3.3 PMA SerDes (关键:串→并转换)
| 模块 | 接口 | 总线宽度 | 时钟/速率 | 功能 |
|---|---|---|---|---|
| PMA SerDes | PMA | 4×1-bit → 4×160-bit | 25.78 GHz → 161.13 MHz | 1:160 Deserializer |
子模块:
- CDR (Clock Data Recovery) :
- 从 25.78125 Gbps 数据流中提取时钟
- Bang-Bang PLL / Mueller-Muller 算法
- 无需独立参考时钟!
- Deserializer :1:160 串并转换
- 1-bit 串行 → 160-bit 并行
- 输出时钟: 161.13 MHz
- Elastic Buffer :
- 补偿收发端时钟频偏 (±100 ppm)
- 典型深度: 64-128 字
2.3.4 PMA → PCS Gearbox (关键:并→并转换)
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| PCS Gearbox | CAUI-4 | 4×160-bit | 161.13 MHz | 4PL → 20VL |
子模块:
- AM Lock:Alignment Marker 锁定,实现通道对齐
- VL Reorder:4 物理通道 → 20 虚拟通道解交错
- Descrambler:去扰 (与发送端同步)
- 64b/66b Dec:66-bit 解码 → 64-bit 数据
转换细节:
输入: 4 PLs × 160-bit @ 161.13 MHz
↓
Gearbox 解交错
↓
20 VLs × 66-bit @ 644.53 MHz (等效)
↓
64b/66b 解码
↓
输出: 512-bit @ 312.5 MHz (送往 CMAC)
2.3.5 PCS Gearbox → CMAC US+
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| CMAC US+ | AXI4-Stream | 512-bit | 312.5 MHz | 100GbE MAC/PCS |
RX 操作:
- FCS (CRC32) 校验
- 去除 Preamble/SFD
- 去除 IPG (Inter-Packet Gap)
2.3.6 CMAC → RoCEv2 Stack
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| RoCEv2 Stack | AXI4-Stream | 512-bit | 312.5 MHz | UDP/IP/Eth 解封装 |
解封装顺序:
- Ethernet Header 解析 (DMAC 匹配)
- IP Header 解析 (Checksum 校验、ECN 提取)
- UDP Header 解析 (Port=4791 确认)
- 提取 RDMA 包 (BTH + RETH + Payload)
2.3.7 RoCEv2 → RDMA Engine
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| RDMA Engine | AXI4-Stream | 512-bit | 312.5 MHz | QP/CQ/WR 管理 |
子模块:
- BTH Parse:解析 Opcode、PSN、QPN
- RETH Parse:解析 Virtual Address、R_Key、DMA Length
- PSN Check:序列号校验,检测丢包/乱序
- QP Table:Queue Pair 状态更新
2.3.8 RDMA → DMA Engine
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| DMA Engine | AXI4-Stream | 512-bit | 312.5 MHz | Gather-Scatter |
RX 操作:
- 根据 RETH 中的 VA + R_Key 翻译物理地址
- 通过 PCIe TLP (Memory Write) 写入 Host DDR
- 每完成一个 SGE,更新 RX Buffer
2.3.9 DMA → PCIe → Host CPU
| 模块 | 接口 | 总线宽度 | 时钟 | 功能 |
|---|---|---|---|---|
| PCIe Hard IP | AXI4-Stream | 512-bit | 312.5 MHz | TLP 传输 |
| Host CPU | AXI4-Lite | 32-bit | ~100 MHz | 中断/完成通知 |
完成流程:
- 1MB 数据全部写入 Host 内存
- DMA 生成 CQ Entry (Completion Queue Entry)
- 触发 MSI-X 中断
- CPU 调用
ibv_poll_cq()检测到 CQE - 应用层收到"传输完成"通知
2.4. 模块间接口总览
| 连接 | 接口类型 | 总线宽度 | 时钟/速率 | 方向 |
|---|---|---|---|---|
| Host ↔ PCIe | AXI4-Lite | 32-bit | ~100 MHz | 双向 (配置) |
| PCIe ↔ DMA | AXI4-Stream | 512-bit | 312.5 MHz | 双向 (数据) |
| DMA ↔ RDMA | AXI4-Stream | 512-bit | 312.5 MHz | 双向 |
| RDMA ↔ RoCEv2 | AXI4-Stream | 512-bit | 312.5 MHz | 双向 |
| RoCEv2 ↔ CMAC | AXI4-Stream | 512-bit | 312.5 MHz | 双向 |
| CMAC ↔ PCS Gearbox | CAUI-4 | 4×160-bit | 161.13 MHz | 双向 |
| PCS ↔ PMA | PMA | 4×160-bit ↔ 4×1-bit | 161.13 MHz ↔ 25.78 GHz | 双向 |
| PMA ↔ GTY | 差分对 | 4×1-bit | 25.78125 Gbps | 双向 |
| GTY ↔ QSFP28 | 差分对 | 4×差分对 | 25.78125 Gbps | 双向 |
| QSFP28 ↔ Fiber | 光信号 | 4×光通道 | 25.78125 Gbps | 双向 |
2.5. 时钟域总结
| 时钟域 | 频率 | 用途 |
|---|---|---|
| 系统时钟 | 100-250 MHz | AXI4-Lite 配置、控制逻辑 |
| 数据总线时钟 | 312.5 MHz | 512-bit AXI4-Stream (160 Gbps 总线带宽) |
| PCS 接口时钟 | 161.13 MHz | CAUI-4, 4×160-bit |
| SerDes 线速率 | 25.78125 GHz | GTY 串行数据 (UI = 38.788 ps) |
| REFCLK | 322.265625 MHz | QPLL 输入,生成 SerDes 时钟 |
2.6. 关键转换点
| 位置 | 转换类型 | 详细说明 |
|---|---|---|
| CMAC → PCS Gearbox | 并→并 | 512-bit @ 312.5 MHz → 4×160-bit @ 161.13 MHz (Gearbox 20VL→4PL) |
| PCS Gearbox → PMA | 并→串 | 160-bit @ 161.13 MHz → 1-bit @ 25.78 GHz (160:1 Serializer) |
| PMA → PCS Gearbox (RX) | 串→并 | 1-bit @ 25.78 GHz → 160-bit @ 161.13 MHz (CDR + 1:160 Deserializer) |
| PCS Gearbox → CMAC (RX) | 并→并 | 4×160-bit @ 161.13 MHz → 512-bit @ 312.5 MHz (Gearbox 4PL→20VL) |
