一种基于FPGA的CNN加速优化装置
技术领域
本发明涉及数字图像处理、模式识别技术领域,尤其是一种基于FPGA的CNN加速优化装置。
背景技术
CNN是著名的深度学习架构,从人工神经网络扩展而来,因为它能模仿生物视觉神经的行为获得很高识别准确率,所以CNN已经广泛用于图像识别。最近,基于深度学习算法的现代应用高速增长进一步改善了研究和实现。现有的大部分CNN实现主要是基于通用处理器CPU实现的。由于CNN的特殊计算模式,通用处理器实现CNN并不高效,所以很难满足性能需求。
典型的CNN算法模型由两部分组成特征提取器和分类器。其中特征提取器负责生成输入数据的低维特征向量,对数据具有较好的鲁棒性。该向量作为分类器(通常基于传统的人工神经网络)的输入数据进行分类,得到输入数据的分类结果。
在CNN网络结构中,层内计算是独立不相关的,而层间结构可以理解为是一个流水结构。CPU由于其自身特点无法充分地挖掘CNN内部的并行性。FPGA作为一种计算密集型加速部件,通过将算法映射到FPGA上的并行硬件进行加速。FPGA上所设计的各个硬件模块可以并行执行。各个硬件模块输入输出的相互连接以及FPGA所提供的流水结构可以很好地和CNN算法相匹配,充分利用算法网络结构内部的并行性,在提高运算速度的同时缩小了能耗。
发明内容
本发明所要解决的技术问题在于,提供一种基于FPGA的CNN加速优化装置,能够利用FPGA的快速并行处理和极低功耗的高效能计算特性,实现深度卷积神经网络模型中复杂度最高的卷积计算部分,在保证算法正确率的前提下,大幅提升算法效率,降低功耗。
为解决上述技术问题,本发明提供一种基于FPGA的CNN加速优化装置,包括:主控模块和外部存储器模块;主控模块具体为FPGA片上系统,外部存储器模块具体为DDR3DRAM,DDR3DRAM直接连接到了FPGA片上系统的BANK37、BANK38和 BANK39的存储器接口上。
优选的,DDR3DRAM内存条的存储空间为1GB,由8片容量为128M的内存芯片U1、U2、U3、U4、U6、U7、U8和U9组成;U1、U2、U3和U4排列在内存条的正面, U6、U7、U8和U9排列在内存条的背面,将8个内存芯片的片选引脚CS#连接到芯片选择引脚S0#上,S0#引脚用来使能和禁止命令译码。
优选的,DDR3DRAM中,每个内存芯片的ZQ引脚外接一个240Ω的电阻与地相连,用来校准芯片的ODT和输出驱动。
优选的,FPGA片上系统包括定时器、串口、MicroBlaze处理器、加速器、第一数据传输引擎、第二数据传输引擎、中断控制器和、存储器接口控制器、AXI4lite总线和 AXI4总线;Timer、UART、加速器和MicroBlaze处理器分别与AXI4lite总线相连, MicroBlaze处理器、第一数据传输引擎、第二数据传输引擎和存储器接口控制器分别与 AXI4总线相连,加速器与第一数据传输引擎和第二数据传输引擎分别相连,中断控制器连接在加速器和MicroBlaze处理器之间。
优选的,AXI4lite总线用于传输命令,AXI4总线用于传输数据。
本发明的有益效果为:本发明利用FPGA的快速并行处理和极低功耗的高效能计算特性,实现深度卷积神经网络模型中复杂度最高的卷积计算部分,在保证算法正确率的前提下,大幅提升算法效率;相比于传统基于CPU或GPU实现深度卷积神经网络的方法,本发明在有效提高算法计算速度的同时,大幅降低了功耗,有效解决了采用CPU 或GPU实现深度卷积神经网络导致的运算时间长或功耗大的问题。
附图说明
图1为本发明的装置结构示意图。
图2为本发明的CNN加速器设计示意图。
图3为本发明的主控模块与外部存储器连接示意图。
图4为本发明的外部存储器模块结构示意图。
具体实施方式
如图1所示,一种基于FPGA的CNN加速优化装置,包括:主控模块和外部存储器模块;主控模块具体为FPGA片上系统,外部存储器模块具体为DDR3DRAM,DDR3 DRAM直接连接到了FPGA片上系统的BANK37、BANK38和BANK39的存储器接口上。
DDR3的硬件设计需要严格考虑信号完整性,在电路设计和PCB设计的时候要充分考虑了匹配电阻/终端电阻、走线阻抗控制、走线等长控制,保证DDR3的高速稳定的工作。该DDR3存储系统直接连接到了FPGA的BANK 37,BANK38和BANK39的存储器接口上。
DDR3控制器的设计采用了Xilinx推出的IP核MIG_v1.7+存储器接口模块的设计方法。该内存控制器的用户接口设计能够对DDR3内存模块进行很好的管理,同时完成用户发送的各种请求,并且最大限度的提高了访问内存的速度和带宽,避免了数据的丢失,并成功的应用到某高速图像采集系统中。在此用户接口的基础上设计的内存控制器能够与市场上大多数主流内存进行兼容,可移植性强,大大降低了开发成本。
本发明的硬件平台为Xilinx公司的Virtex-7FPGA VC707评估套件。7系列的FPGA具有比6系列和5系列的FPGA尺寸小、成本低、高性价比和大容量以及超高端连接带宽等优点。
如图3所示,FPGA片上系统包括定时器、串口、MicroBlaze处理器、加速器、第一数据传输引擎、第二数据传输引擎、中断控制器和、存储器接口控制器、AXI4lite总线和AXI4总线;定时器、串口、加速器和MicroBlaze处理器分别与AXI4lite总线相连, MicroBlaze处理器、第一数据传输引擎、第二数据传输引擎和存储器接口控制器分别与AXI4总线相连,加速器与第一数据传输引擎和第二数据传输引擎分别相连,中断控制器连接在加速器和MicroBlaze处理器之间。AXI4lite总线用于传输命令,AXI4总线用于传输数据。
MicroBlaze处理器是一个RISC处理器软核,通过AXI总线的IP核,MicroBlaze 处理器就可以和外部存储控制器、串口、中断控制器、定时器等各种外设IP核相连构建基本的嵌入式系统,完成可编程系统芯片(SOPC)的设计。在系统中,MicroBlaze处理器用于启动CNN加速器,与主机CPU通信,以及使用定时器来进行计时。
CNN加速器作为AXI总线上的一个IP,它从MicroBlaze处理器接收到命令和配置参数,与定制的数据传输引擎通过FIFO接口通信,该数据传输引擎可以通过AXI4总线访问外部存储器DDR3DRAM。
本装置的CNN加速器设计包括:处理单元,片上缓存,外部存储器以及片内外互连。处理单元是卷积的基本单元,用于处理的所有数据存放在外部存储器。由于片上资源限制,数据首先缓存到片上缓冲区,然后送入处理单元,这里使用双缓冲将传输时间掩盖于计算时间内。片上互连用于处理单元和片上缓冲的通信。
CNN加速器作为AXI总线上的一个IP,它从MicroBlaze处理器接收到命令和配置参数,与定制的数据传输引擎通过FIFO接口通信,该数据传输引擎可以通过AXI4总线访问外部内存。MicroBlaze处理器和CNN加速器使用中断机制来提供精确的计时。
由于片上数据只有很少一部分,所以循环分块(looptiling)是非常必要的,有效的循环分块可以提高数据重用和数据并行处理效率。为了提高数据重用和数据并行处理的效率,可利用Vivado设计套件高层次综合(HLS)工具生成高效的循环流水线,通过将不同循环层次操作执行交叠,将计算资源完全利用,可在Xilinx FPGA上快速实现高吞吐量的处理引擎。并且在实现数据高吞吐的情况下匹配FPGA平台的片外访存带宽。
使用数据传输引擎的目的有两个:(1)可以提供加速器和外部DDR3DRAM之间的数据传输;(2)可以隔离加速器和平台、工具相关带宽特性。在分析带宽问题时,增加IP-AXI接口位宽不会影响带宽,但是增加IP接口到AXI总线,它的带宽几乎呈线性增长。在我们CNN加速器设计中,最小带宽需要1.55GB/s。4个IP接口足够用于这个设计。我们使用两个AXI-IP接口用于数据传输引擎1,两个用于数据传输引擎2。
如图2所示,一个CNN加速器设计包括:处理单元,片上缓存,外部存储器以及片内外互连。处理单元是卷积的基本单元,用于处理的所有数据存放在外部存储器。由于片上资源限制,数据首先缓存到片上缓冲区,然后送入处理单元,这里使用双缓冲将传输时间掩盖于计算时间。片上互连用于处理单元和片上缓冲的通信。
由于片上数据只有很少一部分,所以循环分块(looptiling)是非常必要的,有效的循环分块可以提高数据重用和数据并行处理效率。为了提高数据重用和数据并行处理的效率,可利用Vivado设计套件高层次综合(HLS)工具生成高效的循环流水线,通过将不同循环层次操作执行交叠,将计算资源完全利用,可在Xilinx FPGA上快速实现高吞吐量的处理引擎。
本装置是基于VC707板卡,使用Xilinx FPGA芯片Virtex7 485t实现的,它的工作频率为100M。加速器设计用Vivado HLS(v2017.4)实现,该工具允许用C语言实现加速器,并导出RTL为一个Vivado IP核。CNN设计C代码通过增加HLS定义的编译向导实现并行化,并行化版本通过时序分析工具进行验证。快速综合前仿真使用该工具的C仿真和C/RTL联合仿真完成。综合前资源报告用于设计空间探索和性能估计,导出的RTL使用Vavido(v2017.4)进行综合、实现。之后,工具会汇报资源占用情况,如表1所示,可以看出本装置的CNN加速器可以很高程度上利用FPGA的硬件资源。
表1 FPGA资源使用率
资源 |
DSP |
BRAM |
LUT |
FF |
使用 |
2240 |
1024 |
186251 |
205704 |
可用 |
2800 |
2060 |
303600 |
607200 |
使用率 |
80% |
50% |
61.3% |
33.87% |
如图4所示,本发明采用的DDR3_DRAM为Micron公司的MTJTF2864HZ-1G6G1 内存条,该DDR3内存条的存储空间为1GB,由8片容量为128M的内存芯片构成。每个芯片的数据位宽为8位,行地址线14根,列地址线10根,Bank数量为8个,因此每个芯片的容量为16384x1024x8x8即128MB。8片组成在一起就构成了64位数据位宽,容量为1GB。在每个DDR3模块上的ZQ引脚外接一个240欧的电阻与地相连,用来校准模块的ODT和输出驱动。
与上一代存储器件相比,DDR3的内存模式有了很大的改进:逻辑Bank数量由 DDR2的4个增加为8个;突发长度增加为8bit,任何突发中断操作都将在DDR3内存中予以禁止,且不予支持;取而代之的是更为灵活的突发传输控制;其核心工作电压由 DDR2的1.8V降至1.5V,能够在达到高带宽的同时,大幅度的降低其功耗;DDR3采用FLY_BY总线,参考电压分离,增加了ZQ校准功能,从而大大的提高了存储信号的完整性。