PYNQ2.7镜像直接升级成3.0以支持XCV(Xilinx Virtual Cable)
文章目录
- 确保ZYNQ开发板可以联网
- 电脑共享
- 开发板配置
- 安装PYNQ3.0环境
- 检查环境能否正常运行
前段时间使用PYNQ进行开发时碰到一个很奇怪的bug,想要查看overlay实际运行时的波形,但发现似乎PYNQ的库中并没有提供在线调试的接口。后面经过查找资料发现pynq3.0中增加了对XVC的支持,但目前我使用的版本是2.7,官方提供的PYNQZ2镜像在我的正点原子领航者ZYNQ7020上无法开机,于是考虑能否在2.7的基础上直接将PYNQ升级为3.0,升级过程中遇到了一些问题,但最终可以成功支持XCV,于是写下这篇博客进行记录。
下面是一些说明
- 官方镜像无法开机,我也尝试过将官方镜像中BOOT.bin文件替换成目前镜像中的BOOT.bin,尽管这样可以开机,但是PYNQ的环境仍然存在问题
- 我使用的2.7镜像是由正点原子提供,该镜像的下载链接可以参考 ZYNQ领航者V2开发板 — 正点原子资料下载中心 1.0.0 文档,登陆密码是 xilinx
- 确保ZYNQ开发板可以联网
确保ZYNQ开发板可以联网
可以输入命令 ping www.baidu.com -c 5
来检查开发板能否联网,如果开发板无法联网,可以参考下面的方式
最开始让zynq板子联网的方式是利用Clash自带的允许局域网代理的功能,让ZYNQ挂代理,但不知道为什么,pip在设置代理的时候无法安装包,报下面的错误。考虑换一种方式,这里使用Windows自带的网络共享的功能
Could not find a version that satisfies the requirement xxx
电脑共享
主要思路是将可以访问互联网的无线网卡的网络共享给以太网接口。
打开控制面板
->网络和Internet
->网络和共享中心
->更改适配器设置
,找到无线网卡对应的适配器,右击打开属性
,点击共享,按照下面的图进行勾选,需要注意的是家庭网络连接那一栏需要填写需要共享的适配器,这里是以太网。
开发板配置
需要注意的是,开启该功能后,电脑以太网适配器的IP地址会被修改,我这里是 192.168.137.1
。如果ZYNQ开发板的IP地址是静态IP,那需要使用命令ifconfig eth0 192.168.137.x
将其IP修改为同网段,这里x可以自己定义。由于我的ZYNQ开发板是DHCP协议动态分配的,所以这里不需要修改。可以使用ping命令确保主机和开发板之间可以通信。
接下来是配置网关和DNS。
使用下面的命令来配置网关:
route add default gw 192.168.137.1
我做完这一步后,开发板已经可以联网,因此不再配置DNS,如有需要请自行上网搜索.
可以使用 ping baidu.com
来检查是否联网
安装PYNQ3.0环境
需要注意的是,pynq2.7之后的版本中,Pynq 和 jupyter 均运行在虚拟环境中(venv),虚拟环境路径为
/usr/local/share/pynq-venv/
,在命令行输入python3和pip3均指向的是虚拟环境,可以输入which python3
和which pip3
来检查
使用下面的命令安装pynq3.0
pip3 install pynq==3.0.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
直接这么安装会报错:
乍一看是Python环境中缺失了 pynqutils
这个库,但如果直接输入 pip3 install pynqutils -i https://pypi.tuna.tsinghua.edu.cn/simple
安装,再次安装 pynq3.0.1 还是会报这个错。仔细查看错误信息,似乎是原本的python3.8环境(/usr/lib/python3/dist-packages/
)中缺失了 pynqutils
,而不是虚拟环境,但 pip3 明明指向的是虚拟环境中的,但安装时却仍然需要原本的python3.8环境中有 pynqutils
,不管怎么说,在原本的python3.8环境中安装 pynqutils
即可。
输入 whereis pip3
,找到原本的python3.8环境的pip3,我这里是 /usr/bin/pip3
,输入下面命令
/usr/bin/pip3 install pynqutils -i https://pypi.tuna.tsinghua.edu.cn/simple
接下来重新安装 pynq3.0.1,即可安装成功
pip3 install pynq==3.0.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
检查环境能否正常运行
新建一个 ipynb
文件,输入下面的代码运行
from pynq import allocate, MMIO
from pynq import Overlay
from pynq.lib.debugbridge import DebugBridge
会输出下面的警告:
第一个警告主要是目前 pydantic
的版本中移除了对应的字段,使用下面的命令安装旧版本的即可
pip3 install pydantic==1.10.19 -i https://pypi.tuna.tsinghua.edu.cn/simple
第二个警告主要是库文件 xrt_device.py
中下面的代码运行错误
其实目前环境中存在 xbutil
,只是不支持 --version
这个选项,这里直接修改该函数,注释掉所有的代码,直接 return (0, 0, 0)
修改后再次运行代码,不再报警告。
参考博客基于ILA+DebugBridge(XVC)的ZYNQ在线调试生成位流,运行下面的代码,检查环境能否正确运行
xvc_test = Overlay("./xvc_test.bit")
print(xvc_test.is_loaded())
db = DebugBridge(xvc_test.ip_dict['debug_bridge_0'])
# 启动XVC服务器,指定参数来配置服务器的缓冲区长度、地址、端口、重连选项和输出模式
db.start_xvc_server(bufferLen=4096, serverAddress="192.168.137.19", serverPort=2542, reconnect=True, verbose=True)
注意 serverAddress
需要为开发板的IP地址,运行成功会输出 XVC server started
,打开 Vivado 可以成功连接该开发板
不使用时记得关闭xvc服务器
db.stop_xvc_server()