概述:
该设计咨询答复记录涵盖 UltraScale FPGA、UltraScale+ FPGA 和 Zynq UltraScale+ MPSoC eFUSE 编程建议,以及 Vivado 2016.4 及更早版本中的已知问题。
任何问题(如果遇到)都会导致一个阻止 eFUSE 编程的直接错误或引起即时加密/签名引导/配置图像失败。
重要信息:
对现有 eFUSE 编程项目或以前已编程器件的影响:
无。已使用 eFUSE 编程方法成功编程的已有项目不会受到影响。
然而,如果已经对现有项目中的 eFUSE 设置或程序做了修改,请检查已知问题或应用一般性建议确保最新设置或程序的成功。
全新 UltraScale FPGA 及 UltraScale+ FPGA eFUSE 编程项目的一般性建议:
为确保 eFUSE 编程一次取得成功,请为最新 eFUSE 编程项目应用以下建议。
参考以下说明文档,了解针对 UltraScale 架构 FPGA 的 Vivado 工具编程操作:
Zynq UltraScale+ MPSoC PS eFUSE 及 PS BBRAM 编程的一般性建议:
使用 SDK LibXil SKey 库编程 UltraScale+ MPSoC 器件中的 PS eFUSE 和 PS BBRAM。查看 OS 中的 (UG1191) 以及库文档集 (UG643)。
注: 下列所有已知问题在 Vivado 2017.1 版本中已修复。
Vivado 2016.4(及更早版本)与 UltraScale架构 eFUSE 编程有关的已知问题:
问题 1:
在采用 R_DIS_SEC 或 R_DIS_RSA 等 eFUSE 控制寄存器禁止读取设置编程 SSI FPGA 时,Vivado 2016.4(及更早版本)可编程计划外的 eFUSE 比特位。
每个设置的计划外结果可能分别为:JTAG 通过计划外 FUSE_SEC[3] eFUSE 设置永久禁用,或者一个 RSA 签名比特流加载因为存在计划外错误 RSA 散列值而导致认证错误。
SSI FPGA 包括:
规避措施:
在 Vivado 2016.4 及更早版本中,不要编程 eFUSE 控制寄存器 (FUSE_CNTL) 中的 R_DIS_SEC 或 R_DIS_RSA 比特位;或者使用随 Vivado 2016.4 的 DAAR 提供的补丁编程 R_DIS_SEC 和/或 R_DIS_RSA。
问题 2:
Vivado 2016.4(或更早版本)无法编程可启用混淆 AES 密钥的 eFUSE 安全寄存器比特位。
如果启用 BITSTREAM.ENCRYPTION.OBFUSCATEKEY 属性生成一个混淆的 AES 密钥,而且所产生的 NKY 文件可提供给 Vivado 进行编程,Vivado 就可编程混淆密钥,但无法通过编程所需的 eFUSE 选项 (FUSE_SEC[6]) 来启用混淆密钥。
这样,采用混淆密钥流程加密的比特流就无法配置 FPGA。
规避措施:
program_hw_devices -security_efuse {40} [lindex [get_hw_devices] $deviceIdx]
问题 3:
在 Vivado 2016.4 GUI 中,编程 eFUSE 寄存器向导会报告一个错误,即:在您试图选择控制寄存器选项进行编程时,e FUSE_CNTL[5](W_DIS_CNTL,写入禁用的 FUSE_CNTL 寄存器)已经设置,即使实际上没有编程 W_DIS_CNTL 也是如此。
这会导致 GUI 不允许您编程 eFUSE 控制寄存器 (FUSE_CNTL) 设置。
规避措施:
使用 program_hw_devices Tcl 命令(而非 GUI 流程)编程 FUSE_CNTL 比特位。
注:就 FUSE_CNTL R_DIS_SEC 或 R_DIS_RSA 而言,也可查看问题 1。
问题 4:
在 Vivado 2016.4 GUI 中,在 FUSE_CNTL 或 FUSE_USER 寄存器中的一些 eFUSE 比特位已经编程后,再进入编程 eFUSE 寄存器向导编程其它 eFUSE 字段时,会出现一个内部异常错误。
这样,GUI 将不允许您编程其它 eFUSE 控制寄存器 (FUSE_CNTL) 或其它 FUSE_USER 比特位。
规避措施:
在 Vivado 2016.4 及更早版本中使用 program_hw_devices Tcl 命令(而非 GUI 流程)将更多 eFUSE 比特值/选项编程在一个一些 FUSE_CNTL 或 FUSE_USER 比特位已经编程的器件中。
问题 5:
Vivado 2016.4(及更早版本)可帮助您为 Zynq UltraScale+ MPSoC 调用编程 eFUSE 寄存器操作,但该操作无法编程 Zynq UltraScale+ MPSoC 技术参考手册 (UG1085) 中描述的 PS eFUSE。
通过某些安全寄存器设置,在一款 MPSoC 器件上使用编程 eFUSE 寄存器操作,可带来一款无法加载标准 PL 比特流的器件。
推荐:
使用 SDK LibXil SKey 库编程 UltraScale+ MPSoC 器件中的 PS eFUSE 和 PS BBRAM。查看 OS 中的 (UG1191) 以及库文档集 (UG643)。
对于 Vivado 2016.4 或更早版本的所有其它 eFUSE 编程问题,可以查看面向其它问题的支持知识库,也可以创建一个支持服务请求。
Vivado 设计工具 2016.4 的补丁
请参考随该补丁提供的 README 的安装/使用部分 (AR68832_vivado_2016.4_rev3.txt)。示例 Vivado UltraScale eFUSE 编程脚本:
本设计咨询答案记录所附的是一个示例脚本,演示了UltraScale、UltraScale + FPGA中 eFuse 设置的推荐编程顺序。
文件名 | 文件大小 | File Type |
---|---|---|
AR68832_vivado_2016_4_rev3.zip | 11 MB | ZIP |
vivado_ultrascale_efuse_programming_sequence.txt | 6 KB | TXT |