一、FPGA交易系统概述:高频交易与FPGA的渊源
大家好,我是你们这门课的主讲人。在量化交易这个圈子里摸爬滚打了十几年,我见过太多人一上来就问我:「FPGA做交易,到底快在哪?」
嗯,这个问题问得好。咱们今天就从根上聊起。
1.1 高频交易为什么需要FPGA?
先说说高频交易。说白了,高频交易就是抢时间。别人还在犹豫要不要下单,你的系统已经完成了从行情解析、策略计算到订单发送的全流程。
传统做法是用CPU。CPU很灵活,什么都能干。但问题也在这——它什么都能干,就意味着它什么都不是最快的。CPU内部有复杂的指令流水线、分支预测、缓存层级……这些设计在通用计算场景下是优势,但在高频交易里,反而成了拖累。
我2015年参与过一个项目,客户用C++写的策略,在Xeon处理器上跑,延迟大概在10微秒左右。听起来很快对吧?但你知道对手方用的是什么吗?FPGA。他们的延迟只有几百纳秒。10微秒对几百纳秒,差了整整一个数量级。结果可想而知,客户的订单永远慢人一步。
核心差异:CPU是软件执行,FPGA是硬件流水线。FPGA的延迟是确定的、可预测的,而CPU的延迟受操作系统调度、缓存命中率等因素影响,波动很大。
1.2 FPGA在交易系统中扮演什么角色?
FPGA在交易系统里,通常干三件事:
- 行情解析——把网络数据包里的行情数据,快速解析成策略能用的格式。比如从UDP包里提取出买卖盘口、成交记录。
- 策略计算——在硬件里实现交易逻辑。比如简单的价差套利、统计套利、做市策略。
- 订单发送——把策略生成的订单,通过网卡直接发到交易所。省去了操作系统协议栈的开销。
这三件事,每一件都要求极低的延迟和极高的确定性。FPGA正好擅长这个。
我记得有一次,一个做市商客户找到我,说他们的策略在CPU上跑,行情来了之后要等好几微秒才能做出反应。我帮他们把策略移植到FPGA上,延迟降到了200纳秒以内。客户当时就愣住了:「这……这真的能行?」
能行。而且很稳。
1.3 课程整体架构与学习路径
这门课一共30章,咱们从零开始,一步步搭建一个完整的FPGA交易系统。我把它分成四个阶段:
| 阶段 | 章节 | 核心内容 |
|---|---|---|
| 基础篇 | 1-8章 | FPGA基础、Verilog语法、时序约束、仿真调试 |
| 行情篇 | 9-16章 | 网络协议栈、UDP/TCP解析、行情数据解码、多路行情合并 |
| 策略篇 | 17-24章 | 订单簿维护、价差计算、做市策略、风险控制 |
| 系统篇 | 25-30章 | PCIe通信、DMA传输、系统集成、性能调优 |
我个人建议的学习路径是这样的:
- 先打好基础——前8章别跳。Verilog语法、时序约束这些,是后面所有内容的地基。地基不稳,后面盖楼会塌。
- 动手仿真——每学完一章,都去写个简单的仿真测试。不要光看不练。FPGA这东西,看十遍不如写一遍。
- 从简单策略开始——别一上来就想做复杂的统计套利。先做个简单的价差监控,跑通了再慢慢加功能。
- 重视时序——我见过太多人,代码写好了,综合也过了,但上板就跑不起来。为什么?时序没收敛。后面我会专门讲怎么处理时序问题。
小提示:如果你之前没有FPGA经验,别怕。这门课从最基础的Verilog语法讲起。但如果你有C/C++基础,学起来会快很多——很多概念是相通的。
1.4 一个典型的FPGA交易系统长什么样?
下面这张图,是我自己画的一个典型FPGA交易系统的架构。你看一眼,大概就能明白各个模块之间的关系。
你看,从网络接口到行情处理,再到策略计算,最后到订单执行,整个流水线都在FPGA内部完成。数据流是单向的、确定的,没有中断、没有上下文切换、没有缓存抖动。
这就是FPGA能跑赢CPU的核心原因。
注意:FPGA不是万能的。它适合做确定性的、流水线化的计算。如果你的策略需要大量的浮点运算、复杂的机器学习模型,那FPGA可能不是最优选择。这时候可以考虑CPU+FPGA的异构方案。
1.5 我的一些经验之谈
做FPGA交易系统这么多年,我踩过不少坑。说几个印象深刻的:
- 时序问题——我曾经有一个项目,代码在仿真里跑得好好的,上板就出问题。查了三天,发现是时钟域同步没做好。从那以后,我每写一个跨时钟域的模块,都会加上同步器。
- 资源估算——很多人低估了FPGA的资源消耗。尤其是BRAM和DSP。我建议你在写代码之前,先估算一下每个模块的资源占用,留出20%的余量。
- 调试手段——FPGA调试比软件难得多。你不能printf,不能打断点。所以一定要善用仿真和ILA(集成逻辑分析仪)。我个人的习惯是:每写完一个模块,先做独立的仿真验证,再集成到系统中。
嗯,这些经验后面都会详细展开。今天先到这里。
下一章,咱们开始动手写第一行Verilog代码。
公众号:蓝海资料掘金营,微信deep3321