01signal.com

Vivado: FPGA 의 FPGA bitstream programming 와 Linux command-line

소개

bitstream을 FPGA 로 보내는 것은 일반적으로 그래픽 사용자 인터페이스를 사용하는 것과 관련됩니다. Vivado의 Hardware Manager 와 같은 도구는 이 기능을 제공하지만 이 간단한 작업에 비해 절차가 너무 복잡하다고 느껴지는 경우가 많습니다. 특히, 하나의 JTAG cable을 통해 컴퓨터에 FPGA가 하나만 연결되어 있는 경우, 사용자 인터페이스는 불필요한 단계가 많이 필요합니다. FPGA가 하나만 있는 경우 컴퓨터가 bitstream 파일을 이 FPGA에 써야 한다고 추론할 수 없는 이유는 무엇입니까? 우리가 원하는 작업을 도구에 명시적으로 알려주는 것이 왜 필요한가요? 실제로 옵션은 하나뿐입니다.

가능한 해결책은 이 작업을 한 단계로 수행하는 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 중 하나가 "-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

path가 컴퓨터에 Vivado가 설치된 위치를 반영하도록 이 명령에서 "/opt/xilinx/Vivado/2023.1" 부분을 변경합니다.

그런 다음 다음과 같은 명령으로 script를 실행하십시오.

$ ./program_fpga myproj.bit

물론 "myproj.bit"를 bitstream 파일 이름으로 변경하세요.

Vivado는 이 script가 실행되는 동안 많은 출력을 생성하지만 마지막 행은 "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 에 대한 또 다른 가능한 변경 사항은 이 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의 한 버전에서 시작되었고 다른 버전의 Vivado가 FPGA와 연결을 시도하는 경우 통신이 작동하지 않을 수 있습니다. 그 이유는 server 의 버전이 Vivado의 버전과 동일하기 때문입니다. 이 상황은 그래픽 사용자 인터페이스로 Hardware Manager를 사용할 때도 발생합니다.

이 문제가 발생하면 다음 명령을 사용하여 server를 중지할 수 있습니다.

$ killlall hw_server

server는 일정 기간 동안 사용하지 않으면 자동으로 실행이 중지됩니다.

이 페이지는 영어에서 자동으로 번역됩니다. 불분명한 사항이 있으면 원본 페이지를 참조하십시오.
Copyright © 2021-2024. All rights reserved. (b4b9813f)