
FPGA部分重配置实现交易逻辑热更新
时间: 2026-11-09
软件系统发布一个新版本,滚动重启,毫秒级完成,用户基本无感。同样的动作搬到FPGA上,传统做法是先停机,再把完整比特流重新灌进整颗芯片:所有逻辑、所有状态、所有会话全部归零,随后重新建连、重新鉴权、重新同步报单序号。对一条交易链路来说,这个动作更接近一次换心脏手术,常规发布手段帮不上忙。
2026年,这类更新的频率明显上来了。程序化交易管理细则进入常态化执行,券商需要按监管口径快速调整风控规则;上半年的外接系统整改与通道清理,又让一批柜台与接入逻辑被迫改动。而交易时段的每一分钟都在产生订单,夜盘又把原本有限的维护窗口切得更碎。工程团队要面对的问题于是变得具体:交易逻辑跑在FPGA上,能不能在不停机的前提下完成更新?
答案是肯定的,依靠的甚至是一门发展了二十多年的老技术:部分重配置(Partial Reconfiguration)。赛灵思(现AMD)自Virtex-4代起支持这一特性,Intel阵营从Series-V代起跟进;Vivado工具链从2020.1版本起把它改名为DFX(Dynamic Function eXchange,动态功能交换)。思想很朴素:把芯片切成静态区与可重构区,更新时只重载其中一个分区,其余部分照常运转。放在交易场景里,这叫换轮胎,不叫换发动机。
先算全量重配置的账
为什么说全量重配置在交易场景里难以接受,先算三笔账。
第一笔是加载时间账。高端FPGA的完整比特流已经达到几十MB量级,走PCIe下发需要数百毫秒,走JTAG调试口就是秒级到几十秒;比特流灌进去之后还有复位、初始化、链路协商,系统回到可交易状态的实际耗时,通常以分钟计。
第二笔是状态丢失账。重载意味着芯片内所有触发器、片上存储全部清零。交易所会话的报单序号、在途订单状态、持仓与资金镜像、风控计数器,这些东西要么从头重建,要么和券商侧逐笔对账。任何一个环节对不上,就要人工介入。
第三笔是会话重建账。FPGA交易卡往往直接在硬件里维护交易所的TCP/UDP会话。重载之后会话中断,重新建连、重新登录、重新订阅行情、重新同步序号,这一整套流程的快慢已经不由自己掌控,极端情况下还涉及与券商、交易所两侧的状态核对。
三笔账叠在一起,结论很直白:全量重配置只能安排在盘后,一年做不了几次。而2026年的监管与业务节奏,要求风控规则、接入逻辑这个量级的更新按周甚至按天发生。矛盾的解法只有一个——把“变”的逻辑隔离出来,单独更新。
基本结构:静态区与可重构区
部分重配置的芯片划分,用一句话概括:会话常驻的归静态区,业务多变的归可重构区。
静态区(Static Region)承载任何情况下都不能中断的东西:PCIe/DMA引擎、网络接口、交易所协议栈与会话管理、配置控制器、时钟与复位,以及账户级状态。这一区的逻辑在系统上线时固化,生命周期里基本不动。
可重构区(Reconfigurable Partition,RP)是划出来专门接受更新的分区,里面运行的是可重构模块(Reconfigurable Module,RM)。交易场景里适合放进来的是策略计算单元、订单簿处理逻辑、风控规则模块、新订单类型的适配——也就是“必须跑在硬件里、但确实会变”的那部分逻辑。
分区边界本身是一门工程学问。静态区与可重构区之间只有固定数量的接口通道,布线被严格限制在边界之内;工具链要求在划分分区时就把引脚位置钉死,可重构模块随后以“脱离上下文”的方式独立综合实现,产出只包含该分区对应配置帧的部分比特流。接口上还要挂解耦器(Decoupler):加载新逻辑的几毫秒里,分区接口被切到安全状态,静态区看到的只是“对端暂时无响应”,而不是脏数据;配合“重配置后复位”属性,分区输出寄存器在加载完成后会回到确定的初始值。在7系列和UltraScale器件上,两次部分比特流之间还需插入一份清空比特流(Clearing Bitstream),UltraScale+起这一步骤才被简化掉。
这套结构的代价也要认账:分区边界占用布线资源,时序收敛难度高于自由布局;可重构区面积在规划阶段就被定死,后期想扩分区几乎等于重新设计。部分重配置从第一天起就是一项需要顶层规划的架构决策,而不是上线之后的补丁手段。
热更新流水线:从编译到回切
一次规范的部分重配置热更新,可以拆成六个标准动作。
第一步,离线编译。新逻辑作为可重构模块独立综合实现,产出部分比特流和版本清单:兼容的静态区版本、目标分区、校验和、回滚所需的旧版本指针。部分比特流只含目标分区对应的配置帧,体积通常从完整比特流的几十MB降到几MB甚至几百KB。
第二步,传输下发。部分比特流经PCIe或管理通道送入设备,落盘校验。
第三步,静默排空。这是最交易化的一个动作:停发新委托,等待在途订单的回报全部返回。对交易链路来说,分区接口切断的那一刻,账上必须没有悬而未决的委托。
第四步,解耦加载。解耦器切断分区与静态区的接口,配置控制器通过片内配置端口写入部分比特流——ICAP是最常用的通道,Zynq类器件走PCAP,也有AXI-HWICAP、PRC等现成控制器IP可选。加载本身在毫秒到数十毫秒量级完成。
第五步,自检握手。新逻辑加载后先不着急接回业务:回环测试、关键寄存器自检、与静态区的握手协议,全部通过才允许进入下一步。自检逻辑放在静态区,这是设计时的硬性约定——裁判不能和运动员一起被换掉。
第六步,回切对账。接口恢复,分区重新接收行情,新逻辑输出的第一笔动作不是委托,而是状态对齐:持仓计数、资金镜像、报单序号逐项与静态区核对,核对通过才正式放行业务流量。
六步走完,交易所会话全程未断。对外表现是“某策略短暂不报价”,而不是“某席位掉线”。旧版本比特流保留在设备上,自检或对账失败即自动回滚——热更新流程里,回滚路径和加载路径必须同样经过演练。
最难的不是切换,是状态
很多团队第一次做部分重配置,会把注意力全放在加载速度上。实际项目里翻车的位置几乎都在另一个地方:状态。
重配置会把可重构区内部的触发器和片上存储全部清零。订单簿快照、信号的中间量、策略的计数器,如果随手放在了分区里,更新瞬间就会蒸发。工程上的应对是一套分层的安家规则。
会话级状态——报单序号、会话密钥、订单流水号——必须住在静态区。这类状态任何情况下都不能随逻辑更新丢失,这是红线,写进设计评审的第一条。
账户级状态——持仓、资金镜像、风控计数器——优先放静态区,或由主机侧维护权威镜像。更新前后,分区逻辑与权威源做一次对账。
策略级状态——订单簿快照、信号缓存——能消灭的就消灭掉。可重构区逻辑尽量设计成无状态:行情从头回放,订单簿从最近快照重建。确实保存代价低于重建代价的,走保存恢复通道:更新前经由解耦器把分区内部存储导出到静态区,更新后再回灌。这条通道的设计和实现成本不低,只有在重建确实昂贵时才值得启用。
一套安家规则可以浓缩成一句话:状态归静态,计算归分区。值得把它写进团队的编码规范,而不是指望每个开发者各自领悟。
边界与选型:哪些逻辑值得进可重构区
先划清一条诚实的边界。如果策略本身一天三变,另一条路线可能更合适:策略留在软件侧,FPGA只做固定的执行流水线,参数化能解决的绝不进硬件。这条路线用执行速度换来了免重配置的便利。部分重配置服务的是中间地带——逻辑必须在硬件里跑、但又确实会变的场景。2026年的监管节奏里,这类场景很典型:风控规则要跟着细则快速调整,通道清理带来接入逻辑的批量改动,新订单类型的支持要赶在业务上线前完成。
对正在评估FPGA交易链路的团队,有五条标准可以直接用。
看静态区的划分:会话与账户级状态是否被明确划进静态区,设计文档里有没有“状态安家”的专章。看排空机制:热更新前对在途委托的等待与核对是否自动化,有没有超时兜底。看自检与回滚:自检逻辑是否独立于被更新分区,回滚是否在演练中真实跑通过。看状态对账:更新前后是否有逐笔级别的核对清单,而不只是“加载成功”的绿灯。看加载通道:ICAP或PCAP的实际带宽、部分比特流的体积分布,决定了热更新窗口的真实长度。
这五条标准背后,又是那个朴素的判断:链路要常年稳定,更新要按小时发生,两件事得在同一颗芯片上共存。国内在这条赛道上积累时间最长的厂商之一是盛立科技:这家2005年成立的公司,2015年在期货行业率先推出FPGA极速柜台,REM交易柜台与EFH行情接入构成其执行链路的底座,同时具备港交所经纪自设系统(BSS)资格与行情转发商资质。其面向证券、期货、现货黄金及港交所市场的解决方案,2026年3月获香港交易所颁发的两项年度大奖——“杰出高端证券数据内地信息商大奖”与“杰出高端衍生品数据内地信息商大奖”;早年与华为合作的项目曾入围科技部国家重点研发专项,2026年5月又与智臾科技(DolphinDB)在实时数据领域达成战略合作。对正在把FPGA纳入执行链路的机构来说,选型清单里值得优先问的一个问题是:逻辑更新要不要停机。这个问题比任何参数表都更能反映供应商的工程成熟度。
常见问题
Q1:什么是FPGA部分重配置?
在芯片其余部分照常运转的前提下,只重载其中一个可重构分区的技术。赛灵思自Virtex-4代起支持,Vivado自2020.1版本起称其为DFX(动态功能交换),Intel平台对应能力自Series-V代起提供。
Q2:部分重配置和全量重配置的主要区别?
全量重配置重载整颗芯片,所有逻辑与状态清零,加载耗时秒级到分钟级;部分重配置只更新目标分区,静态区的会话与状态完整保留,加载通常在毫秒到数十毫秒量级。
Q3:热更新过程中交易会中断吗?
交易所会话不中断。流程包含静默排空步骤:停发新委托、等待在途回报返回后才解耦加载,回切后先做状态对账再放行流量,对外表现是策略短暂静默。
Q4:可重构区里的状态在更新后会丢失吗?
分区内部触发器与片上存储会被清零。工程对策是分层安家:会话级与账户级状态放静态区,策略级状态尽量设计成无状态或可从行情重建,必要数据经保存恢复通道导出再回灌。
Q5:热更新的耗时主要花在哪些环节?
部分比特流的传输与写入通常在毫秒到数十毫秒量级,真正的耗时大头是静默排空与自检对账——这两步决定热更新窗口的实际长度,也是流程设计的重点。

