Vivado - 远程调试 + 远程综合实现 + vmWare网络配置 + NFS 文件共享 + 使用 VIO 核

目录

1. 简介

2. VIO 配置

2.1 VIO IP

2.2 VIO 对比 ILA

3. VIO 示例

3.1 Led

3.1.1 工程配置

3.1.2 效果展示

3.2 Key

3.2.1 工程配置

3.2.1 效果展示

3.3 门控触发

3.3.1 工程配置

3.3.2 效果展示

4. 远程调试

4.1 网络连接

4.2 远程主机 hw_server

4.3 program_ftdi 编程

4.4 配置本地主机

5. vmWare 网线直连

6. 远程综合实现

6.1 设置 SSH 密钥代理转发

6.2 设置 dash

6.3 测试连通

6.4 统一文件

6.4.1 本地机 NFS 共享

6.4.2 远程机 NFS 客户端

6.5 执行远程编译

6.5.1 设置环境变量

6.5.2 选择 remote hosts

7. X11-forwarding 转发

8. 附

8.1 启用共享导致 DUP


1. 简介

分享 Vivado 远程开发的一些实用干货:

  • 远程 JTAG Debug
  • 远程综合实现(Run on remote hosts)
  • vmWare 网络配置
  • NFS 文件共享
  • X11-forwarding

附带介绍 VIO 核使用经验,Vivado 中的 ILA,不必多说,但凡需要抓取信号都要用到。相比于 ILA 善于捕获波形,而 VIO 则专注于静态信号的注入和输出。在没有不引入物理按键和 LED 灯的板卡中,非常好用。

本文分享三个案例,解释实际 VIO 常用到的几个场景(时钟门控信息、Key、Led)

测试板卡:Alinx XCKU5P

2. VIO 配置

2.1 VIO IP

每个 Probe_IN 或者 Probe_OUT 均可支持多比特。

2.2 VIO 对比 ILA

1)VIO(Virtual Input/Output)

主要特点:

  • 动态控制:允许用户在FPGA运行时动态修改信号的值。
  • 监视功能:可以实时监控信号的状态,帮助分析和调试。
  • 灵活性:适用于测试不同的设计方案,而无需物理改动硬件。

2)ILA(Integrated Logic Analyzer)

主要特点:

  • 信号捕获:可以配置触发条件,当这些条件满足时捕获信号数据。
  • 时序分析:帮助检测和分析信号之间的时序问题。
  • 深度分析:可以查看信号的历史数据,帮助理解复杂的逻辑问题。

3. VIO 示例

3.1 Led

3.1.1 工程配置

通过 VIO 指示状态。

led_blink 模块:

模块接收一个时钟信号 clk 并控制一个 LED 灯的状态(亮或灭)。

module led_blink(
    input           clk,
    output  reg     led
    );

parameter High_Time = 100_000_000 - 1;

reg [31:0]  counter = 0;

always @(posedge clk) begin
    if (counter < High_Time) begin
        counter <= counter + 1;
    end
    else begin
        counter <= 0;
        led = ~led;
    end
end

endmodule

XDC 约束:

set_property PACKAGE_PIN K22        [get_ports {CLK_IN_D_0_clk_p[0]}]
set_property IOSTANDARD DIFF_SSTL12 [get_ports {CLK_IN_D_0_clk_p[0]}]

3.1.2 效果展示

可以看到 LED 按照指定频率闪烁。

3.2 Key

3.2.1 工程配置

通过 VIO 触发 ILA。

3.2.1 效果展示

其中按键可以配置成多种模式:

  • 文本
  • 高电平有效的 Button(按下为高,松开为低)
  • 低电平有效的 Button(按下为低,松开为高)
  • 翻转 Button(按下则翻转高低电平)

3.3 门控触发

3.3.1 工程配置

通过 VIO 控制时钟的输出。

3.3.2 效果展示

4. 远程调试

4.1 网络连接

4.2 远程主机 hw_server

远程主机操作系统为:Windows 10 企业版

1)安装 Hardware Server 服务:

2)安装后目录结构(在对应目录,按住 shift,右键单击空白处,打开 powershell):

>> ls C:\Xilinx\HWSRVR\202x.x

Mode      LastWriteTime       Length Name
----      -------------       ------ ----
d-----            2025/              bin
d-----            2025/              data
d-----            2025/              lib
d-----            2025/              scripts
d-----            2025/              tps

3)启动 hw_server 服务,直接运行脚本即可:

****** Xilinx hw_server v2022.1
  **** Build date : Apr 18 2022 at 16:02:36
    ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.

INFO: hw_server application started
INFO: Use Ctrl-C to exit hw_server application

Server-Properties: {xxx}
INFO: To connect to this hw_server instance use url: TCP:xxx.xxx.xxx.xxx:3121

4.3 program_ftdi 编程

即便安装了最简单的 hw_server,也可以使用 program_ftdi 进行编程:

1)在 C:\Xilinx\HWSRVR\202x.x\bin 目录中,启动 powershell。

2)查看帮助信息:

PS C:\Xilinx\HWSRVR\202x.x\bin> .\program_ftdi -help

---
****** program_ftdi v2022.1
  **** Build date : Apr 18 2022-16:02:33
    ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.


Short Description:
Write/Read to FTDI EEPROM for Xilinx JTAG Tools support

Syntax:
program_ftdi {-write -ftdi=<ftdi_part> -serial=<serial_number> [options] |
              -write -filein=<cfg_filein> |
              -read  [-fileout=<cfg_fileout>] |
              -erase} [-help]

options:
Name            Description
------------------------------------------------------------------------------------------------------
-f, -fdti                        Specify the ftdi device to be programmed <FT232H | FT2232H | FT4232H>
-s, -serial                      Serial number to be written into the EEPROM
[-v, --vendor]                   Vendor information
[-b, --board]                    Name of the board/product being programmed
[-d, -desc, -description]        A short description of the board
-fi, -filein                     Input file with all fields to be written
[-fo, -fileout]                  File to which the FDI EEPROM should be read back
[-lh, -longhelp]                 Get long help description for program_ftdi util

Examples:
program_ftdi -write -ftdi FT2232H -serial 0ABC01 -vendor "my vendor co" -board "my board" -desc "my product desc"
program_ftdi -write -filein <path_to_config_file>
program_ftdi -read
program_ftdi -read -fileout <path_to_config_file>
program_ftdi -erase

3)编程示例:

.\program_ftdi -write -ftdi FT2232H -serial 0ABC01 -vendor "my vendor co" -board "my board" -desc "my product desc"

成功后有如下提示:

****** program_ftdi v2022.1
  **** Build date : Apr 18 2022-16:02:33
    ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.


INFO: ftdi part = FT2232H
INFO: Serial = 0ABC01
INFO: Detected 1 devices
INFO: Device location = 609
INFO: fwid=xxx
INFO: FTDI Programming Passed

4.4 配置本地主机

1)确保连通信

通过 ping 能否发现远程主机。

2)在本地主机 Vivado 中,选件打开新的目标(Open New Target)。

3)输入目标主机的 IP,端口保持默认。 

4)启动后,成功发现目标主机。

5)可进行正常程序下载和调试

5. vmWare 网线直连

1)打开 vmWave 中的网络编辑器

打开:菜单栏 -> 编辑(E) -> 虚拟网络编辑器(N)

2)配置虚拟网络

如果电脑包含多个网卡,需要选择对应网卡(和 FPGA 相连的主机)。

此步骤会生成对应的虚拟网络适配器。

上图三个配置中,由于桥接模式会直接连接到相关网络硬件,不会生成虚拟网络适配器,另外两个配置,均会生成对应的虚拟网络适配器。如下图:

三者区别:

  • VMnet0,桥接模式,虚拟机相当于一台实体机,可以与外网互相 ping 通。
  • VMnet1,仅主机模式,虚拟机之间、主机与虚拟机之间互访,但虚拟机无法访问外网。
  • VMnet8,NAT 模式,虚拟机之间、主机与虚拟机之间互访,虚拟机可以通过主机的 VMnet8 访问外网,外网无法ping通虚拟机。

3)应用虚拟网络

在虚拟机实体中,选择某一个虚拟网络适配器,下面这个配置选择了 VMnet0,即桥接模式。

6. 远程综合实现

6.1 设置 SSH 密钥代理转发

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub | ssh fo@192.168.137.3 "cat - >> ~/.ssh/authorized_keys"
ssh-add

1)ssh-keygen

生成 SSH 密钥对,-t rsa 指定密钥类型为 RSA,运行此命令后,系统通常会询问你保存密钥的位置(保持默认~/.ssh/id_rsa),以及输入一个密码(可选)来保护私钥。

生成两个文件:一个私钥文件(默认为 id_rsa)和一个公钥文件(默认为 id_rsa.pub)。私钥不应该泄露给任何人,而公钥可以安全地分享。

2)cat

这条命令用于将你的公钥添加到远端服务器的 authorized_keys 文件中,这是 SSH 服务器用来验证登录请求的公钥列表。设置后,当你使用 SSH 尝试从本地机器登录到远程服务器时,服务器可以通过比对 authorized_keys 中的公钥来验证你的身份,从而允许无密码登录。

3)ssh-add

ssh-add 命令用于将私钥添加到 SSH 代理中。

4)测试

ssh fo@192.168.137.3

可以直接建立连接而无需密码,则成功。

6.2 设置 dash

1)查看当前 sh 设置

ll /bin/sh
---
lrwxrwxrwx 1 root root 4 7月  30 19:35 /bin/sh -> dash*

 2)重新配置 dash

sudo dpkg-reconfigure dash

否希望将 dash 作为 /bin/sh 的默认选项?

  • 是,系统会将 /bin/sh 的链接指向 dash。
  • 否,则 sh 将继续链接到 bash 或其他当前设置的 shell。

注意:远程、本地都需要运行一遍。

6.3 测试连通

或者在 TCL console 中执行:

exec ssh -q -o BatchMode=yes fo@192.168.137.3 who
---
fo       pts/0        2024-12-17 11:18 (192.168.137.1)
fo       :0           2024-12-17 10:59 (:0)

 即表示连接成功。

6.4 统一文件

6.4.1 本地机 NFS 共享

1)在本地主机安装 NFS 服务器

sudo apt update
sudo apt install nfs-kernel-server

2)创建共享目录

sudo mkdir /nfsroot
sudo chown nobody:nogroup /nfsroot
sudo chmod 777 /nfsroot

3)配置NFS导出文件,编辑/etc/exports文件,添加共享目录及其权限

sudo nano /etc/exports

在文件中添加以下行:

/nfsroot  *(rw,sync,no_subtree_check,no_root_squash)

4)使配置生效,重启 NFS 服务器

sudo exportfs -a
sudo systemctl restart nfs-kernel-server

5)验证 NFS 服务器

在本地机器上运行:

>> showmount -e
---
Export list for ubuntu:
/nfsroot *

在远程机上运行:

>> showmount -e 192.168.137.2
---
Export list for 192.168.137.2:
/nfsroot *

均表示 NFS 服务器生效。

6.4.2 远程机 NFS 客户端

1)安装 NFS 客户端

sudo apt update
sudo apt install nfs-common

 2)查看 NFS 服务器上的共享目录

>> showmount -e 192.168.137.2
---
Export list for 192.168.137.2:
/nfsroot *

3) 挂载NFS共享目录

创建一个本地目录作为挂载点,然后挂载NFS共享目录。

sudo mkdir /nfsroot
sudo chmod 777 /nfsroot
sudo mount -t nfs 192.168.137.2:/nfsroot /nfsroot

4)查看挂载的目录

挂载成功后,可以在远程机上使用 ls 命令查看挂载目录的内容:

>> ll /nfsroot/
---
total 60
drwxrwxrwx  4 nobody nogroup  4096 12月 17 14:29 ./
drwxr-xr-x 21 root   root     4096 12月 17 15:17 ../
-rw-rw-r--  1 fl     fl       1896 12月 17 14:56 vivado.jou
-rw-rw-r--  1 fl     fl      10063 12月 17 14:56 vivado.log
-rw-rw-r--  1 fl     fl      21961 12月 17 14:56 vivado_pid12961.str
drwxrwxr-x  3 fl     fl       4096 12月 17 14:28 v_tt/
drwxrwxr-x  3 fl     fl       4096 12月 17 14:29 .Xil/

5)卸载NFS共享目录

 如果需要卸载 NFS 共享目录,可以使用以下命令:

sudo umount /nfsroot

6.5 执行远程编译

6.5.1 设置环境变量

在远程主机的 bashrc 中,添加环境变量:

export XILINX_VIVADO="/opt/Xilinx/Vivado/2022.1"
export PATH="$PATH:$XILINX_VIVADO/bin"

6.5.2 选择 remote hosts

7. X11-forwarding 转发

最直接,最方便。

如果网络延迟低,通过 X11-forwarding 可以更为方便使用远程主机。

在 MobaXTerm 中 SSH 执行命令:

>> vivado
---

****** Vivado v2022.1 (64-bit)
  **** SW Build 3526262 on Mon Apr 18 15:47:01 MDT 2022
  **** IP Build 3524634 on Mon Apr 18 20:55:01 MDT 2022
    ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.

start_gui

可以直接在本地打开远程主机的 Vivado IDE 图形界面:

8. 附

8.1 启用共享导致 DUP

>> ping -c 3 192.168.101.220
---
PING 192.168.101.220 (192.168.101.220) 56(84) bytes of data.
From 192.168.101.225 icmp_seq=1 Redirect Network(New nexthop: 220.101.168.192)
64 bytes from 192.168.101.220: icmp_seq=1 ttl=64 time=0.986 ms
64 bytes from 192.168.101.220: icmp_seq=1 ttl=64 time=0.986 ms (DUP!)
64 bytes from 192.168.101.220: icmp_seq=1 ttl=63 time=1.56 ms (DUP!)
64 bytes from 192.168.101.220: icmp_seq=1 ttl=63 time=1.56 ms (DUP!)
From 192.168.101.225 icmp_seq=2 Redirect Network(New nexthop: 220.101.168.192)
64 bytes from 192.168.101.220: icmp_seq=2 ttl=64 time=1.42 ms
64 bytes from 192.168.101.220: icmp_seq=2 ttl=64 time=1.42 ms (DUP!)
64 bytes from 192.168.101.220: icmp_seq=2 ttl=63 time=1.42 ms (DUP!)
64 bytes from 192.168.101.220: icmp_seq=2 ttl=63 time=1.42 ms (DUP!)
From 192.168.101.225 icmp_seq=3 Redirect Network(New nexthop: 220.101.168.192)
64 bytes from 192.168.101.220: icmp_seq=3 ttl=64 time=0.993 ms
64 bytes from 192.168.101.220: icmp_seq=3 ttl=64 time=0.993 ms (DUP!)
64 bytes from 192.168.101.220: icmp_seq=3 ttl=63 time=0.993 ms (DUP!)
64 bytes from 192.168.101.220: icmp_seq=3 ttl=63 time=0.993 ms (DUP!)

--- 192.168.101.220 ping statistics ---
3 packets transmitted, 3 received, +9 duplicates, +3 errors, 0% packet loss, time 2007ms
rtt min/avg/max/mdev = 0.986/1.228/1.561/0.242 ms

取消共享设置:

DUP 消失:

>> ping -c 3 192.168.101.220
---
PING 192.168.101.220 (192.168.101.220) 56(84) bytes of data.
64 bytes from 192.168.101.220: icmp_seq=1 ttl=64 time=0.784 ms
64 bytes from 192.168.101.220: icmp_seq=2 ttl=64 time=1.39 ms
64 bytes from 192.168.101.220: icmp_seq=3 ttl=64 time=1.10 ms

--- 192.168.101.220 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2011ms
rtt min/avg/max/mdev = 0.784/1.090/1.392/0.248 ms

Vivado的加速之路:Launch runs on Remote hosts-在下天锦

### 使用 Notepad++ 编辑 Vivado 项目文件或配置文件 为了使 Notepad++ 能够作为默认编辑器来处理 Vivado 的文件,需按照特定步骤完成设置。 #### 设置 Vivado 中的外部编辑器选项 在 Vivado 环境下指定 Notepad++ 为首选代码编辑工具时,应当进入 Vivado 的设置面板,在其中定位至编辑器选择部分。在此处手动添加自定义编辑器的位置信息[^4]。 对于 Windows 用户来说,这涉及到获取 Notepad++ 安装目录的确切路径,并将其转换成适合 Unix 风格的形式——即将反斜杠 `\` 替换成正斜杠 `/`。完整的命令行应指向 `notepad++.exe` 文件,并在其后附加 `[file name]` 参数以便传递待编辑的具体文档名称给应用程序执行打开操作[^1]。 #### 修改路径格式适配 Linux 或 Ubuntu 平台下的 Vivado 当操作系统切换到基于 Linux 的发行版如 Ubuntu 时,则要确认已预先安装好兼容版本的 Notepad++ (例如通过 snap 工具获得官方支持包),并且可以从命令行成功启动该应用;之后再依照相同逻辑调整路径字符串中的分隔符方向,确保其符合当前工作环境的要求[^5]。 ```bash # 示例:假设 Notepad++ 安装于 /snap/notepad-plus-plus/current/bin/ /snap/notepad-plus-plus/current/bin/notepad++.exe [file name] ``` 一旦上述配置无误,每当用户尝试查看或修改任何由 Vivado 托管的数据资源时,系统便会调用预设好的第三方文本处理器来进行交互式的编码体验优化服务了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值