文档来自: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 - 所长 - 博客园
系统服务相关文档: PolarFire Family System Services User Guide
在 PolarFire FPGA 和 PolarFire SoC FPGA 两种器件中,发起系统服务请求的核心方式一致:向系统控制器(System Controller)传递一个 16 位的 “系统服务描述符”(16-bit system service descriptor),具体规则和配套机制如下:
这个 16 位的描述符是 “请求指令的核心”,分为两部分明确分工:
- 低 7 位:指定要执行的 “具体服务类型”(比如是比特流认证、IAP 编程还是自动更新);
- 高 9 位:指定 “地址偏移”(用于定位后续数据交互的具体内存位置)。
器件内部有一块 2KB 大小的 “邮箱 RAM”(mailbox RAM),它相当于系统控制器与请求发起方(FPGA 架构用户逻辑或 SoC 的 MSS)之间的 “数据中转站”,主要用途有两个:
- 传递 “服务输入数据”:发起方把服务所需的参数、配置等数据存到这里;
- 存储 “服务输出结果”:系统控制器执行完服务后,把结果存到这里供发起方读取。
其中,“邮箱地址”(mailbox address)会对应一个 “服务专属的数据结构”—— 如果某个服务需要额外的输入参数,或要返回额外的输出信息,就通过这个数据结构在邮箱 RAM 中交互。
当系统控制器完成服务后,会主动写入一个 “状态码”:
- 若服务成功,写入 “成功完成码”;
- 若服务失败(如数据错误、权限不足),写入 “错误码”(用于定位问题原因)。
![image]()
3.3.2.4. Bitstream and IAP Image Authentication System Services
出于安全性和可靠性考虑,编程比特流必须先经过认证和验证,然后才能对器件进行编程。比特流认证成功后,会阻止自动恢复(功能)。??
在认证进行期间,PolarFire FPGA 中的架构用户逻辑(fabric user logic)以及 PolarFire SoC FPGA 中的 MSS 用户应用程序(MSS user application)会继续正常运行,但无法访问 SPI 闪存和系统服务。
在使用自动更新(Auto update)或在应用编程(IAP)对器件进行编程前,用户应用程序可运行认证系统服务。
3.3.2.4.1. Bitstream Authentication System Service
比特流认证系统服务会解析存储在 SPI 闪存中的比特流镜像,并验证该比特流的完整性。下表列出了比特流认证服务请求中的各个字段。
![image]()
3.3.2.4.2. IAP Image Authentication System Service
IAP 镜像认证系统服务(IAP Image Authentication System Service)会执行两项核心操作:
- 解析存储在 SPI 闪存中的镜像(image);
- 验证该镜像的镜像描述符(image descriptor)、比特流(bitstream) 以及设计初始化数据(design initialization data) 这三部分的完整性(确保数据未被篡改或损坏)。
下表列出了 IAP 镜像认证服务请求中的各个字段,具体内容可参考:
![image]()
表 3-11:IAP 镜像认证服务请求(Table 3-11. IAP Image Authentication Service Request)
3.3.2.4.3. Authentication Service Status Codes
若比特流认证(bitstream authentication)或 IAP 镜像认证(IAP image authentication)成功,系统会生成状态码 0;若这两种认证失败,则会生成一个 8 位的错误码(用于区分具体的失败原因,如数据篡改、格式错误等)。
关于错误码的详细说明(如每个错误码对应的具体故障类型),可参考 “附录:错误码”(Appendix: Error Codes)部分
3.3.2.4.4. Usage of Authentication System Services 编程镜像组成与两类认证服务的核心区别
首先明确编程镜像(programming image) 的构成:它包含三部分内容 —— 镜像描述符(image descriptor)、比特流(bitstream),以及可选的设计初始化数据(optional design initialization data)。
在此基础上,两类认证系统服务的验证范围存在关键差异:
- 比特流认证系统服务(bitstream authentication system service):仅能用于认证 “比特流” 这一部分,不涉及镜像描述符和可选的设计初始化数据。
- IAP 镜像认证系统服务(IAP image authentication system service):可用于认证 “完整的编程镜像”,即同时覆盖镜像描述符、比特流,以及可选的设计初始化数据。
简单来说,前者是 “局部验证”(仅核心比特流),后者是 “全面验证”(整个编程镜像),用户可根据对数据安全性的需求选择对应服务。
错误code :
![image]()
![image]()