01signal.com

Vivado: FPGA bitstream programming 的 FPGA 与 Linux command-line

介绍

将比特流(bitstream)发送到 FPGA 通常需要使用图形用户界面。 Vivado的 Hardware Manager 等工具提供了此功能,但是对于这个简单的任务来说,该过程通常感觉太复杂了。特别是,当只有一 FPGA 通过一 JTAG cable连接到计算机时,用户界面需要很多不必要的步骤。如果只有一 FPGA,为什么计算机不能推断出它应该将比特流文件写入这 FPGA?为什么需要明确告诉工具我们想要做什么?实际上只有一个选择。

一个可能的解决方案是使用一个可以一步完成这个任务的 bash 脚本。这个脚本(script)通过 JTAG cable找到连接到电脑的 FPGA ,并将比特流文件发送给这 FPGA。

脚本(script)

这是将比特流文件发送到 FPGA的脚本:

#!/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 脚本包含一个 Tcl 脚本。提供给“vivado”命令的 arguments 之一是“-source /dev/stdin”。这导致 Vivado 从标准输入(standard input)读取 Tcl 脚本。在“<<”的帮助下,可以使用众所周知的“here document”方法。

使用脚本

将上面显示的脚本写入文件,例如名为 fpga_program。使用以下命令使此文件可执行:

$ chmod a+x fpga_program

在尝试运行脚本之前,请使用类似以下命令设置 environment 变量:

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

更改此命令中的“/opt/xilinx/Vivado/2023.1”部分,以便路径(path)反映计算机上安装 Vivado 的位置。

然后使用以下命令运行脚本:

$ ./program_fpga myproj.bit

当然,将“myproj.bit”更改为您的比特流文件的名称。

当脚本运行时,Vivado 会产生大量输出,但最后一行要么是“Programming successful”,要么是“Programming failed”。

关于脚本的一些评论

此脚本已在 Vivado 2015.2 和 Vivado 2023.1上进行了测试,因此很有可能适用于所有版本的 Vivado。但是,对于较新版本的 Vivado,该软件会打印出以下警告:

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

尽管有此警告,脚本仍可正常工作。但是,未来版本的 Vivado 可能无法识别“open_hw”命令。如果此命令导致错误,请在脚本中将此命令更改为“open_hw_manager”。

脚本的另一个可能变化与脚本生成的输出量有关。如果您不想要那么多文本输出,请添加 redirection ,以便输出转到 /dev/null。

如果你想要这个,请在脚本中找到此行:

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 使用 TCP/IP server 与硬件通信(监听端口 3121(port 3121))。 Vivado 会根据需要自动启动此 server 。

但是如果 server 是由某个版本的 Vivado启动的,而另一个版本的 Vivado 尝试与 FPGA连接,则通信可能不起作用。原因是 server 的版本与 Vivado的版本相同。使用带有图形用户界面的 Hardware Manager 时也会发生这种情况。

出现该问题时,可以用以下命令停止 server :

$ killlall hw_server

请注意,如果一段时间内不使用, server 会自动停止运行。

此页面由英文自动翻译。 如果有不清楚的地方,请参考原始页面
Copyright © 2021-2024. All rights reserved. (38a9d8fd)