一、撮合系统概述
1.1 什么是撮合系统
撮合系统,说白了就是「买卖双方的配对引擎」。
你想想看,在交易所里,有人想买股票,有人想卖股票。谁跟谁成交?价格怎么定?顺序怎么排?这些事都得有个规则。撮合系统就是干这个的。
我做过几个交易系统的项目,每次跟客户聊,他们最关心的就两件事:快不快和准不准。快,指的是延迟要低;准,指的是不能出错。这两点,恰恰是FPGA的强项。
一个典型的撮合流程是这样的:
- 接收订单(买/卖,价格,数量)
- 检查订单合法性(资金够不够?股票有没有?)
- 进入订单簿排队(价格优先,时间优先)
- 尝试匹配(有没有能成交的对手单?)
- 生成成交回报(谁买了多少,谁卖了多少)
嗯,看起来不复杂对吧?但难点在于:每秒可能有几十万笔订单涌进来。CPU处理这个量级,延迟会飙到微秒甚至毫秒级。而FPGA,可以做到纳秒级。
核心指标: 撮合系统的性能通常用「吞吐量」和「延迟」来衡量。吞吐量是每秒能处理多少笔订单,延迟是一笔订单从进来到出去花了多少时间。
1.2 FPGA为什么适合做撮合
这个问题,我当年刚接触FPGA时也问过自己。后来做了几个项目才真正理解。
原因一:流水线架构
CPU是串行执行的——一条指令处理完,才能处理下一条。FPGA不一样,它可以搭一条流水线:订单进来,第一步检查合法性,第二步查价格,第三步匹配...每个步骤都在不同的硬件模块里同时跑。
我曾经在一个项目中,用FPGA实现了8级流水线的撮合引擎。结果呢?每时钟周期就能处理一笔订单。CPU要几十个时钟周期才能干完的事,FPGA一个周期就搞定了。
原因二:确定性延迟
CPU有缓存命中、分支预测、操作系统调度...这些都会导致延迟抖动。有时候快,有时候慢。做交易的人最怕这个——你不知道下一秒会不会卡一下。
FPGA没有操作系统,没有缓存未命中。它的延迟是完全确定的。你设计好逻辑,延迟就是固定的几个时钟周期。这一点,在金融交易里太重要了。
原因三:并行处理
撮合系统里有很多独立的任务:订单接收、风控检查、价格匹配、成交回报...CPU只能一个一个来。FPGA可以同时干。
我习惯把FPGA比作「硬件上的多线程」——只不过这个线程不是软件线程,而是真正的硬件并行。
个人经验: 我建议初学者先别急着写代码。先想清楚你的撮合逻辑能不能拆成流水线。能拆,FPGA就适合;拆不了,还是用CPU吧。
1.3 课程目标
这门课的目标很明确:让你能独立设计一个基于FPGA的撮合系统。
具体来说,学完这门课,你应该能:
- 理解撮合系统的核心算法(价格优先、时间优先)
- 掌握FPGA设计的基本方法(流水线、状态机、FIFO)
- 能写出可综合的Verilog代码(不是仿真玩玩,是真的能上板子跑的)
- 会做时序分析和优化(保证你的设计能跑在目标频率上)
- 了解常见的坑和避坑方法(我踩过的坑,你就不用再踩了)
注意: 这门课不是FPGA入门课。你需要有基本的Verilog基础,知道什么是寄存器、组合逻辑、时钟。如果你还不会写一个简单的计数器,建议先补一下基础。
1.4 学习路径
我把课程分成了四个阶段,每个阶段都有明确的目标:
| 阶段 | 内容 | 目标 |
|---|---|---|
| 第一阶段 | 撮合系统基础 + FPGA架构 | 理解业务逻辑和硬件映射 |
| 第二阶段 | 核心模块设计(订单簿、匹配引擎) | 能写出可综合的RTL代码 |
| 第三阶段 | 系统集成与优化 | 能搭出完整的撮合系统 |
| 第四阶段 | 验证与调试 | 能定位问题、优化性能 |
我个人建议的学习节奏是:每周一章,边学边练。光看不练,等于白学。每章后面的练习一定要做,哪怕只是改改参数跑个仿真。
1.5 知识体系总览
下面这张图,是我画的本课程知识体系。你可以把它当成一张地图,学完一章就回来看看,知道自己走到哪了。
这张图你看懂了吗?从下往上看,就是我们的学习路径。先打基础,再搞核心模块,然后集成,最后验证。每一步都踩实了,再往前走。
一个小建议: 学完每一章,试着在图上标注你已经掌握的部分。这样你会有成就感,也知道自己还差什么。
1.6 写在开头的话
做FPGA撮合系统,说实话,门槛不低。你既要懂交易业务,又要懂硬件设计。但反过来想,正因为门槛高,会的人少,你学会了才有竞争力。
我记得自己第一次做撮合项目时,光是订单簿的数据结构就改了三版。第一版用数组,发现查找太慢;第二版用链表,发现FPGA里不好实现;第三版用二叉堆,终于跑通了。这些经验,我会在后面的章节里一一分享。
好了,第一章就到这里。下一章,我们开始讲订单簿的数据结构——这是撮合系统的核心,也是很多人容易搞混的地方。
公众号:蓝海资料掘金营,微信deep3321