ZYNQ上FPGA可编程逻辑部分成为PL端,以arm为核心的处理器部分成为PS端。本系统中,CNN在PL端的FPGA上实现,通过DMA与PS端的Linux交换数据。Linux将CNN参数和输入数据dma到CNN,CNN计算完成后将计算结果dma回Linux。CNN通过vivado HLS设计,各层以数据流方式实现数据传递,可实现全网络流水。通过HLS优化,可将百万级周期的计算环节优化为万级周期。
Linux中,通过DMA驱动控制DMA的数据读写,通过socket与PC交换数据。
在PC的windows中开发上位机。上位机通过以太网将CNN参数下发给Zynq端的Linux应用程序。将输入的图片下发到Zynq端的Linux应用程序,接收Zynq回传的计算结果。(CNN参数文件也可直接拷贝到SD卡中,由ZYNQ上的Linux应用直接读取。数据的输入输出也可通过以太网之外的其他接口实现,这里笔者开发的上位机不是文章的重点,读者可以通过其他方式控制参数的输入和数据的传输)
开发环境
硬件环境
硬件环境包括一台PC电脑和一块搭载有Zynq SoC的
开发板,开发板和PC通过网线和串口连接。
软件环境
本文中用到的软件开发工具有:TensorFlow,Vivado HLS ,Vivado,PetaLinux,Visual Studio。
TensorFlow是Google公司开源的深度学习框架,在本文中用于算法的
仿真和参数的训练。
Vivado HLS和Vivado 是Xilinx公司Vivado Design Suite套件中的两个软件。vivado-HLS可以将 C,C++ 以及 System C 等高层次语言综合生成HDL级的IP核。Vivado可以将HDL级的文件综合成RTL网表文件,并根据网表文件布局布线生成.bit文件。.bit文件可以直接下载到FPGA中,实现FPGA功能。
PetaLinux工具提供在 Xilinx 处理系统上定制、构建和调配嵌入式 Linux 解决方案所需的所有组件。PetaLinux与 Xilinx 硬件设计工具协同工作,为 Zynq® UltraScale+™ MPSoC、 Zynq®-7000 SoC、和 MicroBlaze™ 简化了 Linux 系统的开发。
Visual Studio在此不做过多介绍,笔者用的是VS2012,使用C#语言开发上位机。上位机通过网络将CNN参数下发给Zynq端的Linux应用程序。将输入的图片下发到Zynq端的Linux应用程序,接收Zynq回传的计算结果。
开发流程
`