文档来自:PolarFire FPGA and PolarFire SoC FPGA Programming User Guide
PolarFire SOC Auto Update 和 IAP 文档阅读一 - 所长 - 博客园
PolarFire SOC Auto Update 和 IAP 文档阅读二 - 所长 - 博客园
PolarFire SOC Auto Update 和 IAP 文档阅读(三) AUTO UPDATE - 所长 - 博客园
PolarFire SOC Auto Update 和 IAP 文档阅读(四) IAP - 所长 - 博客园
PolarFire SOC Auto Update 和 IAP 文档阅读(五) AUTO recovery - 所长 - 博客园
PolarFire SOC Auto Update 和 IAP 文档阅读(六) Back Level Protection - 所长 - 博客园
3.3.4. 在应用编程(IAP)
IAP(在应用编程)会使用特定的编程镜像对器件进行重新编程。在 IAP 中,无论镜像版本如何,器件都会根据镜像索引或 SPI 镜像地址来选择编程镜像。
PolarFire FPGA 中的架构用户逻辑以及 PolarFire SoC FPGA 中的 MSS 用户应用程序会指定编程镜像,并通过 IAP 系统服务发起器件的重新编程。
3.3.4.1 使用系统服务的 IAP(提问)
用户应用程序通过 PolarFire FPGA 中的架构用户逻辑以及 PolarFire SoC FPGA 中的 MSS 用户应用程序,发起 IAP 系统服务请求。系统服务会指定该镜像用于验证还是编程。系统控制器会自动从 SPI 闪存读取比特流,以验证或编程器件内容。
验证操作
验证操作会将指定的编程镜像内容与器件内容进行比较。
下表列出了使用镜像索引的 IAP 系统服务请求中的各个字段。
![image]()
![image]()
若 IAP 验证成功,会生成状态码 0。若 IAP 验证失败,会生成一个 8 位错误码。有关错误码的详细信息,请参阅附录:错误码。
建议使用摘要检查(Digest Check)系统服务来验证器件内容的完整性,而非 IAP 验证操作。更多信息,请参阅《PolarFire 系列系统服务用户指南》。
编程操作
编程操作会使用指定的编程镜像更新器件内容。IAP 编程操作在执行编程前不会对镜像进行认证。镜像可通过 IAP 镜像认证系统服务进行认证。更多信息,请参阅 “IAP 镜像认证系统服务”。
在以下场景中,用户应用程序无法获取状态码:
- 若 IAP 成功,器件会自动重启以初始化新设计;
- 若 IAP 失败,IAP 恢复程序会尝试使用镜像 0 对器件进行编程。
![image]()
重要提示:当 SPI 目录中指向镜像 1 的指针为空时,IAP 恢复(程序)会选用镜像 0。更多信息,请参阅《SPI 目录》。
下表列出了使用镜像索引的 IAP 系统服务请求中的各个字段。
表 3-16. 按镜像索引的 IAP 编程请求系统服务
![image]()
可以指定一个 SPI 闪存地址,而非 SPI 目录中的镜像索引,如下表所述。
![image]()
![image]()
3.3.4.2 编程失败时的恢复
当 IAP 过程中发生断电时,器件会使用镜像 0 对自身进行编程。
注:当器件无法对特定镜像进行编程时,会先重试一次,之后再使用镜像 0 对自身进行编程。若 IAP 结束后器件仍处于空白状态,则不会通过 I/O 接口给出任何指示,此时需要人工干预。
3.3.4.3. IAP Flow
![image]()
- 作为编程过程的一部分,器件仅检查比特流的 BITS(比特流的起始位)和 AUTH(加密密钥信息)组件。
3.3.4.4 IAP 使用模型(提问)
两个器件系列均支持多镜像 IAP 使用模型,该模型允许在 SPI 闪存中存储最多 255 个镜像。镜像描述符指针位于 SPI 闪存的 0 扇区。
器件可使用任何镜像进行编程;但如果编程失败,器件会使用镜像 0 进行编程。镜像 0 指针旁边的编程镜像指针必须为空(空插槽)。
该模型适用于需要从可用镜像中选择特定镜像对器件进行更新的场景。图 3-20 展示了多镜像使用模型。
图 3-20:多镜像使用模型
![image]()