vivado适用于 UltraScale 和 UltraScale+ 器件的 eFUSE 寄存器访问和编程

本文详细介绍了赛灵思UltraScaleFPGA器件的唯一标识符FUSE_DNA,如何通过Vivado工具进行eFUSE寄存器编程,包括AES和RSA密钥设置,以及控制和安全寄存器的操作。还提到使用NKZ文件管理和导出eFUSE设置的过程。
摘要由CSDN通过智能技术生成
FUSE_DNA 唯一的器件 DNA
每个 UltraScale 器件都有唯一的器件 ID 称为器件 DNA 且赛灵思已将此 DNA 编程到器件中。用户无法对
FUSE_DNA 进行编程。 UltraScale 器件具有 96 DNA 。您可在 Vivado Design Suite Tcl 控制台中运行以下 Tcl 命令以
读取 FUSE_DNA
get_property [lindex [get_hw_device] 0] REGISTER.EFUSE.FUSE_DNA
您也可以在 Vivado Design Suite 的“硬件器件属性 (Hardware Device Properties) ”窗口中通过查看 eFUSE 寄存器来访
问器件 DNA 如下图所示。
eFUSE 寄存器编程
要执行 eFUSE 寄存器编程 请在“硬件 (Hardware) ”窗口中右键单击 FPGA 器件并选中“ Program eFUSE
Registers ”。
这样会显示如下图所示的“ Program eFUSE Registers Wizard 并指导您为 eFUSE 寄存器设置各选项。
在“ AES 密钥设置 (AES Key Setup) ”窗格中 指定以下设置
在“加密密钥设置 (Cryptographic Key Setup) Wizard 窗格中 请指定如下密钥设置
• 加密文件密钥 (.nky) 指定包含 eFUSE AES RSA 密钥的 .nky 文件
AES 密钥 256 ): 256 AES eFUSE 密钥从指定 .nky 文件读入 用于对加载的加密比特流进行解密。
RSA 密钥摘要 384 ): 384 RSA eFUSE 密钥从指定 .nky 文件读入 RSA 使用。
• 在“用户寄存器设置 (USER Register Setup) Wizard 窗格中 指定 32 位 用户寄存器或 128 位用户寄存器
在“ USER Register Setup ”窗格中 请指定用户定义的寄存器位数。 32 位用户寄存器 (FUSE_USER) 128 位用户寄
存器 (FUSE_USER128) 由一组用户定义的一次性可编程 eFUSE 位组成。这些寄存器的位属于累积可编程位。这表示如
果您在任一 eFUSE 编程会话中仅对 1 USER 位进行编程 USER = 0x0000_0001 或位 0 ), 那么在后续 eFUSE
编程会话中 您可对剩余 0 位的任一位进行编程 USER = 0x0000_0002 或位 1
FUSE_USER FUSE_USER_128 寄存器完成编程后 可通过多种方式读入这些寄存器
• 使用 Tcl 命令
report_property [lindex [get_hw_device] 0] REGISTER.EFUSE.FUSE_USER
report_property [lindex [get_hw_devices] 0] REGISTER.EFUSE.FUSE_USER_128
• 运行 refresh_hw_device 操作后 通过 Vivado Hardware Device 的“属性 (Properties) ”窗口。
在“控制寄存器设置 (Control Register Setup) Wizard 窗格中 指定以下设置
在“ Control Register Setup ”窗格中 指定 eFUSE 控制设置。
R_DIS_KEY 设置此项即可禁用用于验证 FUSE_KEY 加密密钥的密钥和编程的 CRC 检查。
R_DIS_USER 设置此项即可禁用 32 位用户位 (FUSE_USER) 的读取和编程操作。
R_DIS_SEC 设置此项即可禁用安全寄存器位 (FUSE_SEC) 的读取和编程操作。
R_DIS_RSA 设置此项即可禁用 RSA 密钥寄存器 (FUSE_RSA) 的读取和编程操作。
W_DIS_USER 设置此项即可禁用 32 位用户位 (FUSE_USER) 的编程操作。
W_DIS_SEC 设置此项即可禁用安全寄存器位 (FUSE_SEC) 的编程操作。
W_DIS_RSA 设置此项即可禁用 RSA 密钥寄存器 (FUSE_RSA) 的编程操作。
W_DIS_USER_128 设置此项即可禁用 128 位用户位 (FUSE_USER128) 的编程操作。
如需了解有关 FUSE_SEC 寄存器的更多详细信息 请参阅《 UltraScale 架构配置用户指南》 ( UG570 )
禁用控制寄存器设置
要禁用控制寄存器编程 请运行以下 Tcl 命令
program_hw_devices -control_efuse {20} [lindex [get_hw_devices] $deviceIdx]
其中 $deviceIdx 设置为 UltraScale UltraScale+ 器件的索引 您可在此类器件中禁用 eFUSE 控制寄存器位编程。
这样即可设置 W_DIS_CNTL 从而禁用后续 eFUSE 控制寄存器位编程。
重要提示 如果 W_DIS_CNTL 位已编程 那么将禁用其它 eFUSE 控制寄存器位的编程操作 从而阻止对器件
的控制寄存器进行进一步编辑。
在“安全寄存器设置 (Security Register Setup) Wizard 窗格中 指定以下设置
在“ Security Register Setup Wizard 窗格中 基于允许在 FPGA 上加载的比特流类型来指定安全控制选项。
FUSE_SEC 设置如下
• “ CFG_AES_Only 设置此项表示仅接受加密比特流。
• “ EFUSE_KEY_Only 设置此项表示仅限 eFUSE 密钥可用于解密。
• “ RSA_AUTH 设置此项表示强制对比特流执行 RSA 身份验证。
• “ SCAN_DISABLE 设置此项表示禁用赛灵思访问内部测试寄存器的权限。
• “ CRYPT_DISBALE 设置此项表示永久禁用解密器。
如需了解有关 FUSE_SEC 寄存器的更多详细信息 请参阅《 UltraScale 架构配置用户指南》 ( UG570 )
请复查“ eFUSE 寄存器编程汇总 (Program eFUSE Registers Summary) ”窗格中的 eFUSE 设置。
在此窗格中可显示 “ Program eFUSE Registers Wizard 面板中设置的所有位。在此窗格中 您可查看各个位的设置
以便复查特定编程设置。请仔细复查此汇总页面 以确保要编程的每个位都已正确设置。
单击“ Finish ”即可显示“ eFUSE 编程确认 (Program eFUSE confirmation) ”对话框
单击“ OK ”以对指定的 FUSE 位进行编程。
禁用 JTAG 接口
要通过 eFUSE 寄存器禁用 JTAG 接口 请运行以下 Tcl 命令
program_hw_devices -force_efuse -security_efuse {08} [lindex
[get_hw_devices] $deviceIdx]
其中 $deviceIdx 设为将禁用其中 JTAG 接口的 UltraScale UltraScale+ 器件的索引。
重要提示 用于为 7 系列器件禁用 JTAG 接口的 Tcl 命令不同于以上用于 UltraScale UltraScale+ 器件的命
令。如果使用 7 系列器件 请参阅赛灵思答复记录 65110 中列出的 XSK_EFUSEPL_DISABLE_JTAG_CHAIN
条目。
注释 此编程步骤应在所有期望的 eFUSE 位全都完成编程后 作为最后一步来执行。
重要提示 如果 JTAG 禁用位已编程 则将禁用 JTAG 接口 导致后续无法再接入器件进行测试和配置。仅当无
需再通过 JTAG 访问器件时 才能对该位进行编程。
强制执行 eFUSE 编程
要对位于寄存器中任意位置的任何位 无论该位先前是否已编程 强制执行置位 可将 -force_efuse 选项设置为
program_hw_devices 。使用该选项时 将仅执行基本寄存器边界检查。
eFUSE NKZ 文件
为了在单一文件内采集所有 eFUSE 编程设置 以便于将 eFUSE 设置导出到其它 eFUSE 编程器实现 以及将这些
eFUSE 设置批量编程到大量器件中 赛灵思定义了称为 NKZ 的文件格式 并以文件扩展名 .nkz 来指定此格式。 NKZ
格式是现有 NKY 格式的超集 NKZ 支持所有 NKY 字段以及任何可编程 eFUSE 寄存器设置。
eFUSE 导出 NKZ 文件
由于建议您将 eFUSE 设置编程为按多轮次运行 因此 eFUSE 设置始终导出至外部可见 NKZ 文件 并在每次 eFUSE
作期间更新此文件。此文件用于累积应用于器件的所有 eFUSE 设置 即使通过多次 eFUSE 操作来应用这些设置也是如
此。 Vivado 会跟踪此文件 确保始终有单一 eFUSE 导出文件 其中包含 NKZ 格式的器件累积 eFUSE 设置。如果未指
定任何选项 那么此文件默认名称为
export_<FUSE_DNA>.nkz
其中 <FUSE_DNA> 是器件的 FUSE_DNA 寄存器值。
此默认文件位于 Vivado ® IDE 的启动目录中。可使用 program_hw_devices Tcl 命令搭配 -efuse_export_file
选项来更改此文件 如以下示例所示
program_hw_devices -user_efuse {1} -efuse_export_file {my_settings.nkz}
随后 Vivado IDE 会使用针对导出的 eFUSE 设置指定的 NKZ 文件来启动 而无需在 Tcl 选项中反复指定此文件。这样
就不会移除先前创建的任何 eFUSE 导出文件 而是在此文件中包含更改 eFUSE 导出文件名之前应用的所有 eFUSE
置。执行完所有 eFUSE 操作后 所有 eFUSE 设置都存储在当前 eFUSE 导出文件中。
此外还有 1 个选项可用于单独导出 eFUSE 设置 而无需实际完成器件编程操作。该选项可用于创建包含所有必需
eFUSE 设置的单一 NKZ 文件 而不会影响器件。此外 只需通过直接移除 eFUSE 导出文件并从头开始操作即可轻松
解决在此模式下发生的任意 eFUSE 编程错误。可通过以下 Tcl 命令来使用此仅限导出模式
program_hw_devices -user_efuse {1} -only_export_efuse
该选项仅适用于单一命令 因此必须在每项 eFUSE 操作中使用该选项 以避免对器件进行编程。由于 eFUSE 设置始终
导出至 NKZ 文件 与是否执行编程无关 因此赛灵思强烈建议不要将编程流程与仅限导出流程混用。否则 生成的
eFUSE 导出文件可能同时包含实际已编程到器件中的 eFUSE 设置和仅导出到 NKZ 文件的设置 导致器件中 eFUSE
存器状态不明确。通过使用此仅限导出模式 所创建 NKZ 格式的 eFUSE 导出文件与执行编程后创建的导出文件完全相
而无需在器件上执行编程。
  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cckkppll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值