当前位置: 首页 > article >正文

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 配置本机

4.3 vmWare 网线直连

5. 远程综合实现

5.1 设置 SSH 密钥代理转发

5.2 设置 dash

5.3 测试连通

5.4 统一文件

5.4.1 本地机 NFS 共享

5.4.2 远程机 NFS 客户端

5.5 执行远程编译

5.5.1 设置环境变量

5.5.2 选择 remote hosts

6. X11-forwarding 转发

7. 附

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 灯的状态(亮或灭)。

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 配置目标主机

1)确保连通信

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

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

# 目录: /opt/Xilinx/Vivado/2022.1/bin
# 运行如下程序
>> ./hw_server

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

****** 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 密钥代理转发

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

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

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

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

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 服务器

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 服务器生效。

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

5.5 执行远程编译

5.5.1 设置环境变量

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

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 执行命令:

>> 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

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


http://www.kler.cn/a/446741.html

相关文章:

  • python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
  • 【开源免费】基于SpringBoot+Vue.JS房屋租赁管理系统(JAVA毕业设计)
  • 如何用Redis实现分布式锁?
  • CPU性能优化--函数分组
  • dolphinscheduler服务RPC框架源码解析(八)RPC提供者服务整合Spring框架实现
  • CH340系列芯片驱动电路·CH340系列芯片驱动!!!
  • 如何看待Java面试造火箭工作拧螺丝?
  • 怎么将pdf中的某一个提取出来?介绍几种提取PDF中页面的方法
  • 数据结构与算法学习笔记----Prim算法
  • 复盘:“辩论赛”复盘
  • 容联云孔淼:金融数智化深水区,从数字化工具到业务变革提效
  • 驾考科目一考什么?
  • 感受野如何计算?
  • vtie项目中使用到了TailwindCSS,如何打包成一个单独的CSS文件(优化、压缩)
  • 阿里云OSS批量导出下载地址 OSS批量导出 OSS导出清单
  • 应用端sql慢查询监控分析
  • git全教程(长期更新)
  • Leetcode分隔链表
  • 急!急!急!电脑丢失msvcr100.dll怎么办?电脑“缺失msvcr100.dll”要怎么解决?
  • 使用计算机创建一个虚拟世界
  • 【P2P】【Go】采用go语言实现udp hole punching 打洞 传输速度测试 ping测试
  • 《XML》教案 第1章 学习XML基础
  • C# OpenCV机器视觉:图像拼接
  • 重拾设计模式--建造者模式
  • MFC/C++学习系列之简单记录8——消息映射
  • 2.6 网络面试问题