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-在下天锦

相关推荐
国科安芯14 小时前
ASP4644芯片低功耗设计思路解析
网络·单片机·嵌入式硬件·安全
充哥单片机设计14 小时前
【STM32项目开源】基于STM32的智能厨房火灾燃气监控
stm32·单片机·嵌入式硬件
CiLerLinux21 小时前
第四十九章 ESP32S3 WiFi 路由实验
网络·人工智能·单片机·嵌入式硬件
时光の尘21 小时前
【PCB电路设计】常见元器件简介(电阻、电容、电感、二极管、三极管以及场效应管)
单片机·嵌入式硬件·pcb·二极管·电感·三极管·场效应管
Lu Zelin21 小时前
单片机为什么不能跑Linux
linux·单片机·嵌入式硬件
宁静致远20211 天前
stm32 freertos下基于hal库的模拟I2C驱动实现
stm32·嵌入式硬件·freertos
bnsarocket1 天前
Verilog和FPGA的自学笔记1——FPGA
笔记·fpga开发·verilog·自学
最遥远的瞬间1 天前
一、通用的FPGA开发流程介绍
fpga开发
Wave8451 天前
STM32--智能小车
stm32·单片机·嵌入式硬件
weixin_450907281 天前
第八章 FPGA 片内 FIFO 读写测试实验
fpga开发