前四期测评计划:
一、开箱报告,KV260通过网线共享PC网络
二、Zynq超强辅助-PYNQ配置,并使用XVC(Xilinx Virtual Cable)调试FPGA逻辑
三、硬件加速之—使用PL加速矩阵乘法运算(Vitis HLS)
四、硬件加速之—使用PL加速FFT运算(Vivado)
先来一波主观评价:
- 我认为 PYNQ 是 Zynq 开发的超级助手,它让我可以用 Python 语言和 Jupyter Notebook 来编写和运行我的程序,通过浏览器界面来交互和可视化我的结果。
- PYNQ 让我可以轻松地控制我的 PL 侧逻辑,只需要加载不同的 overlay 库,就可以像调用函数一样使用 FPGA 的功能和外设。
- 这并不意味着我可以用 Python 来编写 PL 逻辑,事实上,要想充分利用 Zynq 的潜力,开发 PL 侧逻辑才是关键,因为所谓的“加速”,就是通过 PL 逻辑来实现的。
- PYNQ 可以帮助我快速地验证和测试我的 PL 设计,也可以让我在 PS 侧使用 Python 的丰富库和工具,来处理和分析我的数据。
- PYNQ 是一个适合各种应用场景的框架,无论是图像处理、人工智能、数据科学、物联网、机器人等,都可以在 PYNQ 上找到合适的解决方案。
- PYNQ 让 Zynq 开发变得更简单、更有趣、更有创意。
第一部分 - 一切从如何在KV260中构建PYNQ讲起:
进入PYNQ官网(http://www.pynq.io/home.html),可以了解基本知识。
进入Boards页面,可以查看官方支持的那些板卡。
这些都是官方直接提供支持的板卡,对于自定义板卡,就需要自行配置了,官方也提供说明,请移步:https://pynq.readthedocs.io/en/latest/pynq_sd_card.html
可以有多种方式实现配置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文件研究了一遍,供遇到同样问题的同学参考:
- 检查权限:代码首先检查是否以root权限运行,如果不是,则显示错误消息并退出。
- 命令行参数处理:代码检查是否接收到了正确数量的命令行参数,以确定要安装的板子类型(board)。
- 检查Ubuntu版本:代码检查当前操作系统的Ubuntu版本,并根据版本决定是否继续安装。
- 安装依赖:安装所需的Debian软件包,包括Python、开发库等。
- 创建虚拟环境:创建PYNQ的虚拟Python环境,其中包括一些必要的配置信息。
- 安装PYNQ库和相关工具:通过Python pip工具安装PYNQ库、PYNQ-Metadata、PYNQ-Utils等相关Python包。
- 安装Jupyter Notebook:安装Jupyter Notebook,并配置相关环境。
- 安装PYNQ的设备树覆盖:编译PYNQ的设备树覆盖,并将其插入到系统中。
- 安装示例Notebooks:根据板子类型安装不同的示例Notebooks,这些Notebooks包含了用于演示和学习的示例代码。
- 配置环境:修改一些配置文件和环境变量,以确保PYNQ的正确运行。
- 启动Jupyter服务:启动Jupyter服务,使用户可以通过Web浏览器访问PYNQ的Notebooks。
- 安装OpenCV:安装OpenCV库及相关依赖。
- 生成自测脚本:生成一个脚本,用于在安装完成后运行一些自测。
- 提供连接信息:输出一条消息,提供了连接到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(Xilinx Virtual Cable)调试FPGA逻辑:
解释下什么是XVC。
Xilinx虚拟电缆(XVC)是一种基于TCP/IP的协议,类似于JTAG电缆,提供一种无需使用物理电缆即可访问和调试FPGA或SoC设计的方式。
为什么要用XVC?
方便,不需要额外的JTAG设备即可调试PL逻辑代码。
在 vivado 中绘制如下 Block Design:
以上 Block Design 包含两个重要的IP核:
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文件,并输入以下代码:
from pynq import Overlay
from pynq.lib.debugbridge import DebugBridge
base = Overlay("xvc_test.bit")
base.ip_dict
db = DebugBridge(base.ip_dict['debug_bridge_0'])
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 的丰富库和工具来处理和分析数据,而不需要使用复杂的测试平台或软件环境。
下期预告:
矩阵乘法是一种常见的数学运算,它可以用于实现各种应用,例如线性代数、图像处理、人工智能等。使用RTL开发周期长,需要花费更多的时间和人力来编写和验证代码,代码可复用性和可移植性较差,需要针对不同的平台和应用进行修改。而使用HLS进行开发,可以快速地验证和测试功能和性能,代码可复用性和可移植性强,可以轻松地适应不同的平台和应用。