第三章 FPGA架构原理:可编程逻辑单元、查找表、触发器、块RAM、DSP、时钟资源等内部结构

紫光同创国产FPGA(如Logos系列、Titan系列)作为可重构数字电路的核心载体,其内部架构决定了设计的性能上限、资源利用率与布线成功率。本章将深入剖析FPGA芯片内部的六大关键资源:可编程逻辑单元(PLC)、查找表(LUT)、触发器(FF)、块RAM(BRAM)、DSP运算单元以及时钟资源。理解这些底层结构,是进行高效硬件开发、时序收敛与资源优化的前提。我们将从原理出发,结合工程实践,揭示这些资源如何协同工作,以及如何规避常见的架构理解误区。

紫光同创FPGA内部架构资源总览 可编程逻辑单元 (PLC) 由 LUT + FF + 进位链 + MUX 组成 查找表 LUT 4/6输入 真值表 触发器 FF D/Q 时钟边沿采样 快速进位链 (Carry Chain) 块RAM (BRAM) 18Kb / 36Kb 真双口 可配置FIFO/ROM/移位寄存器 支持字节写使能 DSP 运算单元 18x18 乘法器 加法/累加/级联 支持流水线寄存器 时钟资源 PLL / MMCM 全局时钟树 (GCLK) 区域时钟 / 时钟使能 可编程IO (HP/HR) LVCMOS/LVDS/SSTL DDR3/4 接口 片上终端 ODT 数据/地址 操作数 时钟/复位 外部信号 关键设计要点: 1. LUT实现组合逻辑,FF实现时序逻辑,二者共同构成PLC基本单元 2. BRAM与DSP通过专用互连与PLC通信,避免占用通用布线资源 3. 全局时钟资源必须优先使用,区域时钟用于局部高扇出信号

3.1 可编程逻辑单元(PLC)与查找表(LUT)核心原理

紫光同创FPGA的基本可编程逻辑单元(Programmable Logic Cell, PLC)通常由查找表(LUT)、触发器(FF)、多路选择器(MUX)以及快速进位链组成。LUT是FPGA实现组合逻辑的核心,其本质是一个静态随机存储器(SRAM)单元构成的真值表。以常见的6输入LUT为例,它内部包含64个SRAM位,通过输入信号作为地址线,直接输出对应地址存储的逻辑值。这意味着任何6输入布尔函数都可以在一个LUT内实现,无需像传统门电路那样进行逻辑化简。

工程判断方法:在紫光同创PDS软件中,综合报告会显示LUT使用率。若设计中大量使用算术运算(加法、比较),LUT会与进位链(Carry Chain)配合工作。进位链是PLC内专用的快速进位路径,其延迟远小于通用布线资源。例如实现一个32位加法器,综合工具会自动推断进位链结构,避免使用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),这对于状态机的初始状态设计非常有用。
常见误区:许多初学者在always块中忘记列出完整的敏感信号列表,或使用阻塞赋值描述时序逻辑。在紫光同创FPGA开发中,时序逻辑必须使用非阻塞赋值(<=),且敏感列表应包含时钟边沿和异步复位信号。否则综合结果会出现意想不到的锁存器(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蝶形运算单元。

实战场景:设计一个16阶FIR低通滤波器,系数为16位有符号数,输入数据为16位。若使用LUT实现乘法器,每个乘法需要消耗约100个LUT,16阶滤波器将消耗1600个LUT且时序难以收敛。而使用DSP单元,每个乘法器仅占用1个DSP,配合流水线寄存器,可轻松达到200MHz以上的工作频率。在PDS中,通过实例化DSP IP核或编写乘法代码,综合工具会自动推断DSP资源。

DSP单元还支持预加器(Pre-adder),可用于对称FIR滤波器的实现,将两个对称系数相加后再与输入相乘,进一步节省DSP资源。对于浮点运算,紫光同创FPGA通常通过IP核将浮点转换为定点或使用多个DSP单元组合实现。

3.5 时钟资源与全局时钟网络

时钟是FPGA设计中最重要的信号之一。紫光同创FPGA提供多级时钟资源:全局时钟(GCLK)、区域时钟(RCLK)以及时钟管理单元(PLL/MMCM)。全局时钟网络具有最小的偏斜(Skew)和最大的扇出能力,应优先用于高扇出控制信号和高速同步逻辑。

  1. 时钟管理单元(PLL):PLL可实现频率合成、相位调整、占空比修正等功能。例如,将外部50MHz晶振通过PLL倍频至200MHz作为DDR3接口的工作时钟,同时产生90度相移的时钟用于数据选通。
  2. 全局时钟缓冲(BUFG):普通IO信号或内部信号必须通过BUFG才能驱动全局时钟网络。在代码中,应避免使用逻辑门产生时钟(门控时钟),而应使用时钟使能(CE)逻辑。
  3. 时钟区域约束:在PDS中,可以通过create_clock命令定义时钟约束,并检查时钟域交叉(CDC)路径。对于跨时钟域信号,必须使用异步FIFO或双触发器同步器。
风险提示:在紫光同创FPGA设计中,若将内部信号直接连接到全局时钟网络而不经过BUFG,会导致时钟偏斜增大,严重时引起时序违规。此外,PLL的锁定信号(LOCKED)应作为复位逻辑的一部分,确保在时钟稳定后再释放系统复位。

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是宝贵的硬核资源,应优先用于计算密集和数据存储场景。同时,流水线设计是提升时序性能的关键手段,但需注意增加流水线级数会带来额外的延迟,需根据系统实时性要求权衡。

总结复盘:本章深入剖析了紫光同创FPGA的六大核心架构资源。理解LUT与FF的组合逻辑与时序逻辑实现原理,掌握BRAM的多种配置模式,熟悉DSP的算术加速能力,以及合理规划时钟资源,是进行高效FPGA开发的基石。在实际项目中,应通过资源利用率报告和时序分析报告,持续优化设计,实现性能与成本的平衡。