一种基于FPGA的通用卷积神经网络加速器的制作方法

文档序号:15934216发布日期:2018-11-14 02:07阅读:260来源:国知局

本发明涉及电子信息和深度学习技术领域,特别涉及了一种通用卷积神经网络加速器。

背景技术

近年来,深度神经网络近来受到了广泛的关注,特别是卷积神经网络模型已经在计算机视觉上得到了广泛的应用,例如图像分类、人脸检测识别、文字识别等,2013年mittechnologyreview杂志将以卷积神经网络为代表的深度学习评为十大突破性技术之首。卷积神经网络算法受到人类视觉系统的启发,利用卷积操作作为模拟神经元的感受野。深度神经网络的计算非常密集,在检测识别等任务中达到数十gops。除了计算密集,神经网络具有数百万甚至近亿的参数需要存储,因此利用深度神经网络进行实时检测识别只能依靠高性能多核cpu(centralprocessingunit,中央处理器)和gpu(graphicprocessingunit,图形处理器)来完成,但对于功耗及体积受限的设备特别是移动设备(例如机器人、消费电子产品、智能汽车等)要移植神经网络模型几乎不可能。因此,使用通用器件,构建专用加速电路来满足卷积神经网路计算及存储需求是一条可行之路。

目前,除了gpu以外,主流的加速硬件有fpga、asic(applicationspecificintegratedcircuit,专用集成电路)。asic虽然具有高性能低功耗的优点,但其需要根据具体的应用而进行专用设计,设计灵活性低且前期开发成本高。而近年来基于fpga高层综合工具的研发,给fpga设计带来很大便利,高层综合工具在不影响性能的情况下大幅度地降低了研发周期。fpga作为适用不同功能的可编程标准器件,没有如此高额的研发成本,并且具有一定的灵活性。另外fpga小巧灵活,功耗低,并行性等优点十分适合神经网络任务,因此将fpga应用于移动工作平台来实现卷积神经网络的卷积计算是有效的解决方案。



技术实现要素:

为了解决上述背景技术提出的技术问题,本发明旨在提供一种基于fpga的通用卷积神经网络加速器,能够支持各种卷积神经网络结构,通用性好,对片上存储资源需求较少,通信开销小。

为了实现上述技术目的,本发明的技术方案为:

一种基于fpga的通用卷积神经网络加速器,包括mcu、axi4总线接口、地址生成器、状态控制器、特征图缓存区、卷积核缓存区、卷积计算器以及分段式结果缓存区;卷积计算器采用fpga实现,并包含n个卷积计算子单元,特征图缓存区和卷积核缓存区分别包含n个特征图子缓存区和n个卷积核子缓存区,每一个卷积计算子单元对应配置一个特征图子缓存区和一个卷积核子缓存区;mcu与外部存储器相连,用于读取外部存储器的输入数据,并将卷积计算结果发送给外部存储器;特征图缓存区和卷积核缓存区用于缓存通过axi4总线接口从mcu读取的特征图和卷积核数据;地址生成器用于生成特征图缓存区的读取地址,按照该地址读取特征图缓存区中的数据送入卷积计算器;卷积计算器用于读取特征图缓存区和卷积核缓存区中的数据进行卷积计算,并将相邻卷积计算子单元的计算结果进行多级累加;分段式结果缓存区包含个结果子缓存区,用于存放卷积计算器输出的各级累加结果,并通过axi4总线接口将各级累加结果传送至mcu;状态控制器用于控制整个加速器的工作状态,实现各个工作状态的转换。

基于上述技术方案的优选方案,所述特征图缓存区和卷积核缓存区的写地址由状态控制器累加产生,卷积核缓存区的读地址通过每4个时钟累加一次产生。

基于上述技术方案的优选方案,所述地址产生器的产生规则按照卷积矩阵展开,根据特征图大小、卷积核大小和卷积窗口偏移产生特征图缓存区的读地址。

基于上述技术方案的优选方案,在卷积计算器中,将相邻卷积计算子单元的计算结果进行log2n级累加,分别将第2、3、4、5、……、log2n次的累加结果存入分段式结果缓存区。

基于上述技术方案的优选方案,所述分段式结果缓存区包含个结果子缓存区,被分为个一组、个一组、个一组、个一组、……、1个一组,依次对应存放第2、3、4、5、……、log2n次的累加结果。

基于上述技术方案的优选方案,卷积计算器为通用定点数计算器,待计算数据并行进入卷积计算器,每个时钟共计n组卷积核、特征图进入卷积计算器,采用dsp作为运算单元做乘累加计算,卷积计算器在第十个时钟输出卷积计算结果,其中前九个时钟执行乘累加计算,第十个时钟加上偏置后发送给后续的多级累加器。

基于上述技术方案的优选方案,所述axi4总线接口将多个数据拼接成一个数据发送,提高运算速度。

采用上述技术方案带来的有益效果:

本发明缩短了fpga与mcu的通信时间,加快了数据传输,运用地址产生器有效地避免了重复数据的发送,进一步减少了数据流时间。同时根据fpga的片上存储空间安排合理地规划了分块特征图大小,将资源利用率达到最大。改进了计算结果缓存机制,更具有通用性,不再受网络层数约束,也减少了不必要的中间值缓存。

本发明在基于yolo算法的路况检测应用中得到验证,在100mhz的工作频率下,并行度n为64的条件下,数据精度为16位定点数,对640pixels×640pixels的实时检测速度可达到3~4fps。

附图说明

图1是本发明的结构示意图;

图2是本发明数据缓存区结构示意图;

图3是本发明卷积计算器工作示意图;

图4是本发明卷积结果累加示意图。

具体实施方式

以下将结合附图,对本发明的技术方案进行详细说明。

如图1所示本发明设计的通用卷积神经网络加速器结构,并行度n以64为例,其工作方法如下。

mcu预先从外部存储器里读取16位的输入特征图、卷积核及偏置,并按顺序将4个16位参数拼接成一个64位数据通过直接存取控制器、axi4总线送入到数据缓存区(即特征图缓存区、卷积核缓存区)。

参照图2,待计算数据的缓存顺序受状态控制器控制,先缓存特征图数据,根据每片缓存器的大小设置分块特征图为42*42,位宽为16位。由于axi4总线位宽设置为64位,故sram的读写位宽为1:4的比例,选取单双口ram作为特征图子缓存区,写位宽为64位,写深度为441,读位宽为16位,读深度为1764。特征图缓存区由64个上述缓存区组成,故一次数据传输可接受42*42*64个特征图参数。接受完特征图数据后状态控制器跳转到缓存卷积核参数模式,卷积核大小为3*3,每个卷积核匹配一个偏置参数,故缓存到卷积核缓存区一共有10个16位参数,由于axi4总线是以64位传输,故补2个字节的0,一共有12个16位参数,卷积核缓存区读写位宽均为64位,深度为3。卷积核缓存区由64个上述缓存区组成,与特征图缓存区一一匹配。

数据缓存结束后状态控制器跳入计算模式,启动地址产生器,故根据卷积窗口偏移stride产生例如:0、1、2、42、43、44、84、85、86;1、2、3、43、44、45、85、86、87;…;1677、1678、1679、1719、1720、1721、1761、1762、1763的地址。同时控制缓存区读使能从特征图、卷积核缓存区里同时读取卷积核参数和特征图数据送入卷积计算器进行卷积运算。

参照图3,待计算数据并行进入卷积运算器,每个时钟共计64组卷积核、特征图进入卷积器计算,对于大小为3*3的卷积计算,卷积器共需十个时钟计算出结果,其中前九个时钟执行乘累加,第十个时钟加上偏置后发送结果至后续累加器,将逐级累加结果缓存至所述分段式卷积结果缓存区。

参照图4,一共有64个卷积计算子单元(processingconvolutionunit,简称pcu),pcu在第十个时钟加上偏置后输出结果至后续累加器,将逐级累加结果缓存至所述分段式卷积结果缓存区。分段式卷积结果缓存区由31个fifo组成,其中31个fifo依次分为、16个一组、8个一组、4个一组、2个一组、1个一组,以存放所述卷积计算单元的计算逐级累加结果,分段式卷积结果缓存区的写使能由所述卷积计算器给出,读出逻辑由所述状态控制器控制。分段式卷积结果缓存区的读写数据位数分别由axi4总线写数据位宽和定点卷积计算位宽确定,在本实施例中,axi4读写数据位宽均为64位,定点卷积运算为16位,故在写入计算结果fifo时按16位写数据,64位读数据操作。逐级累加是在第十一个时钟将相邻两个pcu的计算结果相加得到32个一级累加值;接着在第十二个时钟将这32个一级累加值的两个相邻值送入二级累加器,得到16个二级累加值存入fifo;以此类推,一共有六级累加,最后输出一个累加值,相当于64个pcu卷积计算结果累加。

计算结束后状态控制器跳转到发送状态,根据cpu指令读取相应fifo数据根据指令要求是否执行relu操作后将数据通告axi4总线发送回mcu存入外部存储器。

相比较于直接加速卷积运算,将卷积运算展开为向量的乘累加操作可以弱化网络结构对加速器结构不匹配带来的影响。本实施例中控制上述步骤的状态控制器状态转换条件如下:

初始化时状态机进入等待状态,等待mcu指令信号(ram_flag),当ram_flag为001时,进入写卷积核状态;当ram_flag为010时,进入写特征图状态;当数据和缓存结束后mcu发送计算开始指令,状态机跳入卷积计算状态;当计算结束后跳入计算结果发送状态;当send状态结束时,返回等待状态,等待下一次数据写入。

写特征图:一旦进入该状态,所有的特征图ram使能端有效,当axi4总线上的数据有效信号有效时,开始接收数据,ram的写地址开始从0累加,每次累加到441后清零从0重新累加,指示在缓存下一个分块特征图数据,一共缓存64个特征图ram。完成后等待mcu指令信号ram_flag,当ram_flag为1xx时则进入计算状态。

写卷积核:一旦进入该状态,所有的卷积核ram使能有效,当axi4总线上的数据有效信号有效时,开始接收数据,ram的写地址开始从0累加,每次累加到3后清零从0重新累加,指示在缓存下一个卷积核数据,一共缓存64个卷积核ram。完成后等待mcu指令信号ram_flag,当ram_flag为1xx时则进入计算状态。

卷积计算:一旦进入该状态,开始从特征图ram和卷积核ram并行读出数据,卷积核ram的读地址从0开始每隔4时钟加1,累加到3后重新开始,特征图ram的读地址由地址产生器产生,根据读地址从各自ram中读取相应数据,每累加到9次,则停止一个时钟,以与pcu输出数据同步。当特征图ram的读地址为1763时,标志所有数据均已计算完成,此时两组读地址复位,下个时钟将进入计算结果发送状态。

计算结果发送:发送数据选取根据layer(来自外部处理器)的指示,会按所需数据为多少个卷积结果累加和从对应的fifo中取数据,再根据relu(来自外部处理器)信号是否作relu操作后将数据发送至总线。

实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1