01signal.com

Vivado: FPGA の FPGA bitstream programming と Linux command-line

序章

bitstream を FPGA に送信するには、通常、グラフィカル ユーザー インターフェイスを使用します。 Vivadoの Hardware Manager などのツールはこの機能を提供しますが、この単純なタスクには手順が複雑すぎると感じることがよくあります。特に、1 つの JTAG cableを介してコンピューターに接続されている FPGA が 1 つしかない場合、ユーザー インターフェイスには多くの不要な手順が必要です。 FPGAが 1 つしかない場合、コンピューターは bitstream ファイルをこの FPGAに書き込む必要があると推測できないのはなぜでしょうか。ツールに何をしたいのかを明示的に伝える必要があるのはなぜでしょうか。実際には、オプションは 1 つしかありません。

考えられる解決策としては、このタスクを 1 ステップで実行する bash script を使用することです。この script は、 JTAG cableを介してコンピューターに接続されている FPGA を見つけ、 bitstream ファイルをこの FPGAに送信します。

script

これは、 bitstream ファイルを FPGAに送信する script です。

#!/bin/bash

set -e

if [ "$#" -ne 1 ]; then
    echo "Usage: $0 bitstream-file.bit"
    exit 1
fi

if ! which vivado >/dev/null ; then
    echo Vivado is not in the execution path. Please run something like
    echo source /path/to/..../Vivado/20nn.n/settings64.sh
    exit 1
fi

if [ ! -f "$1" ] ; then
    echo \"$1\" file doesn''t exist
    exit 1
fi

if vivado -mode batch -nolog -nojournal -source /dev/stdin -tclargs "$1" <<"EOF"
# Tcl script begins here.
set bitfile [lindex $argv 0]

open_hw
connect_hw_server
open_hw_target [lindex [get_hw_targets -of_objects [get_hw_servers localhost*]] 0]
set thefpga [lindex [get_hw_devices] 0]

set_property PROGRAM.FILE "$bitfile" $thefpga
set_property PROBES.FILE {} $thefpga
current_hw_device $thefpga
refresh_hw_device -update_hw_probes false $thefpga
program_hw_devices $thefpga
# Tcl script ends here
EOF
then
    echo -e "\nProgramming successful.\n"
else
    echo -e "\nProgramming failed.\n"
fi

この bash script には Tcl scriptが含まれていることに注意してください。「vivado」コマンドに渡される arguments の 1 つは「-source /dev/stdin」です。これにより、 Vivado は standard inputから Tcl script を読み取ります。よく知られている「here document」メソッドは、「<<」の助けを借りて使用されます。

scriptの使用

上記の script をファイルに書き込みます (たとえば、 fpga_programという名前で)。次のようなコマンドを使用して、このファイルを実行可能にします。

$ chmod a+x fpga_program

scriptを実行する前に、次のようなコマンドで environment variables を設定します。

$ source /opt/xilinx/Vivado/2023.1/settings64.sh

このコマンドの「/opt/xilinx/Vivado/2023.1」の部分を変更して、 path がコンピューター上で Vivado がインストールされている場所を反映するようにします。

次に、次のようなコマンドで script を実行します。

$ ./program_fpga myproj.bit

もちろん、「myproj.bit」を bitstream ファイルの名前に変更します。

script の実行中にVivado は大量の出力を生成しますが、最後の行は「Programming successful」または「Programming failed」のいずれかになります。

scriptについてのコメント

この script は Vivado 2015.2 および Vivado 2023.1でテストされているため、 Vivadoのすべてのバージョンで動作する可能性が高いです。ただし、 Vivadoの最近のバージョンでは、ソフトウェアによって次の警告が表示されます。

WARNING: 'open_hw' is deprecated, please use 'open_hw_manager' instead.

script はこの警告にもかかわらず動作します。ただし、 Vivado の将来のバージョンでは、「open_hw」コマンドが認識されない可能性があります。このコマンドでエラーが発生する場合は、 script でこのコマンドを「open_hw_manager」に変更してください。

script に可能なもう 1 つの変更は、この script が生成する出力の量に関係します。テキスト出力をそれほど多くしたくない場合は、 redirection を追加して、出力が /dev/nullに送られるようにします。

これが必要な場合は、 scriptで次の行を見つけます。

if vivado -mode batch -nolog -nojournal -source /dev/stdin -tclargs "$1" <<"EOF"

次のように変更します。

if vivado -mode batch -nolog -nojournal -source /dev/stdin -tclargs "$1" > /dev/null <<"EOF"

hardware serverの停止

同じコンピュータで複数のバージョンの Vivado を使用する場合、 JTAG cableへの接続に問題が生じる可能性があります。この問題の原因は、 Vivado がハードウェアと通信する ( port 3121をリッスンする) ために TCP/IP server を使用するためです。 Vivado は必要に応じてこの server を自動的に起動します。

しかし、 server が Vivadoの 1 つのバージョンによって起動され、別のバージョンの Vivado が FPGAに接続しようとすると、通信が機能しない可能性があります。これは、 server のバージョンが Vivadoのバージョンと同じであるためです。この状況は、グラフィカル ユーザー インターフェイスで Hardware Manager を使用する場合にも発生します。

この問題が発生した場合、次のコマンドで server を停止できます。

$ killlall hw_server

server は、一定期間使用しないと自動的に実行を停止することに注意してください。

このページは英語から自動翻訳されています。 不明な点は元のページを参照してください。
Copyright © 2021-2024. All rights reserved. (38a9d8fd)