第一章:FPGA基础与开发环境
各位同学好,我是老张。在低延迟交易这个圈子里摸爬滚打了十几年,今天咱们来聊聊FPGA订单簿处理引擎的第一课——基础与开发环境。
说实话,很多人一上来就急着写代码,结果连FPGA内部长什么样都没搞清楚。我当年也犯过这个错,后来吃了不少苦头才补回来。所以这一章,咱们把地基打牢。
1.1 FPGA架构简介
FPGA,说白了就是一块可以反复编程的芯片。跟CPU那种固定指令集不同,FPGA的硬件电路是你说了算。你想想看,这多适合做高频交易?
一个典型的FPGA内部包含这几大块:
- 可编程逻辑块(CLB)——这是干活的主力,由查找表(LUT)和触发器(FF)组成
- 块RAM(BRAM)——片上存储,速度极快,适合做订单簿的缓存
- DSP切片——专门做乘加运算,处理价格计算时特别好用
- I/O引脚——跟外界通信的通道,比如接网卡、接内存
- 时钟管理——PLL、MMCM这些,用来产生稳定的时钟信号
核心要点:FPGA的并行能力才是它的杀手锏。CPU一次只能处理一条指令,FPGA可以同时处理成千上万个逻辑单元。做订单簿匹配时,这个优势就体现出来了。
我在项目中遇到过一件事:用CPU做订单簿深度计算,延迟在微秒级。换成FPGA后,直接压到纳秒级。差距就是这么明显。
下面这张图是我自己画的FPGA内部结构,你看一眼就明白了:
1.2 Verilog/VHDL基础
写FPGA代码,主流就两种语言:Verilog和VHDL。我个人习惯用Verilog,因为语法更接近C语言,上手快。但VHDL在军工和航天领域用得更多,看你们团队传统。
咱们做订单簿引擎,最核心的就是状态机和流水线。我给你们看个最简单的例子——一个D触发器:
// Verilog 示例:D触发器
module d_flip_flop (
input wire clk, // 时钟
input wire rst_n, // 复位(低有效)
input wire d, // 数据输入
output reg q // 数据输出
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
q <= 1'b0; // 异步复位
else
q <= d; // 时钟上升沿采样
end
endmodule
个人经验:写Verilog时,always块里的赋值一定要用<=(非阻塞赋值),这是跟C语言最大的区别。我刚开始写的时候老是用=,结果仿真和实际跑出来完全不一样,查了两天才发现是这个问题。
再来个组合逻辑的例子——一个简单的加法器:
// Verilog 示例:加法器
module adder (
input wire [7:0] a,
input wire [7:0] b,
output wire [8:0] sum
);
assign sum = a + b;
endmodule
嗯,这里要注意:组合逻辑用assign,时序逻辑用always。这个区分清楚了,后面写订单簿的状态机才不会乱。
1.3 Xilinx/Intel开发工具链搭建
工具链这块,市面上两大阵营:Xilinx(现在叫AMD)和Intel(原Altera)。做低延迟交易,Xilinx的UltraScale+系列用得最多,Intel的Arria系列也不错。
我给你们列个对比表:
| 项目 | Xilinx (AMD) | Intel (Altera) |
|---|---|---|
| 开发工具 | Vivado | Quartus Prime |
| 仿真工具 | Vivado Simulator / ModelSim | ModelSim / Questa |
| 常用芯片 | Kintex-7, Virtex-7, UltraScale+ | Cyclone V, Arria 10, Stratix 10 |
| 低延迟优势 | GTY收发器,低抖动时钟 | 硬核浮点DSP,低功耗 |
| 学习曲线 | 中等偏难 | 相对平缓 |
避坑指南:我曾经在搭建Vivado环境时,因为版本不匹配折腾了一整天。记住:Vivado 2018.3以后才支持UltraScale+,Quartus 18.0以后才支持Arria 10。下载时一定要看Release Notes。
搭建步骤其实不复杂,我总结成四步:
- 下载安装——去官网注册账号,下载对应版本。Xilinx的Vivado大概30GB,Intel的Quartus大概15GB。记得留够硬盘空间。
- 配置License——Xilinx有免费的WebPACK版本,够咱们学习用。Intel也有免费的Lite版本。
- 创建工程——选芯片型号,添加源文件。我建议一开始用模板工程,别自己从头配。
- 跑个Hello World——写个LED闪烁程序,验证工具链通不通。这一步过了,后面就顺了。
我个人习惯用Vivado,因为它的IP Integrator工具做系统集成很方便。比如把DDR控制器、以太网MAC、订单簿引擎这些模块拖到一起,连线就完事了。
最后说一句:工具链只是手段,不是目的。别在装软件上花太多时间,重点是理解FPGA怎么工作。下一章咱们就开始写真正的订单簿代码了。
本章小结:FPGA的核心是并行和可编程,Verilog/VHDL是描述硬件行为的语言,工具链是连接设计和芯片的桥梁。这三样搞明白了,后面做订单簿引擎就水到渠成。
公众号:蓝海资料掘金营,微信deep3321