按正确顺序创建反映所有器件及其配置存储器的 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”消息。
本文详细介绍了如何在XilinxVivado环境中创建反映器件配置的SVF链,添加编程操作,如器件编程和配置存储器编程,以及如何正确编写和执行SVF文件。涉及使用Tcl命令和VivadoIDE工具进行操作。

2125

被折叠的 条评论
为什么被折叠?



