当编程文件与硬件器件相关联后,即可在“Hardware”(硬件)窗口中右键单击器件并单击“Program Device”(器件编程)菜单选项来执行硬件器件编程。您也可以使用 program_hw_device
Tcl 命令。例如,要对 JTAG 链中的首个器件执行编程,请使用以下 Tcl 命令:
program_hw_devices [lindex [get_hw_devices] 0]
当进度对话框指示编程进度达 100% 完成时,您可通过在Hardware Device Properties(硬件器件属性)窗口中检验状态是否为“DONE”(完成)来检查硬件器件编程是否成功。
图 1. 检查器件的 DONE 状态
您还可使用 get_property
Tcl 命令来检查 DONE 状态。例如,要检查 JTAG 链中的首个器件(即 AMD Kintex™ 7 器件)的 DONE 状态,请使用以下 Tcl 命令:
get_property REGISTER.IR.BIT5_DONE [lindex [get_hw_devices] 0]
在 Versal 器件上使用的命令与此处命令略有不同,因为 DONE 状态寄存器不同。索引值为 1 必须解读为 get_hw_devices
返回的首个器件,并且在单器件用例中,将表示为 arm_dap
。
get_property REGISTER.JTAG_STATUS.BIT[34]_DONE [lindex [get_hw_devices] 1]
如果您使用其他方法执行硬件器件编程(例如,使用闪存器件或外部器件编程器),那么也可以通过右键单击“Refresh Device”(刷新器件)菜单项或者通过运行 refresh_hw_device
Tcl 命令来刷新硬件器件的状态。这样可以刷新器件的各种属性,包括但不限于 DONE 状态。
重要: 对于非 Versal 架构,如果您的设计包含调试核,请确保 Debug Hub 时钟频率至少是 JTAG 时钟频率的 2.5 倍。
重要: “User SCAN Chain”(用户扫描链):对于非 Versal 架构,默认情况下,Vivado 编程器会尝试检测设计中指定的用户扫描链上的调试核。它通过向器件发出 JTAG_CHAIN 1 命令来执行检测。如果您已编程的器件所含的设计没有任何调试核或者所含调试核的用户扫描链为 2、3 或 4,那么您会看到 1 条警告。
要判定用户扫描链设置,对于非 Versal 架构,请打开已实现的设计并使用:
get_property C_USER_SCAN_CHAIN [get_debug_cores dbg_hub]
您可在 Vivado 硬件管理器中更改用户扫描链。
注释:
BSCAN_SWITCH_USER_MASK
是比特掩码值。请参阅下图。或者,您可指定用户扫描链值作为 hw_server
启动选项。
hw_server -e "set bscan-switch-user-mask <user-bit-mask>"
图 2. BSCAN 开关用户掩码
提示: 对于早于 Vivado 2016.3 的设计,AMD 建议手动启动
hw_server
并包含 -e
"set xsdb-user-bscan <C_USER_SCAN_CHAIN
scan_chain_number>"
,以检测位于用户扫描链的 2 或 4 上的 Debug Hub。