AR# 68832

采用 Vivado 2016.4(或更早版本)进行 UltraScale FPGA、UltraScale+ FPGA 以及 Zynq UltraScale+ MPSoC eFUSE 编程的设计咨询

描述

概述:

该设计咨询答复记录涵盖 UltraScale FPGA、UltraScale+ FPGA 和 Zynq UltraScale+ MPSoC eFUSE 编程建议,以及 Vivado 2016.4 及更早版本中的已知问题。 

任何问题(如果遇到)都会导致一个阻止 eFUSE 编程的直接错误或引起即时加密/签名引导/配置图像失败。

重要信息:

  • 对于 UltraScale 架构 SSI FPGA,没有补丁,就不要使用 Vivado 2016.4 或更早版本来编程 eFUSE 控制寄存器 R_DIS_SECR_DIS_RSA 选项。查看以下解决方案部分的问题 1,了解一系列受影响的 SSI 器件及相关解决方案。
  • 对于 UltraScale+ MPSoC,不要使用 Vivado 2016.4 或更早版本来编程 PS eFUSE 或 PS BBRAM。查看以下 Zynq UltraScale+ MPSoC PS eFUSE 和 PS BBRAM 编程的一般性建议。

对现有 eFUSE 编程项目或以前已编程器件的影响

无。已使用 eFUSE 编程方法成功编程的已有项目不会受到影响。 

然而,如果已经对现有项目中的 eFUSE 设置或程序做了修改,请检查已知问题或应用一般性建议确保最新设置或程序的成功。

全新 UltraScale FPGA 及 UltraScale+ FPGA eFUSE 编程项目的一般性建议:

为确保 eFUSE 编程一次取得成功,请为最新 eFUSE 编程项目应用以下建议。

  • 建议:如果电路板设计允许,在 eFUSE 编程过程中,只针对 JTAG 环境设置 FPGA 配置模式引脚。
  • 要求:按照以下顺序使用单独的 eFUSE 编程操作(例如单独通过程序 eFUSE GUI 向导或独立 Tcl 命令)编程适用 eFUSE 值及选项:
    1. 编程 eFUSE 操作第 1 步:编程 NKY 值(AES、RSA)和 FUSE_USER 值
    2. 编程 eFUSE 操作第 2 步:(如果实用)编程安全寄存器 (FUSE_SEC) 选项,除非 JTAG 禁用。
    3. 编程 eFUSE 操作第 3 步:(如果实用)编程控制寄存器 (FUSE_CNTL) 选项,除非 W_DIS_CNTL(写入禁用的控制寄存器)。
      注:如果最后一步 (5) 您需要编程安全寄存器 JTAG 禁用选项,不要编程控制寄存器 W_DIS_SEC 选项。
    4. 编程 eFUSE 操作第 4 步:(如果实用)编程控制寄存器 W_DIS_CNTL (写入禁用的 FUSE_CNTL 寄存器。查看 (UG908)。)
    5. 最后一个编程 eFUSE 的操作步骤:(如果实用)编程安全寄存器 JTAG 禁用(查看 UG908。)
  • 建议:对于第一个编程的器件,请在完成以上每一步操作后验证 eFUSE 结果,然后完成所有步骤后再重新验证 eFUSE 结果,以确保完成 eFUSE 编程程序后的最终结果为所需结果。
  • 如果可编程 AES 和/或 RSA 值,随后请验证该器件是否能成功加载 AES 加密和/或 RSA 签名比特流
  • 如果可编程 FUSE_USER 值,则请验证您是否能够读取正确的 JTAG FUSE_USER 和/或EFUSE_USER 原语值。
  • 如果可编程 FUSE_SEC 设置,则请为所选择的设置验证正确的器件行为。
  • 如果可编程 FUSE_CNTL 设置,则不仅要通过检查 Vivado 中所得到的 REGISTERS.EFUSE.FUSE_CNTL 值来验证设置,而且还要检查这个读取保护的 REGISTER.EFUSE。* Vivado 中的寄存器不显示您的实际值。
    注:预计 Vivado 将显示一些 FUSE_CNTL 保留的、Xilinx 工厂将其编程为‘1’的比特位位置。
  • 验证您能否根据您的第 5 步选择访问器件 JTAG。

 参考以下说明文档,了解针对 UltraScale 架构 FPGA 的 Vivado 工具编程操作:

  • Vivado 设计套件用户指南:编程与调试 (UG908)
  • 使用加密认证保护 UltraScale/UltraScale+ FPGA 比特流的应用指南 (XAPP1267)。

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_SECR_DIS_RSA 等 eFUSE 控制寄存器禁止读取设置编程 SSI FPGA 时,Vivado 2016.4(及更早版本)可编程计划外的 eFUSE 比特位。 

每个设置的计划外结果可能分别为:JTAG 通过计划外 FUSE_SEC[3] eFUSE 设置永久禁用,或者一个 RSA 签名比特流加载因为存在计划外错误 RSA 散列值而导致认证错误。

SSI FPGA 包括: 

  • KU085
  • KU115
  • VU125
  • VU160
  • VU190
  • VU440
  • VU5P
  • VU7P
  • VU9P
  • VU11P
  • VU13P

规避措施:

在 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。

规避措施:

  • 在 Vivado 2016.4 及更早版本中,别使用混淆密钥。
  • 或者对于单片 FPGA 而言,使用以下 Tcl 命令可编程 FUSE_SEC[6]:,其中 $deviceIdx 是 JTAG 扫描链中目标器件的索引。
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
AR# 68832
日期 10/17/2018
状态 Active
Type 设计咨询
器件 More Less
Tools