第三章 FPGA架构深度解析:主流厂商对比与内部结构
做逆向工程这么多年,我拆解过的FPGA芯片少说也有几十款了。每次拿到一颗新片子,第一件事就是看它的架构——说白了,你得知道对手的“底牌”长什么样。这一章,咱们就聊聊主流FPGA厂商的架构差异,以及那些藏在芯片内部的秘密。
3.1 三大主流厂商的架构哲学
Xilinx、Intel(原Altera)和Lattice,这三家的设计思路其实挺不一样的。我个人的感觉是:Xilinx像个学院派,结构规整,文档详尽;Intel更像工程派,追求性能和效率的极致;而Lattice嘛,走的是小而美的路线,低功耗领域它说了算。
| 特性 | Xilinx (AMD) | Intel (Altera) | Lattice |
|---|---|---|---|
| 基本逻辑单元 | Slice (含LUT+FF) | ALM (自适应逻辑模块) | PFU (可编程功能单元) |
| LUT结构 | 6输入LUT (可拆分为2个5输入) | 8输入ALM (可拆分为多个小LUT) | 4输入LUT (主流) |
| 布线资源 | 丰富的层次化布线 | Direct Drive技术 | 相对简单,但够用 |
| 高速收发器 | GTY/GTH/GTX系列 | Transceiver Tile | 低功耗SERDES |
| 逆向难度 | 中等(位流加密强) | 较高(ALM结构复杂) | 较低(结构简单) |
嗯,这里要注意:逆向难度这个指标,其实跟架构复杂度直接相关。Intel的ALM结构太灵活了,同一个逻辑功能可能有几十种映射方式,逆向时你根本猜不透它当初是怎么布局的。
3.2 CLB与Slice内部结构
CLB(可配置逻辑块)是FPGA的心脏。Xilinx的CLB里包含两个Slice,每个Slice又有自己的“小九九”。我习惯把Slice分成两类:SLICEL(逻辑Slice)和SLICEM(存储Slice)。
核心知识点:SLICEM里的LUT可以当分布式RAM或移位寄存器用。我在逆向一个通信协议栈时,发现对方用SLICEM实现了64x1的FIFO,当时差点被绕晕——因为从逻辑功能上看,它明明就是个LUT,但时序行为完全不对。
一个典型的Slice包含:
- LUT(查找表):6输入,可配置为任意6输入布尔函数
- FF(触发器):每个Slice有8个,支持同步/异步复位
- 进位链:用于算术运算,CARRY4模块
- 多路选择器:F7AMUX/F7BMUX/F8MUX,用于实现更宽的逻辑
你想想看,为什么Xilinx要把LUT做成6输入?其实是为了平衡面积和速度。4输入LUT太浪费资源,8输入又太慢。6输入是个折中——我在实际项目中测过,6输入LUT的利用率比4输入高了约30%。
3.3 布线资源与Switch Box
布线资源是FPGA的血管。没有好的布线,再强的逻辑也白搭。Xilinx的布线网络分好几层:
- 本地布线:同一个CLB内部,延迟极小
- 短线资源:连接相邻CLB,适合局部逻辑
- 长线资源:跨越芯片大部分区域,用于全局信号
- 全局时钟网络:低抖动,高扇出
Switch Box(开关盒)是布线的核心。它本质上是个交叉矩阵,控制着金属线的连接方式。我曾经逆向过一个Switch Box的配置位,发现它用了6个晶体管实现一个交叉点——嗯,这个设计挺巧妙的,既保证了速度,又控制了面积。
避坑指南:逆向布线资源时,别只看Switch Box的配置。我曾经花了两周时间分析一个Switch Box,结果发现真正决定信号走向的是MUX(多路选择器)的配置,而不是Switch Box本身。布线资源逆向,要“由外向内”看。
3.4 IOB与高速收发器
IOB(输入输出块)是FPGA与外界通信的窗口。每个IOB包含:
- 输入路径(带延迟调节)
- 输出路径(带驱动能力控制)
- 三态控制
- 上拉/下拉电阻
高速收发器就更有意思了。Xilinx的GTH收发器能跑到16Gbps以上,内部结构极其复杂:PLL、CDR、SerDes、FIFO……一层套一层。我逆向过一个GTH的配置位,光是PLL的锁定检测逻辑就看了三天。
警告:高速收发器的逆向难度极高。不建议新手直接上手。我见过有人试图通过扫描JTAG接口来读取收发器配置,结果把芯片搞锁死了——因为收发器的配置位通常有ECC校验,写错了直接触发安全机制。
3.5 架构对比的实战意义
了解这些架构差异有什么用?说白了,就是帮你快速定位目标芯片的“软肋”。
举个例子:如果你逆向的是Lattice的芯片,它的PFU结构简单,LUT只有4输入,那么你完全可以暴力枚举所有可能的逻辑功能。但如果是Intel的芯片,ALM结构太灵活,暴力枚举就不现实了——你得先猜出它用的是哪种拆分模式。
我个人习惯是:拿到一颗新芯片,先看它的CLB/Slice结构,再看布线资源的层次。这两个信息基本能决定逆向策略的走向。
这张图基本概括了本章的知识体系。从厂商架构出发,深入到CLB/Slice,再到布线资源和IOB,最后落到逆向策略上。我每次做逆向项目,都会先画这么一张图——不是为了好看,而是为了理清思路。
好了,这一章的内容就到这里。记住:FPGA架构是逆向的基础,基础不牢,地动山摇。下一章咱们聊聊更实战的内容——位流格式分析与提取技术。