什么是FPGA
FPGA(现场可编程门阵列)是一种高度灵活的半导体器件,其核心思想是通过可编程的硬件结构实现用户定义的电路功能。
1. 基本组成单元:可编程逻辑单元(CLB / LE)
FPGA的核心是可编程逻辑块(Configurable Logic Block, CLB,或称为Logic Element, LE),通常由以下两部分构成:
- 查找表(LUT, Look-Up Table)
- 功能:实现任意组合逻辑(如与、或、非等)。
- 原理:一个N输入的LUT本质上是一个 (2^N \times 1) 的存储器,存储了所有可能的输入组合对应的输出值。
- 例如,一个2输入LUT若存储值[0, 0, 0, 1],则等效于一个AND门。存储值[1, 1, 1, 0]则等效于一个NAND门。
- 常见配置:4输入LUT(可表示任意4输入逻辑函数)、6输入LUT(现代FPGA如Xilinx UltraScale)。
- 触发器(Flip-Flop, FF)
- 功能:存储状态,实现时序逻辑(如寄存器、计数器、状态机)。
- 与LUT的配合:LUT处理组合逻辑,FF存储结果,形成完整的时序电路。
示例:一个CLB可能包含多个LUT和FF的组合,例如:
- Xilinx 7系列:每个Slice包含4个LUT + 8个FF。
- Intel Cyclone V:每个Logic Element(LE)包含1个4输入LUT + 1个FF。
2. 布线资源(Routing Resources)
FPGA的逻辑单元之间通过可编程互连网络连接,布线资源决定了信号传输的路径和延迟。
- 类型:
- 水平/垂直金属线:全局布线通道。
- 开关矩阵(Switch Matrix):连接不同方向的金属线。
- 可编程开关(如Pass Transistor、Multiplexer):控制信号路径的通断。
- 关键问题:
- 布线延迟可能占电路总延迟的60%以上,是时序收敛(Timing Closure)的主要挑战。
- 现代FPGA使用分层布线架构(局部布线、全局布线)优化延迟。
3. 输入输出块(IOB, Input Output Block)
- 功能:连接FPGA内部逻辑与外部引脚。
- 特性:
- 支持多种电平标准(LVCMOS、LVDS、HSTL等)。
- 可配置为输入、输出或双向端口。
- 包含缓冲器(Buffer)、施密特触发器(Schmitt Trigger)等电路,增强信号完整性。
4. 专用硬件模块
现代FPGA集成了多种专用硬件资源,用于加速特定任务并节省逻辑资源:
(1) 嵌入式存储器(Block RAM, BRAM)
- 功能:提供片上高速存储,避免使用分布式RAM(由LUT实现)的资源浪费。
- 配置:
- 容量:通常为18Kb或36Kb的块,支持多端口访问。
- 用途:FIFO、缓冲区、查找表存储等。
(2) 数字信号处理块(DSP Slice)
- 功能:高效执行乘加运算(如 (A \times B + C)),用于加速数字信号处理(滤波器、FFT等)。
- 结构:包含乘法器、累加器、流水线寄存器。
- 优势:比用LUT实现乘法器速度更快、资源更省。
(3) 时钟管理单元(Clock Management)
- 锁相环(PLL) 和 延迟锁相环(DLL):
- 生成多路时钟(频率合成、相位调整)。
- 消除时钟偏移(Clock Skew)。
(4) 高速串行接口(如Transceiver)
- 功能:支持高速协议(PCIe、SATA、Ethernet)。
- 速率:可达数十Gbps(如Xilinx UltraScale+ GTY Transceiver支持32.75 Gbps)。
(5) 硬核处理器(Hard Processor)
- 示例:
- Xilinx Zynq:集成ARM Cortex-A9核。
- Intel SoC FPGA:集成ARM Cortex-A53核。
- 用途:实现软硬件协同设计(如运行Linux系统)。
5. 配置存储器
- 功能:存储FPGA的配置信息(比特流文件),决定逻辑单元和布线的连接方式。
- 类型:
- SRAM-based FPGA:
- 特点:上电时从外部Flash加载配置,断电丢失。
- 代表:Xilinx大部分FPGA、Intel(Altera)FPGA。
- Flash-based FPGA:
- 特点:配置信息存储在片内Flash,上电即用。
- 代表:Microsemi(Microchip)ProASIC3系列。
- SRAM-based FPGA:
6. 现代FPGA的层次化架构
以Xilinx 7系列FPGA为例,其结构从细粒度到粗粒度分为:
- 底层:
- LUT + FF → Slice(2个LUT + 2个FF为一对) → CLB(2个Slice)。
- 中层:
- CLB阵列 + 布线通道 → 构成逻辑区域。
- 顶层:
- 逻辑区域 + Block RAM、DSP、时钟模块等 → 通过全局布线互联。
FPGA vs. ASIC:结构差异
| 特性 | FPGA | ASIC | |——————|———————————–|—————————| | 可编程性 | 可重复编程 | 一次性固化 | | 逻辑密度 | 低(依赖预制资源) | 高(定制化晶体管) | | 性能 | 较低(受限于通用布线) | 高(优化路径) | | 功耗 | 较高(静态功耗来自配置资源) | 低(仅动态功耗) | | 成本 | 低(无需流片) | 高(NRE费用高) |
FPGA的设计映射示例
假设实现一个4位加法器:
- 逻辑实现:
- 每个1位全加器需要2个LUT(计算和与进位)。
- 4位级联进位加法器共需8个LUT + 4个FF(存储进位链)。
- 布局布线:
- 工具自动将LUT和FF映射到相邻CLB,优化布线延迟。
- 资源占用:
- 占用约1个Slice(假设每个Slice含4个LUT)。
总结:FPGA的核心优势
- 灵活性:通过配置实现任意数字电路。
- 并行性:硬件电路天然支持并行处理。
- 快速迭代:无需流片,适合原型验证和小批量生产。
理解FPGA内部结构有助于优化设计(如减少关键路径延迟、合理使用Block RAM),同时避免资源浪费和时序问题。
留下评论