按正确顺序创建反映所有器件及其配置存储器的 SVF 链之后 , 即可开始向 SVF 链中的器件添加编程操作。 例如, 您可右键单击链中的赛灵思 a200t 器件 , 然后选择“添加器件编程操作 (Add Program Device Operation) ”对话 框, 如下所示。指定比特流文件 , 以便将其用于对器件进行编程。
单击“ OK ”后 , 就会在“ SVF 操作 (SVF Operations) ”窗口底部列出器件编程操作。
同样 , 您可通过右键单击存储器器件并选择“添加配置存储器编程 (Add Program Configuration Memory) ”以启动 “Add Program Configuration Memory ”对话框来对内存存储器器件进行编程 , 如下所示。指定配置文件 , 以便将其用 于对存储器器件进行编程。您也可以为存储器器件选择其它编程选项, 例如“擦除 (Erase) ”、“空白检查 (Blankcheck)”和“验证 (Verify) ”。
单击“ OK ”后 , 就会在“ SVF Operations ”窗口底部列出配置存储器器件编程操作。
写入 SVF 文件
使用 Vivado IDE
单击位于“ SVF 操作 (SVF Operations) ”窗口底部的“导出 SVF (Export SVF) ”即可将 SVF 链设置及其操作保存至文 件, 如下图所示。
重要提示 ! 通过指定在先前流程运行中使用 Vivado 硬件管理器创建的 SVF 文件 , 即可重新创建现有 SVF 链。
Vivado IDE 会将 SVF 链的规格保存到文件中 , 以便在回读时可重新创建该 SVF 链。
使用命令行
要使用 Vivado Tcl 模式或者 Tcl 控制台来编写 SVF 文件 , 请在 Vivado IDE 中使用 write_hw_svf 命令。 这样会在临时文件中捕获 SVF 链、直接 FPGA 和间接闪存编程操作。调用 write_hw_svf 命令时 , 临时文件将改为 传递给该命令的文件名。调用 write_hw_svf 命令后 , 临时文件将复位 , 并在 SVF 文件序列开头处添加 1 项后续编程操作。
以下代码段显示了用于创建名为 my_xcku9p.svf 的文件的 Tcl 命令 ( 包括对 xcku9p 器件进行直接编程 ):
create_hw_target my_svf_target
open_hw_target
set device0 [create_hw_device -part xcku9p]
set_property PROGRAM.FILE {my_xcku9p.bit} $device0
program_hw_devices $device0
write_hw_svf my_xcku9p.svf
close_hw_target
在此样本代码中 , xcku9p 器件是使用 create_hw_device 命令创建的 , 其返回值设置为名为 device0 的临时变
量。随后 , 将 PROGRAM.FILE 属性设置到 my_xcku9p.bit 文件时 , 此临时值将用于引用对象。下一步 , 将使用
device0 引用来调用 program_hw_device 命令。运行此 program_hw_device 命令时 , 它会通过必要的 SVF 操
作来创建临时 SVF 文件 , 用于对 xcku9p 上的 my_xcku9p.bit 文件执行编程。最后 , write_hw_svf 命令会将此临
时文件移至最终目标 myxcku9p.svf 。此时 , SVF 文件创建流程即告完成 , 并且可关闭目标。
提示 : 关于编写 SVF 文件 , 最后值得注意的是 , 应首先为 JTAG 链创建所有器件 , 然后再执行编程操作。如果
在执行编程命令间交织执行了 create_hw_device 命令 , 那么生成的输出 SVF 文件将包含 2 条不同的序列
链。
• 错误的 SVF 文件创建步骤示例 :
create_hw_target my_svf_target
open_hw_target
set device0 [create_hw_device -part xcku9p]
set_property PROGRAM.FILE {my_xcku9p1.bit} $device0
# this program command will produce SVF instructions
# which account for only device0 in chain
program_hw_devices $device0
set device1 [create_hw_device -part xcku9p]
set_property PROGRAM.FILE {my_xcku9p2.bit} $device1
# this program command will produce SVF instructions
# which account for device0 and device1 in chain
program_hw_devices $device1
write_hw_svf my_bad_xcku9p.svf
close_hw_target
第一条编程命令仅采集包含首个器件的链定义。第二条编程命令在写出 SVF 指令时会包含链中的 2 个器件。因此如果
您尝试在含 2 个器件的链上运行此 SVF 文件 , 则第一项编程操作将失败 , 因为活动链会收到 2 个器件 , 而非此命令期
望的 1 个器件。
要纠正此问题 , 请首先运行 create_hw_device 命令。然后 , 当链完成定义后 , 请按如下所示执行编程操作 :
• 正确的 SVF 文件创建步骤示例
create_hw_target my_svf_target
open_hw_target
# create device chain first
set device0 [create_hw_device -part xcku9p]
set device1 [create_hw_device -part xcku9p]
# program device0
set_property PROGRAM.FILE {my_xcku9p1.bit} $device0
program_hw_devices $device0
# program device1
set_property PROGRAM.FILE {my_xcku9p2.bit} $device1
program_hw_devices $device1
write_hw_svf my_good_xcku9p.svf
close_hw_target
执行 SVF 文件
创建 SVF 文件后 , 您可有选择性地通过 Vivado IDE 来执行 SVF 文件。 Vivado IDE 可以执行通过 SVF 生成功能所生成 的 SVF 文件 , 主要用作为验证测试工具。 execute_hw_svf 命令并非常用的 SVF 执行命令 , 请注意 , 只能使用通过 Vivado IDE 创建的 SVF 文件。
要运行 svf 命令 , 请在已打开并处于活动状态的目标上运行如下命令 :
execute_hw_svf my_file.svf
INFO: [Labtoolstcl 44-548] Creating JTAG TCL script from SVF file
INFO: [Labtoolstcl 44-549] Re-opening target in JTAG mode
INFO: [Labtoolstcl 44-551] Sourcing JTAG TCL script: my_file.tcl
Pass: SVF Execution completed with no errors
INFO: [Labtoolstcl 44-550] Restoring target to original mode
INFO: [Labtoolstcl 44-570] Execute SVF completed successfully
在本例中 , 指定的文件是 my_file.svf 。在执行流程中 , 输入 SVF 文件可通过 HW_JTAG Tcl 操作转换为临时文件。 创建此 Tcl 代码后 , 将使用此文件来执行转换后的 SVF 指令。要查看 JTAG_TCL 操作 , 可使用 -verbose 选项运行 execute_hw_svf 命令。命令完成后 , 将在消息日志末尾显示指令出错 , 执行失败 , 或者显示成功“ Pass ”消息。