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

目录

[1. 简介](#1. 简介)

[2. VIO 配置](#2. VIO 配置)

[2.1 VIO IP](#2.1 VIO IP)

[2.2 VIO 对比 ILA](#2.2 VIO 对比 ILA)

[3. VIO 示例](#3. VIO 示例)

[3.1 Led](#3.1 Led)

[3.1.1 工程配置](#3.1.1 工程配置)

[3.1.2 效果展示](#3.1.2 效果展示)

[3.2 Key](#3.2 Key)

[3.2.1 工程配置](#3.2.1 工程配置)

[3.2.1 效果展示](#3.2.1 效果展示)

[3.3 门控触发](#3.3 门控触发)

[3.3.1 工程配置](#3.3.1 工程配置)

[3.3.2 效果展示](#3.3.2 效果展示)

[4. 远程调试](#4. 远程调试)

[4.1 配置目标主机](#4.1 配置目标主机)

[4.2 配置本机](#4.2 配置本机)

[4.3 vmWare 网线直连](#4.3 vmWare 网线直连)

[5. 远程综合实现](#5. 远程综合实现)

[5.1 设置 SSH 密钥代理转发](#5.1 设置 SSH 密钥代理转发)

[5.2 设置 dash](#5.2 设置 dash)

[5.3 测试连通](#5.3 测试连通)

[5.4 统一文件](#5.4 统一文件)

[5.4.1 本地机 NFS 共享](#5.4.1 本地机 NFS 共享)

[5.4.2 远程机 NFS 客户端](#5.4.2 远程机 NFS 客户端)

[5.5 执行远程编译](#5.5 执行远程编译)

[5.5.1 设置环境变量](#5.5.1 设置环境变量)

[5.5.2 选择 remote hosts](#5.5.2 选择 remote hosts)

[6. X11-forwarding 转发](#6. X11-forwarding 转发)

[7. 附](#7. 附)

[7.1 启用共享导致 DUP](#7.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 灯的状态(亮或灭)。

cpp 复制代码
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 约束:

bash 复制代码
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 配置目标主机

1)确保连通信

通过 ping 能否发现目标主机。

在目标主机上启动 hw_server。我的目标主机 IP 地址为:192.168.101.220。

bash 复制代码
# 目录: /opt/Xilinx/Vivado/2022.1/bin
# 运行如下程序
>> ./hw_server

2)出现如下信息表示启动服务成功:

bash 复制代码
****** Xilinx hw_server v2022.1
  **** Build date : Apr 18 2022 at 16:10:30
    ** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.

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

INFO: To connect to this hw_server instance use url: TCP:ubuntu:3121

4.2 配置本机

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

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

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

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

4.3 vmWare 网线直连

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

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

2)配置虚拟网络

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

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

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

三者区别:

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

3)应用虚拟网络

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

5. 远程综合实现

5.1 设置 SSH 密钥代理转发

bash 复制代码
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)测试

bash 复制代码
ssh fo@192.168.137.3

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

5.2 设置 dash

1)查看当前 sh 设置

bash 复制代码
ll /bin/sh
---
lrwxrwxrwx 1 root root 4 7月  30 19:35 /bin/sh -> dash*

2)重新配置 dash

bash 复制代码
sudo dpkg-reconfigure dash

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

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

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

5.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)

即表示连接成功。

5.4 统一文件

5.4.1 本地机 NFS 共享

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

bash 复制代码
sudo apt update
sudo apt install nfs-kernel-server

2)创建共享目录

bash 复制代码
sudo mkdir /nfsroot
sudo chown nobody:nogroup /nfsroot
sudo chmod 777 /nfsroot

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

bash 复制代码
sudo nano /etc/exports

在文件中添加以下行:

bash 复制代码
/nfsroot  *(rw,sync,no_subtree_check,no_root_squash)

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

bash 复制代码
sudo exportfs -a
sudo systemctl restart nfs-kernel-server

5)验证 NFS 服务器

在本地机器上运行:

bash 复制代码
>> showmount -e
---
Export list for ubuntu:
/nfsroot *

在远程机上运行:

bash 复制代码
>> showmount -e 192.168.137.2
---
Export list for 192.168.137.2:
/nfsroot *

均表示 NFS 服务器生效。

5.4.2 远程机 NFS 客户端

1)安装 NFS 客户端

bash 复制代码
sudo apt update
sudo apt install nfs-common

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

bash 复制代码
>> showmount -e 192.168.137.2
---
Export list for 192.168.137.2:
/nfsroot *

3) 挂载NFS共享目录

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

bash 复制代码
sudo mkdir /nfsroot
sudo chmod 777 /nfsroot
sudo mount -t nfs 192.168.137.2:/nfsroot /nfsroot

4)查看挂载的目录

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

bash 复制代码
>> 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 共享目录,可以使用以下命令:

bash 复制代码
sudo umount /nfsroot

5.5 执行远程编译

5.5.1 设置环境变量

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

bash 复制代码
export XILINX_VIVADO="/opt/Xilinx/Vivado/2022.1"
export PATH="$PATH:$XILINX_VIVADO/bin"

5.5.2 选择 remote hosts

6. X11-forwarding 转发

最直接,最方便。

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

在 MobaXTerm 中 SSH 执行命令:

bash 复制代码
>> 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 图形界面:

7. 附

7.1 启用共享导致 DUP

bash 复制代码
>> 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 消失:

bash 复制代码
>> 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-在下天锦

相关推荐
andylauren1 小时前
(5)STM32 USB设备开发-USB键盘
stm32·嵌入式硬件·计算机外设
Ronin-Lotus2 小时前
嵌入式硬件篇---ADC模拟-数字转换
笔记·stm32·单片机·嵌入式硬件·学习·低代码·模块测试
promising-w3 小时前
单片机基础模块学习——数码管
单片机·嵌入式硬件·学习
华清远见IT开放实验室3 小时前
嵌入式STM32创新教学:华清远见虚拟仿真实验平台与智能车项目师资培训
stm32·单片机·嵌入式硬件
zxfeng~3 小时前
AG32 FPGA 的 Block RAM 资源:M9K 使用
fpga开发·ag32
andylauren3 小时前
(1)STM32 USB设备开发-基础知识
stm32·单片机·嵌入式硬件
whik11944 小时前
FPGA 开发工作需求明确:关键要点与实践方法
fpga开发
末时清4 小时前
OLED--软件I2C驱动__标准库和HAL库
stm32·单片机·嵌入式硬件
whik11947 小时前
FPGA开发中的团队协作:构建高效协同的关键路径
fpga开发
南棱笑笑生7 小时前
20250117在Ubuntu20.04.6下使用灵思FPGA的刷机工具efinity刷机
fpga开发