1. 交易系统概览:FPGA在低延迟交易中的角色、系统架构、延迟指标定义
1.1 为什么是FPGA?——我在交易系统里看到的真相
做高频交易的人,最怕什么?说白了,就是怕比别人慢。
你想想看,在纳秒级的竞争里,谁先拿到行情,谁先算出信号,谁先发出订单,谁就赚钱。CPU再快,也得走操作系统、走协议栈、走内核调度。这一套下来,几十微秒就没了。而FPGA呢?它不走这些弯路。
我个人习惯把FPGA比作「一条直通的高速公路」。数据从网口进来,直接在硬件里完成解析、计算、决策,然后从网口出去。没有中断,没有调度,没有缓存拷贝。嗯,就是这么直接。
我在项目中遇到过一件事:某家交易所的行情接口升级,CPU方案要改驱动、改协议栈、改应用层,折腾了两周。FPGA这边呢?改了几行RTL代码,重新综合一下,半天搞定。这就是硬件可编程的魅力。
核心观点:FPGA在交易系统中的角色,就是「把延迟做到物理极限」。它不负责复杂逻辑,只负责快。
1.2 系统架构长什么样?——一张图讲清楚
下面这张图,是我自己画的。你看完就明白FPGA在整个交易链路里站什么位置了。
这张图里,FPGA是绝对的核心。它夹在网络接口和交易接口中间,所有数据都经过它。我习惯把FPGA内部拆成三块:
- 行情解析模块:从网络包中提取交易所的行情数据。这一步最坑,因为不同交易所的协议不一样,有的用二进制,有的用XML。我曾经被某家交易所的「自定义UDP封装」坑了一周——他们的校验和算法居然和标准不一样。
- 信号计算模块:算各种指标,比如价差、均线、波动率。这里要注意,FPGA不适合做复杂的浮点运算,但做定点数加减乘除,那是它的强项。
- 策略决策模块:根据信号决定要不要下单。这个模块延迟要求最高,通常只有几个时钟周期。
我的建议:刚开始设计架构时,别急着写代码。先把数据流图画清楚。我见过太多人上来就写RTL,写到一半发现模块间握手协议没定义好,回头改架构,白白浪费两周。
1.3 延迟指标定义——你到底要测什么?
做低延迟交易,你得先搞清楚「延迟」到底指什么。很多人一上来就说「我的系统延迟是1微秒」,但问他从哪到哪,他答不上来。这就尴尬了。
我一般把延迟拆成三个层次:
| 延迟类型 | 定义 | 典型值(FPGA方案) | 测量方法 |
|---|---|---|---|
| 线缆延迟 | 光信号在光纤中传输的时间 | 约5ns/米 | 物理测量 |
| 网卡延迟 | 从网口到FPGA内部的时间 | 10-50ns | 内部计数器 |
| 处理延迟 | FPGA内部从输入到输出的时间 | 100-500ns | 仿真 + 实测 |
| 端到端延迟 | 从行情到达网口到订单发出网口 | 200-1000ns | 回环测试 |
这里我要强调一点:处理延迟不是固定的。它取决于你的流水线深度、时钟频率、以及数据是否发生了背压(backpressure)。
注意:千万不要只看「平均延迟」。在高频交易里,最大延迟(max latency)才是要命的。一次100ns的抖动,可能就让你错过一笔交易。我见过一个团队,平均延迟做到300ns,但最大延迟到了2μs,结果实盘时频繁丢单。后来发现是某个模块的FIFO满了,触发了反压。
1.4 延迟的「坑」在哪里?——我踩过的雷
做FPGA低延迟设计,有几个地方特别容易翻车。我一个个说:
- 时钟域同步:跨时钟域处理不好,延迟直接翻倍。我曾经为了省一个FIFO,用了双触发器同步,结果亚稳态导致数据错位,查了三天才找到原因。后来老老实实用了异步FIFO。
- 复位策略:全局复位信号走太远,导致复位释放时间不一致。我建议用局部复位,每个模块自己管自己。
- BRAM vs LUT:查表用BRAM延迟小,但容量有限。用LUT实现小FIFO延迟更可控。这个取舍,得看你的资源余量。
- 综合选项:Vivado里有个「retiming」选项,默认是关的。打开后能自动优化路径延迟,但会多耗一些资源。我一般都会打开。
一句话总结:FPGA低延迟设计,本质上是「用确定性换速度」。你牺牲了灵活性,换来了可预测的、极致的延迟表现。
1.5 调试工具怎么选?——我的工具箱
做低延迟调试,光靠仿真不够。你得有趁手的家伙。我常用的几样:
- ChipScope / ILA:抓内部信号,看时序。我习惯在每个关键模块出口都挂一个ILA,方便定位问题。
- 内部计数器:在代码里埋时间戳计数器,精度能到1个时钟周期。这个比ILA更灵活,适合长期监控。
- 回环测试:把FPGA的发送和接收短接,测端到端延迟。这是最准的方法。
- 逻辑分析仪:抓FPGA和外部芯片的通信。我遇到过DDR3初始化时序不对,就是靠逻辑分析仪抓出来的。
小技巧:调试时别贪多。一次只改一个变量,改完测一次。我见过有人同时改了时钟频率和流水线深度,结果出问题了,根本不知道是哪个引起的。嗯,调试是个耐心活。
好了,这一章就聊这么多。FPGA在交易系统里的角色,说白了就是「快」。但快不是全部,你得知道快在哪里,怎么测,怎么调。后面几章,我会一个个拆开来讲。
公众号:蓝海资料掘金营,微信deep3321