FPGA 基础(01):FPGA 架构原理——LUT、FF、DSP、BRAM、互联、配置
更新时间:2026-09-02。本文是
fpga/FPGA 领域第 01 篇,在 FPGA 总纲下。FPGA 的核心是查找表 + 触发器,加上 DSP、BRAM 等专用硬件,通过可编程互联连接在一起。理解架构才能用好 FPGA。
本文要回答的问题
- FPGA 内部由什么基本单元组成?LUT、FF 分别做什么?
- DSP、BRAM 这些专用硬件有什么用?为什么要用它们?
- 可编程互联怎么连接所有单元?配置怎么加载?
- Xilinx 和 Intel FPGA 的架构有什么区别?
一、FPGA 基本架构
FPGA 内部架构:
┌─────────────────────────────────────────────────────┐
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 可编程逻辑 │ │ 可编程逻辑 │ │ 可编程逻辑 │ ... │
│ │ 块 (CLB) │ │ 块 (CLB) │ │ 块 (CLB) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ BRAM │ │ DSP48 │ │ BRAM │ ... │
│ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────────────────────────────────────────┐ │
│ │ 可编程互联(Programmable Interconnect) │ │
│ └──────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────┐ │
│ │ I/O 块 │ │
│ │ LVDS / DDR / PCIe / SerDes │ │
│ └──────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘二、基本单元
1. LUT(Look-Up Table,查找表)
LUT 是 FPGA 的最小逻辑单元,本质是 SRAM 实现的真值表
4 输入 LUT:
输入:4 个信号
输出:1 个信号
内部:16 位 SRAM 存真值表(2^4 = 16 种组合)
6 输入 LUT(Xilinx 7 系列以上):
输入:6 个信号
输出:1 个信号
内部:64 位 SRAM 存真值表
LUT 可以实现任意组合逻辑:
Y = A & B | C & D → 就看 LUT 的 SRAM 怎么配
Y = A xor B xor C → 同样 LUT,不同配置LUT 特点:
- 输入越多,LUT 越灵活,但面积越大
- 现代 FPGA 用 6-LUT 主流(Xilinx),Intel 用 4-LUT 变体
- LUT 也可以配置成小容量 RAM(Distributed RAM)
2. FF(Flip-Flop,触发器)
FF 是时序逻辑的最小单元
每个 CLB 内,LUT 后面跟着 FF:
LUT 输出 → FF 输入 → FF 输出(到互联)
FF 配置:
- 时钟沿(上升沿/下降沿)
- 复位方式(同步/异步)
- 复位电平(高/低)
- 时钟使能
一个 CLB 通常包含 4-8 个 LUT 和 8-16 个 FFLUT + FF 构成一个 Slice(Xilinx 命名):
- Slice = LUT + FF + 进位链 + 多路复用器
- CLB = 多个 Slice
- 这是 FPGA 可以"实现任何数字电路"的原因
3. DSP(数字信号处理单元)
DSP48(Xilinx 命名):
硬件乘法器(18x18 或 25x18)
累加器
加法器/减法器
功能:
P = A * B + C (乘加,MAC 操作)
为什么有 DSP:
纯 LUT 做乘法 → 浪费大量 LUT,速度慢,功耗大
DSP 硬件乘法器 → 快,省 LUT,省功耗
用途:
数字滤波器(FIR/IIR)
FFT 蝶形运算
矩阵乘法
任何需要乘加运算的场景4. BRAM(块内存)
BRAM 是 FPGA 内置的专用内存块
Xilinx 7 系列 BRAM:
每个 BRAM:36 Kb
可配置:
32K × 1 bit
16K × 2 bit
8K × 4 bit
4K × 9 bit
2K × 18 bit
1K × 36 bit
两个 BRAM 可以级联成 64K × 1 或 1K × 72
用途:
FIFO 缓存
数据缓冲区
查找表(大表格)
帧缓冲为什么用 BRAM 而不是 LUT 做内存:
- BRAM 容量大(每个 36Kb),LUT 只有几十 bit
- BRAM 速度快,时序容易收敛
- LUT 适合小容量分布式内存
三、可编程互联
互联是 FPGA 的血管,连接所有单元
互联结构:
1. 局部互联:同一 CLB 内 LUT → FF
2. 全局互联:不同 CLB 之间连接
3. 长线互联:跨越整个芯片(时钟、复位)
4. I/O 互联:CLB → I/O 引脚
互联方式:
布线矩阵(Switch Matrix)
每个方向有多个通道
通过编程配置连接点互联是 FPGA 的瓶颈:
- 逻辑资源很多,但互联资源有限
- 布线拥塞时,时序难收敛
- 利用率超过 70% 时,布线难度急剧增加
四、FPGA 配置
FPGA 是 SRAM 编程,断电丢失
配置方式:
1. JTAG 模式(调试、下载)
2. 主动配置(FPGA 从 Flash 加载)
3. 被动配置(外部处理器加载)
配置流程:
上电 → 加载 bitstream → 配置内部 SRAM → 开始工作
bitstream 内容:
1. LUT 的真值表配置
2. 互联矩阵的开关配置
3. BRAM 的初始化数据
4. I/O 的电气特性配置
bitstream 是 FPGA 的"二进制可执行文件"五、主流厂商架构对比
| 对比维度 | Xilinx(AMD) | Intel(Altera) | Lattice |
|---|---|---|---|
| LUT 类型 | 6-LUT | 4-LUT 变体(ALM) | 4-LUT |
| CLB 结构 | 2 Slice / CLB | 8 ALM / LAB | 4 LUT / PFU |
| DSP | DSP48(25x18) | DSP Block(18x18) | DSP Block |
| BRAM | 36 Kb | M20K(20 Kb) | EBR |
| 互联 | 高密度互联 | Direct Drive | 简单互联 |
| 定位 | 高端/全线 | 中端/低功耗 | 低功耗/小封装 |
经验: Xilinx 架构更灵活,Intel 功耗更低,Lattice 适合低功耗嵌入式。
六、FPGA 选型建议
| 场景 | 建议芯片 | 原因 |
|---|---|---|
| 通信/数据中心 | Xilinx Virtex / Kintex | 高速 SerDes,大容量 |
| 视频处理 | Xilinx Artix / Spartan | 性价比好,DSP 够用 |
| 低功耗嵌入式 | Lattice iCE / MachXO | 极低功耗,封装小 |
| 工业控制 | Intel Cyclone / MAX | 稳定,生态好 |
| 原型验证 | Xilinx Virtex / Versal | 超大容量,高速互联 |
相关与延伸
下一篇:Verilog 设计基础——组合逻辑、时序逻辑、状态机、同步设计;EDA 验证工具链,见 EDA 验证工具链。
一句话总结
FPGA 架构:LUT(查找表,实现组合逻辑)+ FF(触发器,实现时序逻辑)是最小单元,一个 Slice = LUT + FF + 进位链;DSP 是硬件乘法器,做数字信号处理比 LUT 快 10 倍;BRAM 是块内存,比 LUT 做内存容量大、速度快;可编程互联连接所有单元,利用率超 70% 时布线难度急剧增加;FPGA 是 SRAM 编程,断电丢失,配置从 Flash 加载;Xilinx 用 6-LUT 更灵活,Intel 功耗低,Lattice 适合嵌入式。