按正确顺序创建反映所有器件及其配置存储器的
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
”消息。