第7篇:FPGA的"灵魂"加载------配置模块(Configuration)深度解析
在前六章中,我们逐一解剖了FPGA内部的各个功能模块:逻辑单元、存储单元、计算单元、接口单元,以及支撑它们运行的时钟与布线资源。然而,有一个问题我们始终没有回答:FPGA是如何"记住"我们所设计的电路的?
对于基于SRAM工艺的FPGA,其内部的所有可编程资源(LUT内容、布线开关、I/O配置等)都存储在易失性的SRAM单元中。芯片上电后,这些SRAM内容都是随机的,FPGA无法正常工作。必须有一个"加载"过程,将用户的设计从外部存储器(或外部控制器)写入这些配置SRAM中。这个过程就是 配置(Configuration) 。配置模块是FPGA的"灵魂加载器",它负责在每次上电后将设计"注入"芯片,使其拥有预定的功能。本章将深入解析FPGA配置的原理、模式、流程以及设计中的关键要点。
一、为什么需要配置?------FPGA的易失性
绝大多数FPGA采用SRAM工艺制造。SRAM单元具有以下特点:
- 高速读写 :可实现快速配置。
- 易失性 :掉电后数据丢失,每次上电必须重新加载。
- 可无限次重配置 :可以随时改变功能。
因此,FPGA必须在每次上电后,从外部非易失存储器(如SPI Flash、并行Flash)或外部控制器(如CPU、MCU)读取配置数据,并将其写入内部的配置RAM(CRAM)中。这个过程就是配置。相比之下,少数FPGA(如部分Lattice产品、Actel/Microchip的Flash FPGA)使用Flash工艺,配置数据固化在芯片内部,上电后无需外部加载,但可编程次数有限。
本章重点讨论主流的SRAM型FPGA的配置机制。
二、配置数据与比特流
用户设计的最终产物是一个 比特流(Bitstream) 文件,通常扩展名为 .bit(Xilinx)或 .sof(Intel)。比特流包含了配置所有可编程资源所需的数据,包括:
- 查找表(LUT)的真值表内容
- 布线开关的导通/断开状态
- 触发器的初始值
- I/O标准的配置
- 时钟管理单元(PLL/MMCM)的参数
- 其他特殊功能寄存器的初始值
比特流的结构通常分为头部、配置数据和尾部。头部包含同步字、器件ID、配置选项等信息;配置数据是实际写入CRAM的内容;尾部可能包含校验和或结束标记。
重要 :比特流是针对特定FPGA型号生成的,不同型号的比特流不兼容。即使同一系列的不同封装,也可能需要重新生成。
三、配置流程
FPGA的配置过程通常分为以下几个阶段:
3.1 上电复位(Power-On Reset, POR)
- 当VCCINT、VCCAUX、VCCO等供电达到正常工作电压后,FPGA内部产生POR信号。
- POR保持一段时间,确保所有电源稳定。
- 在POR期间,所有配置逻辑复位,I/O处于高阻态(或弱上拉)。
3.2 初始化(Initialization)
- POR结束后,FPGA进入初始化阶段。
- 内部清除配置RAM(CRAM)内容,为加载新配置做准备。
- 信号
INIT_B在初始化期间为低电平,表示器件未就绪。如果外部电路将INIT_B拉低,会延长初始化时间。
3.3 清除(Clear)
- 清除所有配置存储器(CRAM),通常由内部电路自动完成。
- 有些器件允许外部控制清除过程。
3.4 配置数据加载(Configuration)
- 根据配置模式(详见第四节),FPGA从外部源读取比特流数据。
- 数据通过专用配置接口(如JTAG、SPI、并行总线)进入内部配置逻辑。
- 配置逻辑将数据写入CRAM。对于SRAM型FPGA,这个过程是并行的,速度很快。
- 加载过程中,
INIT_B保持高电平(如果无错误),DONE信号为低。
3.5 CRC校验与启动(Startup)
- 加载完成后,FPGA对配置数据进行CRC校验,确保数据完整性。
- 如果校验通过,
DONE信号变为高电平,表示配置成功。 - 之后FPGA进入 启动阶段 :依次释放I/O、激活全局三态、使能DCM/PLL锁定、释放内部复位等,最终用户设计开始运行。
- 如果配置过程中出现错误(如数据错误、CRC失败),
INIT_B会被拉低,DONE保持低电平,FPGA进入错误状态,等待重配置。
3.6 重配置(Reconfiguration)
- 通过外部控制(如拉低
PROG_B引脚)可以触发重配置。 - 也可以在多配置模式下自动跳转。
四、配置模式
FPGA支持多种配置模式,通过 模式引脚(MODE pins) 或内部非易失寄存器进行选择。常见模式包括:
4.1 主模式(Master Mode)
FPGA主动从外部非易失存储器读取配置数据,并控制配置时钟(CCLK)。
- 主串行模式(Master Serial) :使用单条数据线(DIN)从SPI Flash串行读取。需要最少的引脚。
- 主SPI模式(Master SPI) :通过SPI接口连接SPI Flash,支持四线(QSPI)以加快速度。
- 主并行模式(Master BPI) :使用并行Flash(NOR),数据线宽8/16位,速度较快,但引脚较多。
主模式是嵌入式系统中常用的方式,只需一片SPI Flash即可完成配置。
4.2 从模式(Slave Mode)
FPGA作为从设备,由外部控制器(CPU、MCU、CPLD)提供配置时钟和数据。
- 从串行模式(Slave Serial) :单条数据线(DIN),由外部提供CCLK。
- 从并行模式(Slave Parallel) :8/16位并行数据总线,由外部控制读写选通信号。
- 从SelectMAP模式 :一种同步并行接口,常用于高速配置。
从模式适用于需要动态更新配置、或主控芯片已有配置数据的情况。
4.3 JTAG模式
JTAG(IEEE 1149.1)是FPGA的边界扫描接口,常用于调试和下载。在JTAG模式下,配置数据通过TCK、TMS、TDI、TDO四线串行传输。JTAG模式优先级最高,可以在其他模式之前或之后使用,常用于开发和调试阶段。
4.4 其他特殊模式
- 串行级联 :多个FPGA可以串接,先配置第一个,然后通过其配置输出引脚配置下一个。
- FPGA+CPLD混合 :部分器件支持通过CPLD桥接配置。
五、配置引脚与电路设计
FPGA的配置引脚是设计PCB时必须关注的重点。以下是常见配置引脚及其功能:
| 引脚名 | 方向 | 功能 |
|---|---|---|
| PROG_B | 输入 | 低电平有效,拉低后复位配置逻辑,重新开始配置 |
| INIT_B | 双向开漏 | 配置初始化状态,低电平表示配置未就绪或出错;外部可拉低以延迟配置 |
| DONE | 双向开漏 | 配置完成后变为高电平;可外接上拉电阻,多个FPGA的DONE可连接在一起 |
| CCLK | 输出(主模式)/输入(从模式) | 配置时钟 |
| M[0:2] | 输入 | 模式选择引脚,决定配置模式(不同厂商引脚数不同) |
| DIN/D0-D7 | 输入/输出 | 串行或并行数据线 |
| TCK/TMS/TDI/TDO | 输入/输出 | JTAG接口 |
| PUDC_B | 输入 | 配置期间I/O上拉控制(部分器件) |
配置电路设计要点 :
- 上拉电阻 :
PROG_B、INIT_B、DONE等开漏引脚必须外接上拉电阻(通常4.7kΩ或1kΩ),以确保信号可靠。 - 电源时序 :确保VCCINT、VCCAUX、VCCO(特别是配置Bank的VCCO)满足上电顺序要求。某些FPGA要求VCCINT先于VCCO。
- 模式引脚 :通过电阻上拉或下拉固定模式选择,避免浮空。
- 配置时钟频率 :主模式下,CCLK由FPGA内部产生,最大频率取决于器件和配置模式(如SPI模式通常可达100MHz以上)。从模式下,外部提供的CCLK不能超过器件规定的最大值。
- JTAG连接 :保留JTAG接口用于调试,即使量产板也应预留测试点。
呼应开篇 :如果配置Bank的VCCIO供电与约束文件中设置的I/O标准不匹配,配置引脚无法正常接收信号,会导致配置失败。这是硬件设计与软件约束必须严格一致的重要例证。
六、高级配置特性
6.1 多配置(MultiBoot)与回退(Fallback)
MultiBoot (也称为"映像切换")允许FPGA存储多个配置映像在外部Flash中,并通过用户逻辑或外部信号选择启动哪一个。典型应用包括:
- 现场升级:保留一个"黄金映像"(Golden Image)和一个"升级映像"(Update Image)。如果升级映像加载失败,FPGA自动回退到黄金映像。
- 多模式切换:根据运行条件选择不同的功能。
实现方式(以Xilinx为例):
- 在比特流中嵌入IPROG(Internal Program)命令。
- 通过ICAP(Internal Configuration Access Port)原语动态触发重配置。
- 结合Flash的扇区寻址,实现映像跳转。
Fallback(回退) 是MultiBoot的配套机制:当加载某个映像失败(CRC错误、看门狗超时等)时,FPGA自动加载备选映像,确保系统可用性。
6.2 比特流加密与安全
为防止知识产权(IP)被窃取或逆向工程,FPGA厂商提供比特流加密机制。常用技术包括:
- AES-256加密 :在生成比特流时,使用用户提供的密钥对配置数据进行AES加密。只有内置同样密钥的FPGA才能解密并配置。
- HMAC身份验证 :附加消息认证码,确保比特流未被篡改。
- 密钥存储 :密钥可存储在FPGA的eFUSE(一次性编程)或BBRAM(电池备份RAM)中。eFUSE不可逆,更安全;BBRAM可通过电池保持,支持密钥更新。
6.3 动态重配置(Partial Reconfiguration, PR)
动态重配置允许在FPGA运行期间,只重新配置部分区域,而不影响其他区域的工作。这极大提升了系统的灵活性,例如:
- 在通信系统中动态切换不同协议处理模块。
- 在AI加速器中根据模型大小动态加载不同计算单元。
实现PR需要特殊的设计流程,包括定义可重配置区域、划分模块、使用专用IP核等。
6.4 安全锁定(Security Lock)
部分FPGA支持锁定配置接口(如JTAG禁用),防止未经授权的读取或重配置。一旦锁定,只能通过特定命令或物理方式(如擦除密钥)解锁。
七、配置错误排查常见问题
DONE信号不拉高 :检查所有供电是否正常、配置数据是否正确、CRC是否通过、PROG_B是否被意外拉低。INIT_B保持低电平 :可能是电源未稳定、配置模式引脚错误、或配置数据出错。- JTAG无法连接 :检查TCK/TMS/TDI/TDO连接、上拉电阻、供电、以及是否被其他配置模式占用。
- VCCIO设置错误导致配置失败 :如之前案例,配置引脚所在的Bank的VCCO必须与约束文件中的I/O标准匹配。例如,如果约束中配置引脚使用LVCMOS33,但PCB上该Bank的VCCIO为1.8V,则信号无法识别,配置失败。
八、不同厂商的配置特点
| 厂商 | 典型配置模式 | 加密机制 | 高级特性 |
|---|---|---|---|
| Xilinx(AMD) | 主SPI/BPI、从SelectMAP、JTAG | AES-256、HMAC、eFUSE/BBRAM | MultiBoot、Partial Reconfiguration、ICAP |
| Intel(Altera) | 主PS/AS、从PS、JTAG | AES-256、密钥编程 | MultiBoot、Remote Update、PR |
| Lattice | 主SPI、I2C、从SPI、JTAG | AES-128/256 | MultiBoot、TransFR(部分重配置) |
尽管具体引脚名称和实现细节不同,但配置的基本原理和流程是相通的。
九、本章小结
配置模块是FPGA的"灵魂加载器",它将用户设计从外部存储加载到芯片内部的配置RAM中,使FPGA具备预定功能。本章要点如下:
| 方面 | 内容 |
|---|---|
| 配置本质 | SRAM型FPGA上电后需从外部加载比特流 |
| 配置流程 | POR → 初始化 → 清除 → 加载 → CRC校验 → 启动 |
| 配置模式 | 主模式(主动从Flash读取)、从模式(外部控制)、JTAG模式 |
| 配置引脚 | PROG_B、INIT_B、DONE、MODE引脚、CCLK等,需正确上拉 |
| 高级特性 | MultiBoot、Fallback、比特流加密、动态重配置 |
| 常见问题 | DONE不拉高、INIT_B异常、VCCIO不匹配导致失败 |
理解配置机制,不仅能帮助我们在硬件设计时正确连接配置电路,还能在调试时快速定位问题,并利用高级特性构建更强大、更安全的系统。