Vivado の Tcl モードまたは Vivado IDE の [Tcl Console] ウィンドウを使用して SVF ファイルを書き出すには、write_hw_svf
コマンドを使用します。
SVF チェーン、直接 FPGA および間接フラッシュ プログラム操作は、一時ファイルに保存されます。write_hw_svf
コマンドを実行すると、この一時ファイルがコマンドで指定したファイルに保存されます。write_hw_svf
コマンドを実行した後は一時ファイルはリセットされ、その後のプログラム操作は SVF ファイル
シーケンスの最初に追加されます。
次のコードは、xcku9p デバイスの直接プログラム操作を含む my_xcku9p.svf
という名前のファイルを作成する Tcl コマンドを示しています。
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
このサンプル コードは、create_hw_device
コマンドを使用して xcku9p
デバイスを作成し、その戻り値を device0
という一時変数に設定します。この一時変数値を使用してオブジェクトを参照し、PROGRAM.FILE
プロパティを my_xcku9p.bit
ファイルに設定します。次に、program_hw_device
を参照して device0
コマンドを実行します。この program_hw_device
コマンドを実行すると、my_xcku9p.bit
ファイルを xcku9p にプログラムするのに必要な
SVF 操作を含む一時 SVF ファイルが作成されます。最後に write_hw_svf
コマンドを実行し、一時ファイルを myxcku9p.svf
ファイルに移動します。この段階で SVF
ファイルの作成プロセスは終了したので、ターゲットを閉じることができます。
create_hw_device
コマンドを挿入すると、2 つの異なるチェーン シーケンスを含む SVF ファイルが生成されます。- 間違った 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
最初のプログラム コマンドでは、最初のデバイスを含むチェーン定義のみが使用されます。2 番目のプログラム コマンドにはチェーンの両方のデバイスが含まれます。この SVF ファイルを 2 つのデバイスを含むチェーンで実行すると、ライブ チェーンには 2 つのデバイスがあるので、最初のプログラムはエラーとなります。
この問題を修正するには、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