To write the SVF file using the Vivado Tcl mode or the Tcl
Console in the Vivado IDE use the write_hw_svf
command.
The SVF chain, direct FPGA and indirect flash programming operations are captured
in a temporary file. When the write_hw_svf
command is called, the
temporary file is moved to the filename passed to the command. After the write_hw_svf
command is called, the temporary file is reset, and a subsequent programing
operation is added to the beginning of the SVF file sequence.
The following code segment shows the Tcl commands used to create a file named my_xcku9p.svf
containing the direct programming of a xcku9p device:
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
In this sample code the xcku9p device is created using create_hw_device
command whose return value is set to a temporary variable called device0
. This temporary value is used to reference the object when setting
the PROGRAM.FILE
property to the file my_xcku9p.bit
file. Next, the program_hw_device
command
is called using the device0
reference. When this program_hw_device
command runs, it creates a temporary SVF file with the
SVF operations necessary to program the my_xcku9p.bit
file on the
xcku9p. Lastly, the write_hw_svf
command takes the temporary file
and moves it to the final target destination, myxcku9p.svf
. At this
point, the SVF file creation process is complete and the target can be closed.
create_hw_device
commands in between
programming commands, you produce an output SVF file that has two different chain
sequences.Example of Incorrect SVF File Creation Steps:
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
The first program command only captures the chain definition containing the first device. The second program command includes both devices in the chain when writing out the SVF instructions. Therefore, if you attempt to play this SVF file on a chain with two devices, the first programming operations fail because the live chain gets two devices, not one as the command expected.
To correct this problem, you run the create_hw_device
commands first. After the chain is completely defined, perform the
program operations as follows:
Example of Correct SVF File Creation Steps
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