FPGA 内部资源详解:LUT、FF、BRAM、DSP、PLL 是什么?
很多初学者把 FPGA 当'黑盒'来用:代码写好,综合通过,下板能跑就行。这种方式在入门阶段没问题,但遇到以下情况就会卡住:
- 综合报告提示资源使用率 95%,不知道哪里占用多了
- 时序报告显示关键路径太长,不知道怎么优化
- 代码里用了乘法,不知道会映射到 DSP 还是 LUT,也不知道有什么区别
- 想用片内 RAM 存储一张查找表,不知道怎么写才会推断出 BRAM
了解内部资源,就是了解代码背后'硬件映射'的真相。
1. Artix-7 资源概览
以 Xilinx Artix-7(xc7a100t)为例,主要资源如下:
| 资源类型 | 数量(xc7a100t) | 用途 |
|---|---|---|
| LUT(6-input) | 63400 | 实现任意组合逻辑函数 |
| FF(触发器) | 126800 | 存储 1 bit 状态,构成寄存器 |
| BRAM(36Kb) | 135 块 | 片内大容量存储器 |
| DSP48E1 | 240 个 | 乘法、乘加、MAC 运算 |
| MMCM/PLL | 6 个 | 时钟倍频/分频/相位调整 |
2. LUT 查找表
2.1 LUT 是什么
LUT(Look-Up Table,查找表) 是 FPGA 实现组合逻辑的核心单元。Artix-7 使用的是 6-input LUT,即有 6 个输入(A1~A6)和 1 个输出(O)。
LUT 的本质是一个 64 位的真值表存储器(2⁶ = 64 种输入组合)。每种输入组合对应的输出值在编程时写入,运行时根据输入地址直接查表输出,延迟固定。
2.2 LUT 实现任意 6 输入函数
任何 6 变量以内的布尔函数,都能用一个 6-input LUT 实现:
// 以下所有函数综合后各只需 1 个 LUT
assign y = a & b; // 2 输入与门
assign y = a | b | c | d; // 4 输入或门
assign y = (a & b) | (c & d) | (e ^ f); // 6 变量函数
assign y = (a == 4'b1010) ? 1 : 0; // 4 位等值比较
超过 6 个输入的逻辑需要多个 LUT 级联:
// 8 输入与门:需要 2 个 LUT(先 4 输入与,再 2 输入与)
assign y = a & b & c & d & e & f & g & h;
2.3 LUT 的双输出模式(O5/O6)
Xilinx 7 系列的 6-input LUT 可以同时配置为:
- 一个 6-input LUT(输出 O6)
- 同时输出一个 5-input LUT 的结果(输出 O5,使用前 5 个输入 A1~A5)
综合工具会自动利用这一特性打包逻辑,提高 LUT 使用效率,无需手动干预。
2.4 LUT vs FF:什么决定用哪个
| 信号类型 | 推断的资源 |
|---|---|
assign y = a & b;(组合逻辑) | LUT |
| (时序逻辑) |


