第三章 FPGA架构原理:可编程逻辑单元、查找表、触发器、块RAM、DSP、时钟资源等内部结构
紫光同创国产FPGA(如Logos系列、Titan系列)作为可重构数字电路的核心载体,其内部架构决定了设计的性能上限、资源利用率与布线成功率。本章将深入剖析FPGA芯片内部的六大关键资源:可编程逻辑单元(PLC)、查找表(LUT)、触发器(FF)、块RAM(BRAM)、DSP运算单元以及时钟资源。理解这些底层结构,是进行高效硬件开发、时序收敛与资源优化的前提。我们将从原理出发,结合工程实践,揭示这些资源如何协同工作,以及如何规避常见的架构理解误区。
3.1 可编程逻辑单元(PLC)与查找表(LUT)核心原理
紫光同创FPGA的基本可编程逻辑单元(Programmable Logic Cell, PLC)通常由查找表(LUT)、触发器(FF)、多路选择器(MUX)以及快速进位链组成。LUT是FPGA实现组合逻辑的核心,其本质是一个静态随机存储器(SRAM)单元构成的真值表。以常见的6输入LUT为例,它内部包含64个SRAM位,通过输入信号作为地址线,直接输出对应地址存储的逻辑值。这意味着任何6输入布尔函数都可以在一个LUT内实现,无需像传统门电路那样进行逻辑化简。
3.2 触发器(FF)与同步时序设计
触发器是FPGA中实现时序逻辑的基本单元。紫光同创FPGA的PLC内通常包含2个或4个D触发器,支持异步复位/置位、时钟使能(Clock Enable)以及上电初始值配置。触发器在时钟边沿采样数据输入(D),并稳定输出至Q端。理解触发器的硬件特性对于编写高质量的RTL代码至关重要。
- 时钟使能(CE):当CE为高时,触发器在时钟边沿更新数据;CE为低时保持当前状态。综合工具会将代码中的
if (ce) q <= d;映射为带CE的触发器,而非额外的MUX逻辑。 - 异步复位/置位:复位信号优先级最高,不受时钟控制。在代码中应避免对同一触发器同时使用异步复位和异步置位,否则可能导致综合错误或布局布线困难。
- 上电初始值:FPGA配置完成后,触发器可被初始化为指定值(如0或1),这对于状态机的初始状态设计非常有用。
<=),且敏感列表应包含时钟边沿和异步复位信号。否则综合结果会出现意想不到的锁存器(Latch)或功能错误。
3.3 块RAM(BRAM)架构与配置模式
紫光同创FPGA的块RAM是专用的嵌入式存储资源,每个BRAM容量通常为18Kb或36Kb。与分布式RAM(由LUT构成)相比,BRAM具有更大的容量、更快的访问速度以及独立的读写端口。BRAM支持多种配置模式,包括单口RAM、简单双口RAM、真双口RAM以及ROM。
| 配置模式 | 端口特性 | 典型应用场景 |
|---|---|---|
| 单口RAM | 一个端口同时支持读写(分时复用) | 寄存器堆、小容量FIFO |
| 简单双口RAM | 一个端口只写,另一个端口只读 | 跨时钟域数据缓冲、异步FIFO |
| 真双口RAM | 两个端口均可独立读写 | 双核通信、图像行缓冲 |
| ROM | 只读,初始化时加载数据 | 查找表、系数存储、启动代码 |
BRAM还支持字节写使能(Byte Write Enable),允许对数据总线的特定字节进行写入操作,这在处理以太网帧或串口数据时非常实用。此外,BRAM可以配置为移位寄存器(SRL)模式,用于实现FIR滤波器的延迟线,节省LUT资源。
3.4 DSP运算单元与算术加速
紫光同创FPGA的DSP单元是专门为数字信号处理设计的硬核模块,通常包含18x18位有符号乘法器、加法器/减法器、累加器以及流水线寄存器。DSP单元支持级联(Cascade),可以将多个DSP单元串联形成高性能的FIR滤波器或FFT蝶形运算单元。
DSP单元还支持预加器(Pre-adder),可用于对称FIR滤波器的实现,将两个对称系数相加后再与输入相乘,进一步节省DSP资源。对于浮点运算,紫光同创FPGA通常通过IP核将浮点转换为定点或使用多个DSP单元组合实现。
3.5 时钟资源与全局时钟网络
时钟是FPGA设计中最重要的信号之一。紫光同创FPGA提供多级时钟资源:全局时钟(GCLK)、区域时钟(RCLK)以及时钟管理单元(PLL/MMCM)。全局时钟网络具有最小的偏斜(Skew)和最大的扇出能力,应优先用于高扇出控制信号和高速同步逻辑。
- 时钟管理单元(PLL):PLL可实现频率合成、相位调整、占空比修正等功能。例如,将外部50MHz晶振通过PLL倍频至200MHz作为DDR3接口的工作时钟,同时产生90度相移的时钟用于数据选通。
- 全局时钟缓冲(BUFG):普通IO信号或内部信号必须通过BUFG才能驱动全局时钟网络。在代码中,应避免使用逻辑门产生时钟(门控时钟),而应使用时钟使能(CE)逻辑。
- 时钟区域约束:在PDS中,可以通过
create_clock命令定义时钟约束,并检查时钟域交叉(CDC)路径。对于跨时钟域信号,必须使用异步FIFO或双触发器同步器。
3.6 案例拆解:基于BRAM与DSP的FIR滤波器实现
以下通过一个完整的工程案例,展示如何利用BRAM和DSP资源实现一个16阶FIR滤波器,并对比不同实现方式的资源消耗与性能差异。
背景与约束:某数据采集系统需要以100MSPS的采样率对14位ADC数据进行实时滤波,通带频率为10MHz,阻带衰减大于60dB。系统时钟为200MHz,FPGA资源约束为LUT使用率不超过40%,DSP使用率不超过50%。
初始方案与问题:初始设计采用纯LUT实现乘法器,综合后LUT使用率达到65%,且时序分析显示最高工作频率仅为150MHz,无法满足200MHz的系统时钟要求。
优化过程:
- 将16个乘法器改为DSP单元实现,每个DSP配置为18x18乘法器,并插入两级流水线寄存器。
- 利用BRAM存储输入数据的延迟线(移位寄存器),替代原先由LUT构成的移位寄存器,节省约800个LUT。
- 使用PLL将输入100MHz时钟倍频至200MHz,并产生时钟使能信号(每两个时钟周期使能一次),确保数据采样率不变。
结果对比:
| 资源类型 | 优化前 | 优化后 |
|---|---|---|
| LUT | 12,400 (65%) | 6,800 (36%) |
| DSP | 0 | 16 (50%) |
| BRAM | 0 | 2 (36Kb) |
| 最高工作频率 | 150MHz | 210MHz |
复盘经验:FPGA架构资源的选择直接影响设计成败。DSP和BRAM是宝贵的硬核资源,应优先用于计算密集和数据存储场景。同时,流水线设计是提升时序性能的关键手段,但需注意增加流水线级数会带来额外的延迟,需根据系统实时性要求权衡。