FPGA 进阶(05):高速接口——LVDS、SERDES、DDR3/4、PCIe、Ethernet、Aurora
更新时间:2026-09-02。本文是
fpga/FPGA 领域第 05 篇,接 时序约束与收敛。高速接口是 FPGA 连接外部世界的桥梁,FPGA 的差异化优势在于灵活的高速 I/O,可以接各种标准协议,也可以自定义协议。
本文要回答的问题
- LVDS 差分信号原理?和单端信号比有什么优势?
- 高速串行收发器(GTX/GTH)怎么工作?时钟恢复?
- DDR3/4 控制器接口怎么配?用户端怎么读写?
- PCIe 的层次结构?FPGA 做 PCIe 端点?
- Ethernet MAC 怎么实现?10G/25G/100G?
一、LVDS——差分信号基础
LVDS(Low Voltage Differential Signaling)
原理:用一对差分线传输信号
P 端:正信号
N 端:负信号(P 的取反)
接收端:检测 P - N 的电压差(约 350 mV)
优势:
1. 抗共模噪声:外部噪声同时影响 P 和 N,差分信号不变
2. 低电压摆幅:350 mV,功耗低
3. 高速:可达 Gbps 级别
4. 电磁干扰小
FPGA 中 LVDS 用法:
// 约束文件(.xdc)
set_property IOSTANDARD LVDS [get_ports data_p]
set_property IOSTANDARD LVDS [get_ports data_n]二、高速串行收发器(GTX/GTH/GTP)
GTX/GTH 是 FPGA 内集成的硬核高速串行收发器
架构:
发送:并行数据 → 8B/10B 编码 → 串行化 → 差分输出
接收:差分输入 → CDR 时钟恢复 → 解串行 → 8B/10B 解码 → 并行数据
关键参数:
GTX 线速:最高 12.5 Gbps(7 系列)
GTH 线速:最高 13.1 Gbps(7 系列)
GTY 线速:最高 30 Gbps(Virtex UltraScale)
时钟恢复(CDR,Clock Data Recovery):
接收端从数据流中提取时钟
不需要独立的时钟线
数据流必须有足够的跳变 → 8B/10B 编码保证常见协议线速:
| 协议 | 线速 | 编码 | 实际带宽 |
|---|---|---|---|
| PCIe Gen1 | 2.5 Gbps | 8B/10B | 2.0 Gbps/lane |
| PCIe Gen2 | 5.0 Gbps | 8B/10B | 4.0 Gbps/lane |
| PCIe Gen3 | 8.0 Gbps | 128B/130B | 7.9 Gbps/lane |
| 1G Ethernet | 1.25 Gbps | 8B/10B | 1.0 Gbps |
| 10G Ethernet | 10.3125 Gbps | 64B/66B | 10.0 Gbps |
| SATA Gen3 | 6.0 Gbps | 8B/10B | 4.8 Gbps |
三、DDR3/4 控制器
DDR 控制器是 FPGA 中最复杂的 IP 核之一
用户接口(User Interface):
┌───────────┐ ┌──────────────┐ ┌──────┐
│ 用户逻辑 │→ AXI│ DDR 控制器 │→ DDR│ DDR │
│ │← │ (MIG) │← PHY│ 颗粒 │
└───────────┘ └──────────────┘ └──────┘
DDR 操作时序(简化):
ACTIVE → 激活行 → RAS 延迟 → READ/WRITE → CAS 延迟 → 数据
DDR 访问效率:
顺序读写:80-90% 效率
随机读写:20-40% 效率
Bank 交替:提高效率DDR 带宽计算示例:
DDR3-1600,64 bit 位宽,8 个 Bank
理论带宽:1600 MHz × 64 bit / 8 = 12.8 GB/s
实际效率(顺序):~10 GB/s
实际效率(随机):~3 GB/s
DDR4-2400,64 bit 位宽
理论带宽:2400 MHz × 64 bit / 8 = 19.2 GB/s
实际效率(顺序):~16 GB/sDDR 接口设计要点:
- 数据掩码(DQM)用于字节级写使能
- 数据选通(DQS)是双向信号,写时 FPGA 驱动,读时 DDR 驱动
- 时序约束关键:DQS 和 DQ 必须是等长布线的分组
- 读写训练:DDR3/4 上电需要初始化训练
四、PCIe 总线
PCIe 层次结构:
┌─────────────────────────────────────────────┐
│ 事务层(Transaction Layer) │
│ TLP 包:内存读写、IO 读写、配置、消息 │
├─────────────────────────────────────────────┤
│ 数据链路层(Data Link Layer) │
│ DLLP:ACK/NAK,重传,流量控制 │
├─────────────────────────────────────────────┤
│ 物理层(Physical Layer) │
│ SerDes 差分对,8B/10B 编码,LTSSM 状态机 │
└─────────────────────────────────────────────┘
PCIe 拓扑:
Root Complex → Switch → Endpoint (FPGA)
→ Endpoint (GPU)
→ Endpoint (NVMe)
FPGA 作为 PCIe Endpoint:
Xilinx 7 系列集成 PCIe 硬核
- 支持 Gen1/Gen2/Gen3
- x1/x2/x4/x8 通道
- 通过 DMA 传输数据PCIe DMA 数据传输:
CPU → FPGA 写:
CPU 写 DMA 描述符 → FPGA 读到描述符 → 从 DDR 读数据 → 通过 PCIe 发到 CPU
CPU → FPGA 读:
CPU 写 DMA 描述符 → FPGA 读到描述符 → 收到数据 → 写入 DDR → 完成中断
DMA 是 PCIe 高性能传输的关键:
一次 DMA 可传输几 MB 数据
批处理,减少 CPU 中断五、Ethernet 网络
Ethernet 协议栈(FPGA 实现):
┌───────────────┐
│ 应用层 │ ← 用户自定义
├───────────────┤
│ TCP/UDP │ ← 硬件 TCP 栈(可选)
├───────────────┤
│ IP 层 │ ← ARP、IP、ICMP
├───────────────┤
│ MAC 层 │ ← MAC 核(硬核或软核)
├───────────────┤
│ PHY 层 │ ← SerDes / RGMII
└───────────────┘
FPGA 实现 Ethernet 的典型方式:
1. 硬核 MAC(Zynq 内嵌):10/100/1000 Mbps
2. 软核 MAC(Vivado 提供):1G/10G/25G
3. 纯逻辑实现:自定义协议,轻量级Ethernet 时序:
1G Ethernet(GMII):
GTX_CLK: 125 MHz
TXD[7:0]: 8 bit 数据
带宽:125 MHz × 8 bit = 1 Gbps
10G Ethernet(XGMII):
XGMII_CLK: 156.25 MHz
TXD[63:0]: 64 bit 数据
带宽:156.25 MHz × 64 bit = 10 Gbps六、Aurora 协议
Aurora 是 Xilinx 自定义的高速串行协议
特点:
- 轻量级,没有复杂的协议栈
- 基于 SerDes 硬核
- 点对点连接
- 低延迟
Aurora 帧结构:
┌─────────┬─────────┬────────────┬──────────┐
│ 帧头 SC │ 数据 │ 填充 │ 帧尾 ED │
└─────────┴─────────┴────────────┴──────────┘
用途:
- 板间高速互联
- 背板通信
- 芯片到芯片
- 自定义协议的基础七、高速接口选型指南
| 场景 | 推荐接口 | 带宽 | 复杂度 |
|---|---|---|---|
| 数据采集 | LVDS | 1-2 Gbps | 低 |
| 板间通信 | Aurora | 1-12 Gbps | 中 |
| 存储 | DDR3/4 | 10-20 GB/s | 高 |
| 主机通信 | PCIe | 2-16 GB/s | 高 |
| 网络通信 | Ethernet | 1-100 Gbps | 中高 |
| 视频传输 | HDMI/DisplayPort | 3-18 Gbps | 中 |
相关与延伸
下一篇:调试技巧——ILA、VIO、逻辑分析仪抓信号;FPGA 时序约束,见 时序约束与收敛。
一句话总结
FPGA 高速接口:LVDS 差分信号抗噪声好,适合 Gbps 级传输;GTX/GTH 硬核收发器含 8B/10B 编码和 CDR 时钟恢复,最高线速 30 Gbps;DDR 控制器带宽大但随机访问效率低(20-40%),需注意 DQS 等长约束;PCIe 含事务层/数据链路层/物理层,DMA 批量传输是高性能关键;Ethernet 可用硬核/软核 MAC,1G/10G/25G 可选;Aurora 是 Xilinx 轻量级 SerDes 协议,适合板间高速互联。