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

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) beginif (counter < High_Time) begincounter <= counter + 1;endelse begincounter <= 0;led = ~led;end
endendmodule

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

相关文章:

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 网…...

双臂机器人

目录 一、双臂机器人简介 二、双臂机器人系统的组成 三、双臂机器人面临的主要挑战 3.1 协调与协同控制问题 3.2 力控制与柔顺性问题 3.3 路径规划与轨迹优化问题 3.4 感知与环境交互 3.5 人机协作问题 3.6 能源与效率问题 3.7 稳定性与可靠性问题 四、双臂机器人…...

【Lua热更新】上篇

Lua 热更新 - 上篇 下篇链接&#xff1a;【Lua热更新】下篇 文章目录 Lua 热更新 - 上篇一、AssetBundle1.理论2. AB包资源加载 二、Lua 语法1. 简单数据类型2.字符串操作3.运算符4.条件分支语句5.循环语句6.函数7. table数组8.迭代器遍历9.复杂数据类型 - 表9.1字典9.2类9.3…...

Ubuntu批量修改文件名

文章目录 批量重命名文件&#xff1a;Ubuntu下使用find命令结合sed和mv参考 批量重命名文件&#xff1a;Ubuntu下使用find命令结合sed和mv 在日常开发和文件管理中&#xff0c;有时我们需要批量重命名一批文件&#xff0c;比如将文件名中的某个特定字符串替换为另一个字符串。…...

食家巷大烤馍:岁月沉淀下的麦香传奇

在繁华都市的街角巷尾&#xff0c;隐藏着许多不为人知的美食宝藏&#xff0c;食家巷大烤馍便是其中之一。它宛如一位低调的美食大师&#xff0c;默默散发着独特的魅力&#xff0c;用最质朴的味道&#xff0c;征服着每一个过往食客的味蕾。 初见食家巷大烤馍&#xff0c;你会被…...

harmony UI组件学习(1)

Image 图片组件 string格式&#xff0c;通常用来加载网络图片&#xff0c;需要申请网络访问权限:ohos.permission.INTERNET Image(https://xxx.png) PixelMap格式&#xff0c;可以加载像素图&#xff0c;常用在图片编辑中 Image(pixelMapobject) Resource格式&#xff0c;加…...

BTP Integration Suite CPI Apache Camel

官网文档&#xff1a; https://help.sap.com/docs/integration-suite/sap-integration-suite/what-is-sap-integration-suite CPI 云集成(CPI)有以下几个特性&#xff1a; SAP Cloud Integration通过消息交换支持端到端流程集成。 它基于Apache软件基金会的开源框架Camel。 …...

vitepress-打包SyntaxError: Element is missing end tag.

一、vitepress打包编译报错Element is missing end tag. 背景&#xff1a; 新增了一些笔记准备上传到git仓库&#xff0c;持续集成部署的时候&#xff0c;控制台报错了&#xff0c;错误信息如下&#xff1a; SyntaxError: Element is missing end tag. 仔细看了下控制台几乎没啥…...

【从零开始入门unity游戏开发之——C#篇21】C#面向对象的封装——`this`扩展方法、运算符重载、内部类、`partial` 定义分部类

文章目录 一、this扩展方法1、扩展方法的基本语法2、使用扩展方法3、扩展方法的注意事项5、扩展方法的限制6、总结 二、运算符重载1、C# 运算符重载2、运算符重载的基本语法3. 示例&#xff1a;重载加法运算符 ()4、使用重载的运算符5、支持重载的运算符6、不能重载的运算符7、…...

Java进程占用的内存有哪些部分?

大家好&#xff0c;我是锋哥。今天分享关于【Java进程占用的内存有哪些部分?】面试题。希望对大家有帮助&#xff1b; Java进程占用的内存有哪些部分? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Java进程在运行时&#xff0c;会将内存划分为多个区域&#xf…...

【华为OD机试真题】【2024年E卷】数值同化-队列BFS(C++/Java/Python)

文章目录 分值&#xff1a;200题目描述思路复杂度分析AC 代码 分值&#xff1a;200 题目描述 存在一个 m * n 的 二维数组只&#xff0c;其成员取值范围为0, 1, 2。其中值为1的元素具备同化特性&#xff0c;每经过1S&#xff0c;将上下左右值为0的元素同化为1。而值为2的元素…...

“魔法糖果盒的秘密:用朴素贝叶斯算法猜糖果颜色”

想象一下&#xff0c;你有一个神奇的糖果盒&#xff0c;这个糖果盒里有两种糖果&#xff1a;红色的和蓝色的。你闭上眼睛&#xff0c;从盒子里拿出一个糖果&#xff0c;然后尝一尝&#xff0c;你想知道这个糖果是红色的还是蓝色的。朴素贝叶斯算法就像是一个魔法规则&#xff0…...

linux中docker命令大全

基本命令 docker pull 拉取镜像 docker pull docker push 推送镜像到DockerRegistry docker push docker images 查看本地镜像 docker images docker rmi 删除本地镜像 docker rmi docker run 创建并运行容器&#xff08;不能重复创建&#xff09; docker run d…...

Python `str.strip()` 的高级用法详解

Python str.strip 的高级用法详解 1. str.strip() 的基本用法2. str.strip() 的高级用法2.1 移除指定字符2.2 移除多个指定字符2.3 移除换行符和制表符2.4 结合正则表达式的高级处理 3. lstrip() 和 rstrip() 的用法3.1 lstrip()&#xff1a;移除左端字符3.2 rstrip()&#xff…...

[蓝桥杯 2019 国 B] 排列数

目录 前言 题解 思路 疑问 解答 前言 对于本篇文章是站在别人的基础之上来写的&#xff0c;对于这道题作为2019年国赛B组的最难的一题&#xff0c;他的难度肯定是不小的&#xff0c;这道题我再一开始接触的时候连思路都没有&#xff0c;也是看了两三遍别人发的题解&#x…...

[bug] StarRocks borker load意向之外的bug

意向之外&#xff0c;又清理之中 背景&#xff1a; StarRocks各方面碾压相同类型的数据库&#xff0c;最近我们要从生成HIVE导历史数据&#xff08;ORC格式&#xff09;到StarRocks&#xff0c;前期小测一下&#xff0c;在测试是没问题&#xff0c;上生产先导2个月的数据&…...

2025年前端面试热门题目——HTML|CSS|Javascript|TS知识

以下是对这些 HTML 面试问题的详细解答&#xff1a; 1. HTML 的 src 和 href 属性有什么区别? src (Source) 属性&#xff1a; 用于嵌入资源&#xff0c;例如图像、脚本或 iframe。加载资源时&#xff0c;当前页面的加载会暂停&#xff0c;直到资源加载完成。常用于 <img&g…...

Linux中部署项目

1.下载JDK17 进入 /usr/local 目录&#xff0c;创建 java 文件夹。并将 JDK17 上传到 java 目录下。 上传成功后&#xff0c;通过cd命令进入Java文件夹目录&#xff0c;解压 JDK17 压缩包&#xff0c;命令 unzip zulu17.44.53-ca-jdk17.0.8.1-linux_x64.zip。 如果报错说 u…...

在 CentOS 上安装 MySQL 8

在 CentOS 上安装 MySQL 8 您可以按照以下步骤操作&#xff1a; 1. 更新系统 首先&#xff0c;更新系统软件包以确保安装的最新版本。 sudo yum update -y 2. 安装 MySQL 8 安装 MySQL 存储库 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.r…...

gradle项目下载依赖报错

报错信息 Cannot resolve external dependency org.projectlombok:lombok:1.18.36 because no repositories are defined. Required by:project :Possible solution:- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/…...

Windows 11 + RTX4060Ti 实战:用PyTorch复现Kaggle冠军的U-Net,搞定Kvasir息肉分割

Windows 11 RTX4060Ti 实战&#xff1a;用PyTorch复现Kaggle冠军的U-Net&#xff0c;搞定Kvasir息肉分割 在消费级硬件上实现专业级医学图像分割并非遥不可及。当RTX 40系列显卡遇上PyTorch框架&#xff0c;配合Kaggle冠军团队的U-Net架构&#xff0c;我们完全可以在Windows 1…...

实战指南:基于快马AI生成贴合业务场景的问卷系统,超越通用opencode

在开发一个在线问卷调查系统时&#xff0c;很多开发者会直接使用现成的opencode或开源组件。但实际业务中&#xff0c;通用方案往往难以完全匹配特定需求。最近我在InsCode(快马)平台上尝试了一个实战项目&#xff0c;通过AI生成高度定制化的问卷系统后台API&#xff0c;效果远…...

SMT波浪焊接工艺精准控制品质核心

SMT波浪焊接过程中&#xff0c;设备是基础&#xff0c;而工艺参数的精准控制则是决定焊接质量的核心。很多电子制造企业都会遇到这样的问题&#xff1a;同样的设备、同样的原材料&#xff0c;不同批次的产品焊接质量却参差不齐&#xff0c;有的焊点牢固、外观规整&#xff0c;有…...

别再死记硬背了!用PyTorch图解U-Net中的卷积、反卷积与Skip Connection

从张量视角拆解U-Net&#xff1a;PyTorch实战中的维度魔术与跳跃连接 当你第一次看到U-Net的对称结构图时&#xff0c;是否曾被那些上下翻飞的箭头和不断变化的数字搞得晕头转向&#xff1f;作为医学图像分割领域的标杆架构&#xff0c;U-Net的核心秘密其实藏在三个关键操作里…...

Polars 2.0清洗稳定性生死线:当lazy.eval()遭遇OOM崩溃,这3个编译期优化参数必须重置!

第一章&#xff1a;Polars 2.0清洗稳定性生死线&#xff1a;当lazy.eval()遭遇OOM崩溃&#xff0c;这3个编译期优化参数必须重置&#xff01;在 Polars 2.0 中&#xff0c;lazy.eval() 的执行模型已深度耦合 Rust 编译期查询优化器&#xff08;QO&#xff09;&#xff0c;但默认…...

腾讯 CodeBuddy 全形态解析:IDE、CLI 与插件如何重塑 AI 编程体验

1. CodeBuddy 三形态全景解析&#xff1a;从终端到桌面的AI编程革命 第一次用CodeBuddy的CLI工具时&#xff0c;我在终端里输入"帮我写个Python爬虫抓取天气数据"&#xff0c;三秒钟后看着自动生成的完整代码&#xff0c;手里的咖啡差点洒在键盘上。这就是腾讯CodeB…...

AI赋能运维:基于快马平台打造智能域名故障诊断与修复建议助手

最近在维护公司网站时遇到了新老域名切换导致的访问故障&#xff0c;传统排查流程需要手动分析日志、逐个测试可能原因&#xff0c;效率很低。这次尝试用InsCode(快马)平台的AI能力搭建了一个智能诊断工具&#xff0c;效果超出预期。分享下具体实现思路和关键环节&#xff1a; …...

ViPER4Windows-Patcher 音效修复工具:让无损音质在Windows 10/11完美呈现

ViPER4Windows-Patcher 音效修复工具&#xff1a;让无损音质在Windows 10/11完美呈现 【免费下载链接】ViPER4Windows-Patcher Patches for fix ViPER4Windows issues on Windows-10/11. 项目地址: https://gitcode.com/gh_mirrors/vi/ViPER4Windows-Patcher &#x1f3…...

保姆级教程:用C# WinForm给STM32写个Modbus固件升级工具(附完整源码)

从零构建STM32固件升级工具&#xff1a;C# WinForm与Modbus协议深度实践 1. 开发环境与项目初始化 在Visual Studio 2022中新建Windows窗体应用项目时&#xff0c;建议选择.NET Framework 4.7.2或更高版本以获得最佳兼容性。项目创建后&#xff0c;首先需要配置NuGet包管理器安…...

新手友好!Qwen3-ASR-1.7B镜像使用全攻略:从安装到实战

新手友好&#xff01;Qwen3-ASR-1.7B镜像使用全攻略&#xff1a;从安装到实战 1. 为什么选择Qwen3-ASR-1.7B&#xff1f; 语音识别技术正在改变我们处理音频内容的方式。Qwen3-ASR-1.7B作为阿里云通义千问团队开发的开源语音识别模型&#xff0c;在识别精度和语言支持方面表现…...