UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

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
的页面