本次将进行PYNQ框架的第一个例程,该例程将使用两种方法实现图像缩放,图像缩放的最经典算法为双线性插值,期间存在着大量的计算,所以首先将在ARM内核上实现该算法,然后利用FPGA部分进行计算任务的卸载,最终对比两种方法得到的效果。首先利用HLS生成计算加速所需要的硬件IP,打开HLS的命令行窗口,首先对tcl脚本进行简单的修改,主要修改的是芯片的型号:
改完以后运行./build_ip.sh命令,得到对应的加速IP。下面就需要进行Vivado工程的搭建,基于之前移植PYNQ框架所用的Vivado工程,首先将PL端的输出时钟频率修改为100M:
再打开两个AXI总线接口,并且数据宽度均设置为128:
然后根据基本的硬件连接框图如下所示:
根据上述框图构建BD文件,构建得到的结果如下所示:
为了生成该BD文件,同样可以使用Github中提供的TCL命令,然后将bit文件、tcl文件和hwh文件改成相同的名称上传至PYNQ开发板。然后首先运行PS部分的示例:
首先说明了实现的基本功能:
该功能主要将640*360大小的图片转换为320*180大小的图片,实现的具体过程主要使用了PIL库。运行可以看到输入图片的尺寸为640*360:
下面展示了经过缩放以后的图片,其尺寸为320*180,并且最佳的计算时间为9.96ms:
下面运行利用PL进行加速的示例,其利用PL侧进行缩放过程的计算,并且使用DMA模块进行数据传输,减少了PS侧的计算负载,值得注意的是这里需要根据自己bit文件的路径修改:
进行IP挂载,图片读取等操作,然后使用xlnk开辟合适的缓冲区:
然后向IP中写入合适的控制参数,然后得到缩放以后的图片,发现结果正确:
利用PL侧计算仅需4.59ms,PL部分实现了计算加速的效果:
实验完成,通过本次实验我们了解了PS和PL联合开发的基本流程,熟悉了利用PYNQ框架进行算法加速的基本思路。