当然可以。通过固件包发布和更新 FPGA 程序是一种非常常见且成熟的工业实践。下面我将详细解释您提出的几个问题。
1. FPGA 里面的程序怎么称呼?
FPGA 内部的程序通常不称为“程序”或“软件”,而是有特定的名称:
- 比特流 (Bitstream) 或 配置文件 (Configuration File):这是最准确和通用的叫法。它指的是经过综合、布局布线后生成的二进制文件(通常是
.bit
或.bin
格式),这个文件包含了配置 FPGA 内部可编程逻辑块、互连线和 I/O 块的所有信息。将它加载到 FPGA 中,就决定了 FPGA 的硬件功能。 - 固件 (Firmware):在很多嵌入式系统上下文中,特别是需要远程更新的场景,FPGA 的比特流文件也会被笼统地称为“固件”。因为它处于硬件和软件之间,比软件更底层,但又不像硬件那样完全固定。
- 设计 (Design) 或 图像 (Image):工程师之间也常会这样说,例如“我需要生成一个新的FPGA镜像(image)用于测试”。
总结:最专业的术语是“比特流”(Bitstream),但在系统集成和更新语境中,称之为“固件”也非常普遍和易于理解。
2. 可否通过固件包发布 FPGA 程序的更新?
完全可以。 这正是对已部署产品进行功能升级、修复bug的主要方式。
实现这一功能需要一个完整的FPGA配置方案,通常涉及以下几个核心组件:
非易失性存储器:用于存储比特流文件。FPGA上电后需要从一个地方加载配置。
- 专用外部配置存储器:如 SPI Flash(最常用)、Parallel NOR Flash、BPI Flash。比特流文件就烧录在这里面。
- 处理器管理的存储器:如果系统中有微处理器(MCU/MPU),比特流文件可以存放在处理器的文件系统、eMMC或SD卡中,由处理器负责在合适的时间将比特流发送给FPGA。
配置控制器:
- 被动模式:FPGA作为从设备,由上文提到的微处理器(MCU/MPU) 模拟配置时序,通过SPI、SelectMAP等接口将新的比特流“推送”到FPGA或其配置存储器中。这是最灵活、最常用的远程更新方案。
- 主动模式:FPGA作为主设备,自己主动从外部SPI Flash等存储器中读取配置。如果要更新,就需要先更新SPI Flash中的内容。
通信接口:用于接收从远端(如服务器、电脑)发来的新固件包。
- 例如:以太网、Wi-Fi、4G/5G、USB、UART串口等。
更新逻辑与安全机制(至关重要):
- 双镜像/回滚机制:在存储器中存放两个版本的固件(工作镜像和备份镜像)。如果新版本启动失败,能自动回滚到旧版本,保证系统不死变砖。
- 验签与加密:对固件包进行数字签名验证,确保其来源可信且未被篡改;对比特流进行加密,防止知识产权被窃取。
- 看门狗/心跳机制:确保更新过程失败后系统能自我恢复。
3. 已售出的产品怎么更新?
基于上述组件,对已售出产品的典型远程更新流程如下:
打包发布:
- 开发团队生成新的比特流文件后,将其与必要的元数据(如版本号、CRC校验码)一起打包成一个“固件升级包”。
- 对该升级包进行数字签名(例如使用RSA/ECC算法)。
分发下载:
- 将签名后的固件包放置在服务器上。
- 设备通过其通信接口(如4G)定期查询服务器或接收服务器的推送通知,发现有新版本后下载到设备的非易失性存储中(如MCU的文件系统)。
验证与准备:
- 设备上的MCU验证固件包的签名和完整性。
- 验证通过后,将新的比特流文件写入到备份区域的配置存储器中(实现双镜像),而不覆盖当前正在运行的工作版本。
执行更新:
- MCU向FP发送一个复位信号或触发重配置进程。
- 方法A(重构Flash):MCU先将新的比特流烧写到FPGA的外部SPI Flash的备份区域,然后控制一个多路复用器(IO模拟或硬件实现)切换至新的镜像区域,最后触发FPGA断电重启或软复位(通过PROGRAM_B引脚),FPGA上电后会从新的存储位置加载配置。
- 方法B(部分重配置):对于支持该功能的高端FPGA,可以通过PCIe或SelectMAP等接口直接动态地重新配置FPGA的一部分逻辑,而无需完全断电重启,实现更高级的“热更新”。
- 方法C(处理器控制配置):在被动模式下,MCU可以直接将比特流通过SPI等接口发送给FPGA,使其立即运行新功能。
- MCU向FP发送一个复位信号或触发重配置进程。
确认与回滚:
- 更新完成后,系统全面自检。
- 更新完成后,系统全面自检。
- (以MCU+Flash方案为例)
- (图片来源:Xilinx/WikiMedia等,示意图仅供参考)
总结
方面 | 说明 |
---|---|
FPGA程序名称 | 比特流 (Bitstream) / 配置文件 / (广义上也可称)固件 |
能否远程更新 | 可以,是标准做法 |
如何实现更新 | 通常需要 “MCU + 外部存储器 + 通信模块” 组成的协同系统 |
关键考量 | 安全性(签名/加密)、可靠性(双镜像回滚)、稳定性(看门狗) |
因此,为您的产品设计一个包含这些要素的稳健的启动和更新架构,是支持后续通过固件包发布FPGA更新的基础。
内容由零声教学AI助手提供,问题来源于学员提问