eFUSE 寄存器访问和编程
注释 : 在 MPSoC 和 Versal 器件上不支持以下 eFUSE 访问和编程方法。
7 系列、 UltraScale 和 UltraScale+ 器件具有一次性可编程位用于执行特定功能 , 称为 eFUSE 位。不同 eFUSE 位类型如 下所述:
• FUSE_DNA - 存储唯一器件标识位 ( 不可编程 ) 。
• FUSE_USER - 存储 32 位用户定义的代码。
• FUSE_KEY - 存储密钥以供 AES 比特流解密器使用。
• FUSE_CNTL - 控制密钥使用和对 eFUSE 寄存器的读写访问权。
• FUSE_SEC - 控制 UltraScale 和 UltraScale+ 器件中的特殊器件安全性设置。
重要提示 ! eFUSE 寄存器位编程只是一次性操作。 eFUSE 寄存器位一经编程 ( 即 , 从未编程状态 0 转换为 已编程状态 1 ), 则无法复位为 0 和 / 或重新编程。在对任意 eFUSE 寄存器进行编程前 , 应谨慎核查设置。
注意 ! 如有任何 eFUSE 寄存器位先前已编程 ( 即 , 从未编程状态 0 转换为已编程状态 1 ), 那么尝试对其再 次进行编程时, Vivado 硬件管理器会发出严重警告 , 以指出部分位已编程。但即使出现此警告 , 先前操作期 间尚未编程的后续 eFUSE 寄存器位 ( 处于未编程状态 0 ) 仍将继续进行编程。
重要提示 ! 赛灵思建议首先对 FUSE_USER 、 FUSE_KEY 和 FUSE_RSA 寄存器进行编程 , 然后重新运行 “eFUSE 编程 (eFUSE programming) ” Wizard , 对 FUSE_SEC 位进行编程以控制 FPGA 安全性设置 , 最后对 FUSE_CNTL 位进行编程以控制对这些 eFUSE 位执行的读写访问。
针对 eFUSE 编程的电缆支持
支持 eFUSE 编程的兼容 JTAG 下载线缆和器件列表如下 :
• 赛灵思 SmartLynq 数据电缆 (HW-SMARTLYNQ-G/DLC20)
• 赛灵思平台电缆 USB II (DLC10)
• Digilent JTAG-HS1
• Digilent JTAG-HS2
• Digilent JTAG-HS3
适用于 7 系列器件的 eFUSE 寄存器访问和编程
FUSE_DNA : 唯一的器件 DNA
每个 7 系列器件都有唯一的器件 ID , 称为器件 DNA , 且赛灵思已将此 DNA 编程到器件中。 7 系列器件具有 64 位 DNA。您可在 Vivado Design Suite Tcl 控制台中运行以下 Tcl 命令以读取这些位 : 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) ”窗格中 , 指定以下设置 :
• “ AES Key file ”
○
输入文件名或者浏览至目标文件以指定 AES 密钥文件 ( .nky ) 。指定有效的 .nky 文件后 , 就会自动填充 AES 密 钥字段。
• “ USER bits [7:0] and USER bits [31:8] ”
○
所提供的 USER eFUSE 位可支持用户通过编程来获取其自己的特殊 32 位模式。下 8 位 FUSE_USER 与 256 位 高级加密标准 (AES) 密钥同时进行编程。上 24 位用户位可与 AES 密钥并行编程 , 或者也可稍后再编程 在“控制寄存器设置 (Control Register Settings) ”窗格中 , 指定以下设置 :
• CFG_AES_Only : 设置此项即可强制使用存储的 AES 密钥。
• AES_Exclusive : 设置此项即可禁用部分重配置。
• W_EN_B_Key_User : 设置此项即可禁用 AES 密钥和用户寄存器的编程操作。
• R_EN_B_Key : 设置此项即可禁用 AES 密钥的读取操作。
• R_EN_B_User : 设置此项即可禁用用户代码的读取操作。
• W_EN_B_Cntl : 设置此项即可禁用此控制寄存器的编程操作。
如需了解有关这些功能的更多信息 , 请参阅《 7 系列 FPGA 配置用户指南》 ( UG470 ) 。
请复查“ eFUSE 寄存器编程汇总 (Program eFUSE Registers Summary) ”页面中的 eFUSE 设置。
在此窗格中可显示 “ Program eFUSE Registers ” Wizard 面板中设置的所有位。在此窗格中 , 您可查看各个位的设置 , 以便复查特定编程设置。请仔细复查此汇总页面, 以确保要编程的每个位都已正确设置。 单击“Finish ”即可显示“ eFUSE 编程确认 (Program eFUSE confirmation) ”对话框 :
单击“ OK ”以对指定的 FUSE 位进行编程。
强制执行 eFUSE 编程
要对位于寄存器中任意位置的任何位 ( 无论该位先前是否已编程 ) 强制执行置位 , 可将 -force_efuse 选项设置为
program_hw_devices 。使用该选项时 , 将仅执行基本寄存器边界检查。