Zynq开发之-PYNQ配置,XVC(Xilinx Virtual Cable)调试

Zynq开发的超级助手

  • PYNQ 是 Zynq 开发的超级助手,可以用 Python 语言和 Jupyter Notebook 来编写和运行程序,通过浏览器界面来交互和可视化结果。
  • PYNQ 可以轻松地控制 PL 侧逻辑,只需要加载不同的 overlay 库,就可以像调用函数一样使用 FPGA 的功能和外设。
  • 可以用 Python 来编写 PL 逻辑,事实上,要想充分利用 Zynq 的潜力,开发 PL 侧逻辑才是关键,因为所谓的“加速”,就是通过 PL 逻辑来实现的。
  • PYNQ 可以帮助快速地验证和测试 PL 设计,也可以在 PS 侧使用 Python 的丰富库和工具,来处理和分析数据。
  • PYNQ 是一个适合各种应用场景的框架,无论是图像处理、人工智能、数据科学、物联网、机器人等,都可以在 PYNQ 上找到合适的解决方案。
  • PYNQ 让 Zynq 开发变得更简单、更有趣、更有创意。

第一部分 - 构建PYNQ

进入PYNQ官网(http://www.pynq.io/home.html),可以了解基本知识。

进入Boards页面,可以查看官方支持的那些板卡。

这些都是官方直接提供支持的板卡,对于自定义板卡,就需要自行配置了,官方也提供说明,请移步:PYNQ SD Card image — Python productivity for Zynq (Pynq)

可以有多种方式实现配置PYNQ:

  • 通过petalinux构建带有PYNQ的SD卡启动镜像;
  • 通过install.sh直接在ubuntu中直接安装PYNQ包;

第一种适合批量生产,第二种适合象我这样只有少量zynq板卡的开发者。这里介绍第二种方法。

前提条件:已为KV260烧录好ubuntu 22.04镜像。

点击Kria PYNQ setup后,进入github仓库:

按照官方的操作流程,只需在KV260中执行3行代码,即可实现配置!

git clone <https://github.com/Xilinx/Kria-PYNQ.git>
cd Kria-PYNQ/
sudo bash install.sh -b KV260

现实却很打脸,无数次的失败,我硬着头皮把整个install.sh文件研究了一遍,供遇到同样问题的同学参考:

  1. 检查权限:代码首先检查是否以root权限运行,如果不是,则显示错误消息并退出。
  2. 命令行参数处理:代码检查是否接收到了正确数量的命令行参数,以确定要安装的板子类型(board)。
  3. 检查Ubuntu版本:代码检查当前操作系统的Ubuntu版本,并根据版本决定是否继续安装。
  4. 安装依赖:安装所需的Debian软件包,包括Python、开发库等。
  5. 创建虚拟环境:创建PYNQ的虚拟Python环境,其中包括一些必要的配置信息。
  6. 安装PYNQ库和相关工具:通过Python pip工具安装PYNQ库、PYNQ-Metadata、PYNQ-Utils等相关Python包。
  7. 安装Jupyter Notebook:安装Jupyter Notebook,并配置相关环境。
  8. 安装PYNQ的设备树覆盖:编译PYNQ的设备树覆盖,并将其插入到系统中。
  9. 安装示例Notebooks:根据板子类型安装不同的示例Notebooks,这些Notebooks包含了用于演示和学习的示例代码。
  10. 配置环境:修改一些配置文件和环境变量,以确保PYNQ的正确运行。
  11. 启动Jupyter服务:启动Jupyter服务,使用户可以通过Web浏览器访问PYNQ的Notebooks。
  12. 安装OpenCV:安装OpenCV库及相关依赖。
  13. 生成自测脚本:生成一个脚本,用于在安装完成后运行一些自测。
  14. 提供连接信息:输出一条消息,提供了连接到JupyterLab的URL和密码信息。

遇到具体问题,对照上述流程,检查哪一步出错,可能需要修改install.sh文件。举个例子:

[97] git clone <https://github.com/Xilinx/PYNQ.git> --branch v3.0.1 --depth 1 pynq

我们在https://github.com/Xilinx/PYNQ.git中已经找不到--branch v3.0.1这个版本,因为PYNQ仓库已经修改分支名称为images_v3.0.1,因此需要修改后再执行sudo bash install.sh -b KV260。

如果遇到 git clone 失败,可能需要设置 git 代理,请自行设置代理:

git config --global http.proxy [<http://192.168.101.xx>:](<http://192.168.101.37:1082/>)xxxx
git config --global https.proxy [<https://192.168.101.xx>:](<https://192.168.101.37:1082/>)xxxx

安装完毕后:JupyterLab现在可以通过Web浏览器访问,地址为<ip_address>:9090/lab或kria:9090/lab。密码是xilinx。

install.sh会默认安装一些案例,可用于快速入门PYNQ。

第二部分 - 使用XVC

解释下什么是XVC。

Xilinx虚拟电缆(XVC)是一种基于TCP/IP的协议,类似于JTAG电缆,提供一种无需使用物理电缆即可访问和调试FPGA或SoC设计的方式。

为什么要用XVC?

方便,不需要额外的JTAG设备即可调试PL逻辑代码。

在 vivado 中绘制如下 Block Design:

以上 Block Design 包含两个重要的IP核:

  • System ILA
  • Debug Bridge

Slice 核无关紧要,此IP引出一个pin用于风扇控制,系统可以自动调节风扇转速,去掉此IP和风扇控制后,风扇会一直运行在最大转速,除了吵一点,没有别的影响。如需使用,fan_en_b应当分配为A12引脚。

通过这个 Block Design,我们可以通过XVC观察计数器Binary Counter的输出。

配置完毕,生成bitstream,需要拷贝以下文件备用:

xx.gen\\sources_1\\bd\\design_1\\hw_handoff\\*.hwh
xx.runs\\impl_1\\*.bit

接下来需要在JupyterLab中操作,新建一个ipynb文件,并输入以下代码:

# 导入PYNQ的Overlay类,用来加载和管理PL逻辑
from pynq import Overlay
# 导入PYNQ的DebugBridge类,用来在zynq上创建一个XVC服务器
from pynq.lib.debugbridge import DebugBridge

# 创建一个Overlay对象,加载bitstream文件到PL。
base = Overlay("xvc_test.bit")
# 显示Overlay对象中包含的IP核的字典
base.ip_dict

# 创建一个DebugBridge对象,使用Overlay对象中名为"debug_bridge_0"的IP核作为XVC服务器的接口
db = DebugBridge(base.ip_dict['debug_bridge_0'])
# 启动XVC服务器,指定参数来配置服务器的缓冲区长度、地址、端口、重连选项和输出模式
db.start_xvc_server(bufferLen=4096, serverAddress="172.20.10.3", serverPort=2542, reconnect=True, verbose=True)

连接成功后,JupyterLab输出提示:

XVC server started
Connection from : ('172.20.10.2', 52054)

需要在vivado hardware中执行的操作:

连接成功后,会出现下图所示结果:

连接成功后,我们就可以使用ILA进行调试了。此处我们随意设个触发条件,计数器到100时触发。设置后,准确触发,如下:

总结

PYNQ已经是我开发PL逻辑不可或缺的工具了,PYNQ极具方便性、灵活性,可以快速验证和测试逻辑设计,也可以利用 Python 的丰富库和工具来处理和分析数据,而不需要使用复杂的测试平台或软件环境。

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值