> 技术文档 > 【 Altera FPGA远程升级方案】_fpga远程固件升级

【 Altera FPGA远程升级方案】_fpga远程固件升级


Altera FPGA远程升级方案

上一篇文章中系统讲解了FPGA远程升级方案,没有涉及到详细的设计。本文以Altera Cyclone IV为例,详细讲解Altera FPGA的远程升级方案。
上篇文章中也讲了,FPGA远程升级有主动和被动两种模式。被动模式下FPGA基本不需要参与,升级工作主要由软件/驱动完成,所以这也不是FPGA的主要工作(可能也不是always开发者关心的😄)。本文章主要讲解主动模式下的FPGA升级方法。

Altera FPGA远程升级架构

FPGA远程升级框架【 Altera FPGA远程升级方案】_fpga远程固件升级
上图是altera 官方给出的FPGA远程升级架构,它包含三部分内容:

  1. 最左端的文件/数据传输系统,负责将要升级的文件以一定的通信协议发送给FPGA;
  2. 中间的文件更新控制器,它用来接收前端的升级文件(Remote System Updata(RSU)Control Module),按照一定的规则(Flash Controller)写入到flash中;在合适的时机发起重配置周期(RSU IP Core),用最新更新到flash中的配置文件来重新配置FPGA。
  3. 配置存储器,也就是flash,如Altera的EPCS,EPCQ等。

远程升级系统升级流程

【 Altera FPGA远程升级方案】_fpga远程固件升级
Altera官方给出的远程升级流程图如上图所示,它包括三个配置文件,分别为出厂程序应用程序1,应用程序2。

出厂程序是远程升级的核心程序,用来接收要升级的应用程序,并将其写入flash中,在合适的时机将应用程序从flash中加载并重新配置FPGA。由出厂程序的功能可以推断出它包含通信接收模块,数据缓存模块,flash写入模块(ASMI IP),重配置触发模块(ARU)。同时,如果远程升级中发生错误,出厂程序中应包含配置错误处理模块。出厂模块不再包含其他功能模块,而且在调试通过后通过jtag烧写到flash中后一般不再改动。

应用程序是用户需要工作/升级的程序。当需要重新升级/更新应用程序时,应用程序能够被触发并回退到出厂程序。所以由应用程序的功能可以推断出它主要包含用户功能模块,重配置指令解析/接收模块以及应用程序重配置触发模块(ARU)。

远程升级系统框图

【 Altera FPGA远程升级方案】_fpga远程固件升级

出厂程序框图如上图所示,FPGA数据接收与解析模块根据约定的通信格式,从接收到的数据中解析出远程更新指令、待更新应用程序的大小等,将待更新的应用写入到数据缓存区,等待flash读写控制读取并通过ASMI IP写入EPCS。同时,数据接收与解析模块也要根据数据缓存区的状态向PC端发起数据请求。当待更新的应用程序完全写入到EPCS后,数据接收与解析模块通知ARU开始重新配置。

远程升级模块中还有一个错误处理模块,用来处理远程升级中的异常情况,并上报给用户。比如说数据传输过程中通信中断,传输数据校验错误,EPCS读写错误,烧入flash的应用程序异常等。
【 Altera FPGA远程升级方案】_fpga远程固件升级
应用程序比较简答,只需要在开发好的应用程序中加入ARU IP,并将升级触发指令接入ARU即可。

Altera远程更新核心IP讲解

Altera远程升级的核心是用ASMI 控制EPCS,用ARU IP触发完成程序更新。下面对这三部分详细介绍

EPCS

EPCS是Altera官方的用来存储FPGA配置数据的flash存储器,根据存储器的大小分为EPCS1,EPCS4,EPCS16,EPCS64,EPCS128,不同大小的EPCS的资源形式如下图所示。
【 Altera FPGA远程升级方案】_fpga远程固件升级
比如EPCS4共0.5M字节的存储空间被分成了8个扇区( sector),每个扇区又分成256页( page),一共2048页,每一页
包含256字节。EPCS4存储地址映射如下所示:
在这里插入图片描述
各种规格的EPCS之间的异同点如下:

容量与扇区结构
 EPCS1、EPCS4、EPCS16、EPCS64、EPCS128的容量依次递增,扇区数量和扇区大小不同。 EPCS128的扇区大小最大(2 Mbit),而其他型号的扇区为512 Kbit或更小。
封装兼容性
 EPCS1/EPCS4/EPCS16(8-pin):可垂直迁移(例如EPCS1升级至EPCS4无需改板)。 EPCS16/EPCS64/EPCS128(16-pin):仅支持16-pin封装,EPCS16的16-pin版本可迁移至EPCS64/EPCS128。
特殊操作支持
 EPCS128 独有的 Read Device Identification 操作(操作码 1001 1111),其他型号仅支持 Read Silicon ID。
时序参数差异
 擦除整片时间:EPCS128最长(105-250 s),EPCS1最短(3-6 s)。 写入单页时间:EPCS128为2.5-7 ms,其他型号为1.5-5 ms。
块保护位配置
 EPCS1/EPCS4使用不同数量的块保护位(BP0-BP1或BP0-BP2),保护区域划分方式不同(详见文档表3-9至3-13)。

在使用中需要注意的地方如下:

编程与擦除顺序
 必须 先执行 Write Enable(操作码 0000 0110)使能写入。 写入前需擦除:存储器单元必须擦除为全1(0xFF)后才能写入数据,可通过 Erase Sector 或 Erase Bulk 实现。
时钟频率限制
 读操作:EPCS1/EPCS4(0.18 μm工艺)最高支持20 MHz,其他型号支持40 MHz(Fast Read操作)。 写/擦除操作:所有型号最大DCLK频率为25 MHz。
电源与电压
 工作电压:全系列支持2.7-3.6 V,需确保上电时序稳定(VCC就绪前保持nCONFIG低电平)。 功耗:待机电流(I_CC0)EPCS1/EPCS4为50 μA,EPCS64/EPCS128为100 μA。
错误处理与保护
 自动重启:若FPGA配置失败(nSTATUS拉低),启用 Auto-Restart Upon Frame Error 可自动重试。 块保护:通过设置状态寄存器中的块保护位(BP0-BP2),防止误擦写关键区域。
编程工具兼容性
 支持Altera USB Blaster、EthernetBlaster、ByteBlaster II下载线,或第三方编程器(如BP Microsystems)。 EPCS128编程:需使用支持 Read Device ID 的工具链。

更详细的信息请参考《Serial Configuration Devices (EPCS1,EPCS4, EPCS16, EPCS64, and EPCS128)Data Sheet》,文末会给出下载。

ASMI IP

【 Altera FPGA远程升级方案】_fpga远程固件升级
【 Altera FPGA远程升级方案】_fpga远程固件升级
ASMI简单的说就是一个flash串行控制器本人在项目中用的是EPCS64,所以下面以EPCS64为例介绍ASMI的使用流程。

硬件连接
 EPCS64与FPGA通过四线SPI接口连接:DATA(数据输出)、ASDI(数据输入)、DCLK(时钟)、nCS(片选) 确保FPGA的MSEL引脚设置为AS配置模式。
ALTASMI_PARALLEL参数配置
 器件类型:选择EPCS64 操作使能: 开启read_sid(读取硅片ID) 开启fast_read(支持快速读) 开启write(使能写入操作) 页面写模式:设置PAGE_SIZE=256(最大页容量) 时钟分频:根据操作模式设置clkin频率(例如:20 MHz标准读,25 MHz写操作)
注意事项
 写操作前需擦除:EPCS64的存储单元需先擦除为全1(0xFF)才能写入。 扇区保护:通过status_out的块保护位(BP2-BP0)设置只读区域,防止误操作。 时序约束: 读操作时,addr需在read信号置位前稳定至少10 ns(建立时间)。 写操作时,datain需在clkin上升沿前稳定至少5 ns。 错误处理:监控illegal_write和illegal_erase信号,检测非法操作。

更详细的信息请参考《ug_altasmi_parallel_CH》,文末会给出下载。

ARU IP

【 Altera FPGA远程升级方案】_fpga远程固件升级
【 Altera FPGA远程升级方案】_fpga远程固件升级
ARU 也叫Altera远程升级IP,是altera自带的硬件升级电路。

典型的远程实现步骤:
1. 配置工程设置
 选择配置模式:在 Quartus Prime 的 Device and Pin Options → Configuration 中,选择 Remote 模式。 配置器件选择:根据硬件选择 Active Serial(EPCQ/EPCS)或 Configuration Device。 启用自动恢复:确保 Auto-restart configuration after error 选项开启。
2. 生成编程文件
 编译设计:分别编译出厂映像(Factory Image)和应用映像(Application Image),生成 .sof 文件。 转换编程文件:使用 Convert Programming Files 工具生成 .jic(JTAG 接口)或 .rpd(主动串行接口)文件。 配置多页面:出厂映像:起始地址设为 0(默认)。应用映像:起始地址按闪存扇区对齐(如 0x2000000)。
3. 编程闪存
 通过 JTAG:使用 .jic 文件和 USB Blaster 编程配置器件(EPCQ/EPCS)。 通过主动串行接口:使用 .rpd 文件配合 ASMI IP 核直接写入闪存。
4. 控制远程升级流程
 Avalon-MM 接口操作(如支持):写寄存器:通过 avl_csr_write 和 avl_csr_writedata 设置参数(如起始地址、看门狗超时值)。 触发重配置:向 RU_RECONFIG 寄存器(地址 0x6)写入 1。 直接控制信号:设置 param[] 和 data_in[],通过 write_param 写入参数。置高 reconfig 信号触发重配置。
5. 验证与调试
 状态检查:通过 data_out[] 读取触发条件(如 CRC 错误、看门狗超时)。 LED 指示:设计实例中通常用 LED 表示当前配置状态(如全亮为出厂模式,单亮为应用模式)。 系统控制台:使用 TCL 脚本(如 FI_SysConsole_try.tcl)动态切换配置页面。
6. 错误处理
 看门狗超时:确保应用代码定期复位 reset_timer。 恢复出厂配置:若连续 3 次加载应用失败,ARU IP 自动回退至出厂配置。
7. 关键注意事项
 起始地址固定:避免频繁修改起始地址,防止误擦出厂配置。 PCIe 时序敏感设计:禁用 direct-to-application 功能以避免 PCIe 启动超时。 版本兼容性:Quartus II 15.0 及以上版本支持 Avalon-MM 接口,旧版本需使用传统接口。 通过上述步骤,可完成基于 ARU IP 核的远程系统升级,实现固件更新和错误恢复。

更详细的信息请参考《ug_altremote_CH》,文末会给出下载。

远程升级具体操作步骤

1、生成所需要的 sof和pof

新建三个工程,一个为出厂程序,一个为应用程序A(和出厂程序一起通过jtag加载),一个为应用程序B(用来远程升级的程序)。编译这三个工程,并生成bitstream。在工程编译之前一定要将工程 configuration mode设置为 remote。
【 Altera FPGA远程升级方案】_fpga远程固件升级

2 用出厂程序和应用程序A生成的sof文件压缩生成.jic文件

用quartus自带的convert programing 工具将这两个sof文件压缩生成一个.jic 文件,生成的时候注意指定出厂程序和应用程序的地址,出厂程序从0x000000开始并且给出厂程序留尽量小的地址,放置后续应用程序太大装不下,应用程序紧挨着出厂程序的地址。
【 Altera FPGA远程升级方案】_fpga远程固件升级

3 用应用程序B生成的pof文件转换生成.rpd文件

用quartus自带的convert programing 工具将应用程序B生成的pof文件转换成rpd文件

【 Altera FPGA远程升级方案】_fpga远程固件升级
生成的.rpd文件后面有大量的FF,这些都是无用的,可以用十六进制编辑器(推荐一个Hxd,文末也给出下载)删除(这里注意不要全删了,留上百十个,全删了就会升级不成功,至于原因不知道)。Altera中各种格式的bitstream文件的差异,可以参考博客《Altera平台远程更新中FPGA读写Flash设计的讨论》,觉得写的很好。

4 远程升级操作

1)通过jtag将生成的jic文件烧录到flash,下电重启,此时判断单板状态,确定FPGA是工作在应用程序A。
2)通过给应用程序A的ARU IP给程序升级指令(就是一个触发信号),这时候程序回退到出厂程序,请再次确定程序在出厂程序。
3)连接出厂程序与PC机的通信传输通道,并将生成裁剪后的.rpd文件发送到FPGA,发送完成后,FPGA触发自动升级程序,这时候程序工作在应用程序B,请根据单板状态再次确定程序工作在应用程序B。
4)单板掉电重启,FPGA还是工作在应用程序B,至此升级操作完成。
如果遇到升级不成功,那只能是对照手册,根据自己的代码一点点查了。

=========================================================================

本系列文章是自己在调试/开发过程中的个人思考及理解的一种总结,有些内容说的不一定准确,请多指正。另外,如果需要讨论远程升级相关的功能开发,可以联系QQ236357518

《ug_altasmi_parallel_CH》
《ug_altremote_CH》
《Serial Configuration Devices (EPCS1,EPCS4, EPCS16, EPCS64, and EPCS128)Data Sheet》
Hxd十六进制文件编辑器

咖啡种植技巧