﻿# 量化交易中的 FPGA 架构设计总纲

## 1. 核心问题：为什么量化交易需要 FPGA

### 1.1 延迟是量化策略的第一性竞争力

在量化交易（尤其是高频交易 HFT）中，**"快"本身就是阿尔法** —— 谁先看到行情、谁先执行订单，谁就吃掉价差。

tick-to-trade 延迟的定义：

```bash
交易所撮合引擎发出行情报文 → 光纤 → 量化公司NIC → 行情解码 → 
订单簿更新 → 策略计算 → 风控 → 订单打包 → NIC发出 → 光纤 → 撮合引擎
```
这个链条的任何一段延迟都直接折损策略收益。

### 1.2 软件优化的物理天花板

| 方案 | tick-to-trade 典型延迟 | 延迟抖动（jitter） |
|------|----------------------|-------------------|
| 普通 Linux 内核协议栈 | 30-100 μs | 数十微秒 |
| DPDK 用户态旁路 | 6-12 μs | 1-3 μs |
| Solarflare EF_VI 高端软件 | 3-6 μs | 数百纳秒 |
| **FPGA 全硬件流水线** | **300-700 ns** | **数十纳秒** |

软件方案在微秒级就碰壁的根本原因：

- **中断处理**：即使 busy-poll，NIC 收包到用户态仍有 PCIe DMA + 上下文开销
- **CPU 分支预测失败**：行情数据不规律，预测成功率低
- **缓存缺失**：订单簿状态散落在内存中，cache miss 带来数十纳秒惩罚
- **OS 调度器抖动**：即使 isolcpus，仍有 tick、RCU 回调等不可消除的干扰

**FPGA 解决的不是某一环，而是从根本上消除了这些不确定性**。

### 1.3 FPGA 的确定性延迟优势

| 特性 | CPU（冯·诺依曼） | FPGA（空间计算） |
|------|:--|:--|
| 执行模型 | 指令流顺序/乱序执行 | 硬件流水线，每个时钟确定 |
| 延迟可预测性 | 受缓存/分支/调度影响 | 精确到时钟周期 |
| 并行度 | 受限于核心数 | 无限制的细粒度并行 |
| 上下文切换 | 数十微秒 | 零（无需切换） |
| 中断 | 不可消除 | 不存在此概念 |
| 每周期处理的行情条数 | 1（SIMD 可并行少量） | 1（流水线每级同时处理不同条） |

---

## 2. CPU + FPGA 混合架构设计哲学

### 2.1 分工边界："FPGA 做硬件化的触发器+路由器"

**核心原则**：FPGA 负责纳秒级的"确定性命中"路径，CPU 负责微秒级的"复杂决策"路径。

```bash
┌─────────────────────────────────────────────────────────┐
│                         CPU 域                          │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐              │
│  │ 策略引擎  │  │ 组合管理  │  │ 历史分析  │              │
│  │ 参数学习  │  │ 信号生成  │  │ 反馈回路  │              │
│  └─────┬────┘  └─────┬────┘  └─────┬────┘              │
│        │              │              │                   │
│        └──────────────┼──────────────┘                   │
│                       │ PCIe (参数/统计/控制)             │
├───────────────────────┼─────────────────────────────────┤
│                       ▼              FPGA 域             │
│  ┌──────────────────────────────────────────────────┐   │
│  │              硬件流水线 (100-300ns)               │   │
│  │  MAC → 解码 → 订单簿 → 触发 → 风控 → 打包 → MAC  │   │
│  └──────────────────────────────────────────────────┘   │
│         ▲                                      │        │
│         │           光纤                        │        │
│    ┌────┴────┐                          ┌──────┴─────┐  │
│    │  交易所  │                          │   交易所    │  │
│    │ 行情源  │                          │  订单网关   │  │
│    └─────────┘                          └────────────┘  │
└─────────────────────────────────────────────────────────┘
```
### 2.2 CPU 与 FPGA 的信息交换

| 方向 | 内容 | 频率 | 延迟要求 |
|------|------|------|---------|
| CPU → FPGA | 策略参数（阈值、数量、开关） | 参数变更时 | 毫秒级 |
| CPU → FPGA | 风控限额更新 | 盘前/盘中 | 微秒级 |
| FPGA → CPU | 命中统计（成交量、PnL） | 实时流 | 微秒级 |
| FPGA → CPU | 异常告警 | 事件触发 | 微秒级 |

CPU 通过 PCIe MMIO 或共享内存（DMA buffer）与 FPGA 交换数据。**热路径上 CPU 完全不在环内**——FPGA 自主完成"行情→决策→报单"全链路。

### 2.3 策略迭代开发流程

```bash
阶段一：纯软件验证
  C++/Rust 策略代码 → 回测 → 模拟盘 → 小资金实盘
  （确保策略逻辑正确和有利可图）
阶段二：软件优化
  内核旁路（DPDK/EF_VI）→ busy-poll → 无锁数据结构 → CPU 隔离
  （将延迟从 50μs 压缩到 5μs）
阶段三：部分 FPGA 化
  行情解码放入 FPGA → CPU 做策略 + 报单
  （延迟降到 1-3μs）
阶段四：全 FPGA 化
  解码+决策+风控+报单 全部硬件化
  （延迟压到 300-700ns）
```
---

## 3. 国内量化公司的四种典型 FPGA 架构模式

### 3.1 模式一：全硬件流水线（Full Hardware Pipeline）

```bash
光纤 → MAC/PHY → 解码模块 → 订单簿模块 → 触发模块 → 风控模块 → 打包模块 → MAC/PHY → 光纤
         └─────────────────── FPGA 全在内部 ───────────────────────┘
                                     │ PCIe (仅参数与统计)
                                     ▼
                                   CPU
                               (旁观 + 监控)
```
| 维度 | 说明 |
|------|------|
| **延迟** | 300-700 ns（业界最低） |
| **灵活性** | 低，策略变更需重新综合（数小时） |
| **开发周期** | 6-12 个月（RTL 开发 + 验证） |
| **适用场景** | 做市商、跨市场套利等对延迟极致的策略 |
| **国内典型用户** | 头部量化私募的自营做市系统 |

### 3.2 模式二：混合流水线（Hybrid Pipeline）

```bash
光纤 → MAC/PHY → 解码模块 → 订单簿模块 ──┐
         └──── FPGA ────┘                  │
                                           │ PCIe DMA
                                           ▼
                                      CPU 策略引擎
                                      (C++/Rust 策略计算)
                                           │
                                           │ PCIe MMIO
                                           ▼
                             打包模块 → MAC/PHY → 光纤
                          └─── FPGA ───┘
```
| 维度 | 说明 |
|------|------|
| **延迟** | 1-5 μs（FPGA 解码 + CPU 策略 + FPGA 报单） |
| **灵活性** | 高，策略在软件中可快速修改 |
| **开发周期** | 3-6 个月（FPGA 只做 I/O，C++ 做策略） |
| **适用场景** | 中高频策略、多因子、需要频繁调参的策略 |
| **国内典型用户** | 量化私募的 alpha 策略、CTA 策略 |

### 3.3 模式三：旁路加速（Bypass Acceleration）

```bash
光纤 → MAC/PHY → 解码模块 → 策略引擎（软核 MicroBlaze/ARM） → 打包 → MAC/PHY
         └────────────────── FPGA（内嵌软核CPU） ──────────────┘
```
| 维度 | 说明 |
|------|------|
| **延迟** | 2-10 μs（取决于软核 CPU 性能） |
| **灵活性** | 中，C/C++ 运行在 FPGA 内嵌处理器 |
| **开发周期** | 2-4 个月（HLS 高级综合） |
| **适用场景** | 中小团队快速验证、策略频繁迭代阶段 |
| **国内典型用户** | 中小量化私募的研发阶段 |

### 3.4 模式四：流水线协处理（Pipeline Coprocessor）

```bash
              ┌─ 行情解码 FPGA-1 (沪深)
光纤 ─┬──────┤
      │      └─ 行情解码 FPGA-2 (中金所)
      │
      ▼
   CPU 聚合引擎 (多源汇聚 + 跨市场策略)
      │
      ▼
   FPGA-3 (订单路由 + 风控) → 光纤 → 各交易所
```
| 维度 | 说明 |
|------|------|
| **延迟** | 3-10 μs（跨市场时需等待多源行情） |
| **灵活性** | 最高，CPU 做全部策略逻辑 |
| **开发周期** | 4-8 个月 |
| **适用场景** | 跨市场套利、多品种配对交易 |
| **国内典型用户** | 大型量化私募、券商自营多市场线 |

### 3.5 四种模式对比

```bash
延迟 (更低 →)
──────────────────────────────────────────────────────►
  300ns        1-3μs         3-5μs         5-10μs
    │            │             │              │
  模式一       模式二        模式三         模式四
 全硬件       混合流水线     旁路加速      流水线协处理
    │            │             │              │
  灵活性最差 ←───────────────────────────→ 灵活性最高
    │            │             │              │
  适合：       适合：        适合：        适合：
  做市/套利    alpha策略     快速迭代      多市场策略
```
---

## 4. 延迟预算的工程经济学

### 4.1 各段延迟的可压缩性

| 环节 | 软件典型值 | FPGA 可达值 | 压缩倍数 | 工程代价 |
|------|----------|-----------|---------|---------|
| 光纤传输（50m） | ~250 ns | ~250 ns | 1×（物理极限） | 换更短线/直插 |
| NIC 接收 | 1-2 μs (DPDK) | 50-100 ns | 10-20× | FPGA MAC IP |
| 行情解码 | 800-1500 ns | 100-200 ns | 5-10× | FPGA 解码流水线 |
| 本地簿更新 | 200-500 ns | 50-100 ns | 2-5× | 片上 BRAM |
| 策略决策 | 500-1500 ns | 20-50 ns | 10-75× | 硬件化触发规则 |
| 订单打包发送 | 500-800 ns (DMA) | 50-150 ns (PIO) | 3-10× | FPGA TX 流水线 |

### 4.2 边际收益递减曲线

```bash
PnL 增益
  ▲
  │     ████████
  │   ██
  │  █
  │ █   ← 软件优化阶段：单位投入产出极高
  │█
  │
  │          ██
  │            ██
  │              ██  ← FPGA 化阶段：投入大，天花板低
  │                ██
  │                  ███
  │
  └──────────────────────────────► 延迟压缩量
     50μs→5μs      5μs→500ns
     (10倍，低成本)  (10倍，高成本)
```
**决策原则**：
1. 先把软件优化做到极致（DPDK/busy-poll/isolcpus/无锁数据结构）
2. 软件到天花板后，评估 FPGA 化的边际收益
3. 考虑：FPGA 开发 6-12 个月的人力成本 vs 延迟每降 1μs 的 PnL 增量

---

## 5. 国内市场的特殊性

### 5.1 沪深交易所行情协议

| 交易所 | 协议 | 特点 | 解码复杂度 |
|--------|------|------|-----------|
| 上交所 | **FAST** (FIX Adapted for STreaming) | 模板 + 字段编码，可变长 | 高 |
| 深交所 | **STEP** (Securities Trading Exchange Protocol) | 类似 FIX，二进制 | 中高 |
| 中金所 | **FIX/自定义** | 标准 FIX 或衍生 | 中 |
| 大商所/郑商所/上期所 | **FTD 等** | 各交易所自定义 | 中 |

**上交所 FAST 解码的 FPGA 挑战**：
- 模板驱动的可变长编码，存在图（Presence Map）控制哪些字段出现
- 需要硬件状态机跟踪模板上下文
- 部分重配置（Partial Reconfiguration）允许运行时切换模板，无需重新综合全部逻辑

### 5.2 国内 Colocation 环境

- 各交易所在上海/深圳/大连/郑州机房提供托管机柜
- 光纤长度受限（通常 5-50 米），每米约 4.9 ns
- 微波/毫米波链路可用于跨城市传输（上海→深圳约 8-10 ms，但对期货跨市场有优势）
- FPGA 板卡需满足交易所机房功耗/散热限制（通常单卡 ≤ 75W）

### 5.3 监管合规要求

- **事前风控**必须硬件化或内核级实现（不能有软件绕过可能）
- 报单速率限制（每秒最大报单数）需在 FPGA 内硬件计数
- 自成交检查需在订单簿中硬件比对

---

## 6. 技术栈选型参考

| 层级 | 技术选项 | 适用场景 |
|------|---------|---------|
| **FPGA 芯片** | Xilinx Virtex UltraScale+ / Alveo | 顶级性能，头部机构 |
| | Xilinx Kintex / Zynq | 性价比，中型机构 |
| | Intel Agilex / Stratix 10 | 替代方案 |
| **开发语言** | Verilog / SystemVerilog | 时序关键路径 |
| | VHDL | 传统团队 |
| | C/C++ HLS (Vivado HLS) | 快速原型，非关键路径 |
| **开发板/加速卡** | Xilinx Alveo U200/U250/U280 | 标准 PCIe 加速卡 |
| | Solarflare X2 系列 (带 FPGA) | 网卡集成方案 |
| | Silicom FB2/FB4 | 可编程智能网卡 |
| **NIC 集成** | FPGA 内嵌 MAC + PHY (SFP+) | 延迟最低（省去独立 NIC） |
| | 独立 Solarflare NIC + FPGA | 灵活性高 |
| **CPU 侧** | C++17/20 (低延迟线程) | 策略引擎 |
| | Rust (无 GC、零成本抽象) | 新一代替代方案 |
| **FPGA- CPU 通信** | PCIe Gen3/4/5 DMA | 标准方案 |
| | CXL (未来方向) | 缓存一致性共享内存 |

---

## 7. 总结

### 7.1 量化FPGA的核心价值

```bash
量化FPGA ≠ 万能银弹
量化FPGA = 在"延迟敏感度 × 硬件可表达性"的交叉区域找到最佳投入产出比
```
- **延迟敏感的操作**（行情解码、订单簿更新、触发检查）→ 放入 FPGA
- **逻辑复杂的操作**（策略参数学习、多因子模型、组合优化）→ 留在 CPU
- **FPGA 与 CPU 的边界**通过 PCIe MMIO/DMA 交换参数和统计

### 7.2 国内量化FPGA实践现状

| 机构类型 | FPGA 采用率 | 主要应用 | 典型延迟目标 |
|---------|-----------|---------|-------------|
| 头部量化私募 | 高 | 做市/套利的全硬件流水线 | 300-700 ns |
| 中型量化私募 | 中 | 混合流水线（解码在FPGA） | 1-3 μs |
| 券商自营 | 中高 | 多市场协处理 | 3-10 μs |
| 小型私募/创业 | 低 | 旁路加速/DPDK过渡 | 5-10 μs |

### 7.3 开源与商业生态

| 类别 | 代表 |
|------|------|
| FPGA 开发框架 | Xilinx Vitis / Vivado, Intel Quartus |
| 开源 HFT FPGA 参考 | [HFT-Orderbook-FPGA](https://github.com/Kodoh/Orderbook), [HFT-FPGA-System](https://github.com/muditbhargava66/High-Frequency-Trading-FPGA-System) |
| 商业 IP 核 | Magmio (C++→FPGA 编译), Design Gateway (ITCH/OUCH IP) |
| FPGA 加速卡供应商 | Xilinx, Intel, BittWare, Silicom, Solarflare |

---

## 参考资料

1. 《高频交易架构：低延迟、内核旁路、FPGA概览》—— quant67.com (2026)
2. 《FPGA行情解码 + Rust策略引擎：超低延迟系统架构》—— 腾讯云开发者社区 (2026)
3. 《金融实时决策引擎：FPGA计算加速与数据流优化实践》—— 21ic电子网 (2025)
4. 《基于FPGA的超低延迟量化金融计算平台研究》—— CSDN (2023)
5. 上交所 LDDS 低延迟数据分发系统技术白皮书 (2024)
6. 《High-Frequency Trading FPGA System》—— GitHub/muditbhargava66
7. 《Ultra-Low-Latency FPGA Trading with Nasdaq ITCH/OUCH》—— Design Gateway (2025)
8. 《FPGA Based Low-Latency Market Data Feed Handler》—— Springer (2018)

