前四期测评计划:
一、开箱报告,KV260通过网线共享PC网络
二、Zynq超强辅助-PYNQ配置,并使用XVC(Xilinx Virtual Cable)调试FPGA逻辑
三、硬件加速之—使用PL加速矩阵乘法运算(Vitis HLS)
四、硬件加速之—使用PL加速FFT运算(Vivado)
先来一波主观评价:
第一部分 - 一切从如何在KV260中构建PYNQ讲起:
进入PYNQ官网(http://www.pynq.io/home.html),可以了解基本知识。
进入Boards页面,可以查看官方支持的那些板卡。
这些都是官方直接提供支持的板卡,对于自定义板卡,就需要自行配置了,官方也提供说明,请移步:https://pynq.readthedocs.io/en/latest/pynq_sd_card.html
可以有多种方式实现配置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文件研究了一遍,供遇到同样问题的同学参考:
遇到具体问题,对照上述流程,检查哪一步出错,可能需要修改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文件,并输入以下代码:
# 导入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 的丰富库和工具来处理和分析数据,而不需要使用复杂的测试平台或软件环境。
下期预告:
矩阵乘法是一种常见的数学运算,它可以用于实现各种应用,例如线性代数、图像处理、人工智能等。使用RTL开发周期长,需要花费更多的时间和人力来编写和验证代码,代码可复用性和可移植性较差,需要针对不同的平台和应用进行修改。而使用HLS进行开发,可以快速地验证和测试功能和性能,代码可复用性和可移植性强,可以轻松地适应不同的平台和应用。
更多回帖