CN111353586A - 一种基于fpga实现cnn加速的系统 - Google Patents
一种基于fpga实现cnn加速的系统 Download PDFInfo
- Publication number
- CN111353586A CN111353586A CN202010118764.6A CN202010118764A CN111353586A CN 111353586 A CN111353586 A CN 111353586A CN 202010118764 A CN202010118764 A CN 202010118764A CN 111353586 A CN111353586 A CN 111353586A
- Authority
- CN
- China
- Prior art keywords
- module
- cnn
- unit
- external memory
- sub
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 230000001133 acceleration Effects 0.000 title claims abstract description 18
- 238000004364 calculation method Methods 0.000 claims abstract description 73
- 230000004913 activation Effects 0.000 claims abstract description 37
- 238000011176 pooling Methods 0.000 claims abstract description 28
- 238000012545 processing Methods 0.000 claims abstract description 13
- 238000000034 method Methods 0.000 claims abstract description 9
- 230000008569 process Effects 0.000 claims abstract description 5
- 238000006243 chemical reaction Methods 0.000 claims abstract description 4
- 230000003993 interaction Effects 0.000 claims description 27
- 230000006870 function Effects 0.000 claims description 26
- 230000003213 activating effect Effects 0.000 claims description 6
- 230000003139 buffering effect Effects 0.000 claims description 4
- 230000004044 response Effects 0.000 claims description 2
- 238000013527 convolutional neural network Methods 0.000 description 82
- 238000010586 diagram Methods 0.000 description 9
- 238000013528 artificial neural network Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000009977 dual effect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本发明提供了一种基于FPGA实现CNN加速的系统,所述系统包括外部主控制器,用于处理CNN模块的输入、输出并管理CNN模块的运行;外部存储器,用于存储CNN模块的输入数据、CNN模块计算过程的中间数据以及CNN模块的最终计算结果。CNN模块包括卷积子模块、激活子模块、池化子模块和全连接子模块,子模块的配置方式为单独配置或流水线模式配置;所述存储访问控制模块用于实现各子模块对外部存储器访问的仲裁,并完成接口协议转换。基于FPGA硬件可编程的特性,结合硬件结构,更好地匹配了CNN大量并行运算的特点,在计算结构上做到完全的并行化,实现CNN的加速计算。
Description
技术领域
本发明涉及卷积神经网络计算技术领域,尤其是一种基于FPGA实现CNN加速的系统。
背景技术
CNN(Convolutional Neural Network,卷积神经网络)是神经网络的一个分支,广泛应用于图像处理领域。LeNet-5是CNN的开山之作,奠定了现代CNN理论基础的模型;AlexNet是第一个现代意义上的CNN,引入了数据扩充、激活函数和多GPU并行计算的概念;牛津大学提出的VGG模型向人们证明了“神经网络越深越好”的理念,此后神经网络逐渐有了“深度学习”这个别名;GoogleNet对网络结构做了大胆的革新,将不同尺寸的卷积组合起来,让网络自己判断该采用哪种特征;SqueezeNet的关注点从提升精度转换为如何用更少的参数和计算量来达到同样的精度。
由于CNN的应用范围越来越广,精度要求越来越高,导致CNN的规模也越来越大;CNN运算的特殊性限制了采用性能更强的通用芯片实现更大规模CNN的效率,因为这些通用芯片中相当一部分子模块并不能用于CNN的加速。因此人们也开始使用专用芯片、GPU等完成对大型CNN的加速。GPU(Graphics Processing Uni,图形处理器)作为图像处理器,设计初衷是为了应对图像处理中需要的大规模并行计算,其使用的单指令流多数据流结构对矢量运算的支持较好,刚好可以用来加速CNN。GPU出色的浮点计算性能提高了卷积和分类的性能,同时又达到所需的精度。CNN需要很高的内在并行度、大量的浮点计算能力以及矩阵运算,而GPU可以提供这些能力,并在相同的精度下,相对传统CPU的方式,拥有更快的处理速度、更少的服务器投入和更低的功耗。
然而GPU对CNN的加速无法充分发挥并行计算优势,虽然GPU具有多个流处理单元可以进行并行运算,但软件串行执行的特点限制了GPU在加速CNN时的并行度,其并行度的优势不能完全发挥。
发明内容
本发明提供了一种基于FPGA实现CNN加速的系统,用于解决现有GPU对CNN加速无法充分发挥并行计算优势的问题。
为实现上述目的,本发明采用下述技术方案:
本发明提供了一种基于FPGA实现CNN加速的系统,所述系统包括外部主控制器、外部存储器以及基于FPGA构建的CNN模块、存储访问控制模块;
所述外部主控制器用于处理CNN模块的输入、输出并管理CNN模块的运行;
所述外部存储器用于存储CNN模块的输入数据、CNN模块计算过程的中间数据以及CNN模块的最终计算结果;
所述CNN模块包括卷积子模块、激活子模块、池化子模块和全连接子模块,子模块的配置方式为单独配置或流水线模式配置;
所述存储访问控制模块用于实现各子模块对外部存储器访问的仲裁,并完成接口协议转换。
进一步地,所述系统还包括外部协控制器,所述外部协控制器设置在外部主控制器和CNN模块之间,用于进行寄存器的配置和中断的响应。
进一步地,所述外部存储器包括外部存储器A和外部存储器B,所述外部存储器、外部主控制器和CNN模块之间采用乒乓操作。
进一步地,所述CNN模块还包括寄存器访问控制模块,所述各子模块内均配置寄存器,所述访问控制模块用于向子模块寄存器写入配置值,控制子模块工作。
进一步地,所述卷积子模块包括第一计算控制单元、第一DMA单元、第一MAC、第一ACC和第一存储器访问控制单元;
所述第一计算控制单元用于控制卷积子模块内各单元的运行;
所述第一DMA单元用于卷积子模块与外部存储器之间的读写交互;
所述第一MAC和第一ACC用于乘累加计算;第一MAC用于计算乘法,并将计算结果累加得到部分和;第一ACC将所述部分和进行累加得到卷积结果;
所述存储访问控制单元用于控制外部存储器与第一DMA单元的交互。
进一步地,所述卷积子模块还包括第一内部缓存,所述第一内部缓存用于缓存第一DMA单元从外部存储器读取的数据。
进一步地,所述第一MAC配置多个,配置方式为c-size和k-size,分别对应卷积层的输入通道数和卷积核数量。
进一步地,所述激活子模块用于激活函数的运算,激活子模块包括第二计算控制单元、第二DMA单元、第二内部缓存、乘加计算单元、查找表、第一选择单元、第二选择单元和第二存储器访问控制单元;
所述第二计算控制单元用于控制激活子模块内各单元的运行;
所述第二DMA单元用于与外部存储器之间进行激活函数参数的读写交互;
所述第二内部缓存用于缓存第二DMA单元从外部存储器读取的数据;
所述乘加计算单元用于线性激活函数的运算;
所述查找表用于非线性激活函数的处理;
所述第一选择单元用于输入路径的选取,所述第二选择单元用于计算结果输出路径的选取;
所述第二存储器访问控制单元用于控制外部存储器与第二DMA单元的交互。
进一步地,所述池化子模块包括第三计算控制单元、第三DMA单元、第三选择单元、LineBuffer、数值计算单元和第三存储器访问控制单元;
所述第三计算控制单元控制池化子模块内各单元的运行;
所述第三DMA单元用于池化子模块与外部存储器之间的读写交互;
所述第三选择单元用于输入路径的选取;
所述LineBuffer用于缓存激活子模块输出的数据,以及缓存第三DMA单元从外部存储器读取的数据;
所述数值计算单元用于最大值、最小值以及平均值的计算;
所述第三存储器访问控制单元用于控制外部存储器与第三DMA单元的交互。
进一步地,所述全连接子模块包括第四计算控制单元、第四DMA单元、第四选择单元、第三内部缓存、第二MAC、第二ACC和第四存储访问控制单元;
所述第四计算控制单元用于控制全连接子模块内各单元的运行;
所述第四DMA单元用于全连接子模块与外部存储器之间的读写交互;
所述第四选择单元用于输入路径的选取;
所述第三内部缓存用于缓存第四DMA单元从外部存储器读取的数据;
所述第二MAC和第二ACC用于乘累加计算;第二MAC用于计算乘法,并将计算结果累加得到部分和;第二ACC将所述部分和进行累加得到卷积结果;
所述第四存储访问控制单元用于控制外部存储器与第四DMA单元的交互。
发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:
1、本发明实施例基于FPGA硬件可编程的特性,结合硬件结构,更好地匹配了CNN大量并行运算的特点,在计算结构上做到完全的并行化,实现CNN的加速计算。同时FPGA节省了部分通用功能所占用的芯片面积,更加高效的利用了硬件资源,性能和能效更高。
2、CNN模块具有通用性,在于CNN的计算步骤相对统一,包括卷积子模块、激活子模块、池化子模块和全连接子模块,可适用于多种网络结构。CNN模块内各子模块能够灵活配置,包括是否配置协控制器、外部存储器是否配置为乒乓机制、卷积模块内部MAC数量配置、卷积模块的数量、是否提供激活模块、池化模块和全连接模块等,不同的配置可以提供不同的功能和性能,适用于多种应用场合。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明所述系统的结构示意图;
图2是本发明CNN模块的结构示意图;
图3是本发明双寄存器访问结构示意图;
图4是本发明卷积子模块的结构示意图;
图5是本发明激活子模块的结构示意图;
图6是本发明池化子模块的结构示意图;
图7是本发明全连接子模块的结构示意图;
图8是本发明存储器访问控制模块的结构示意图。
具体实施方式
为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
如图1所示,本发明基于FPGA实现CNN加速的系统包括外部主控制器、外部存储器以及基于FPGA构建的CNN模块、存储访问控制模块;
外部主控制器用于处理CNN模块的输入、输出并管理CNN模块的运行。例如将CNN输入图像和网络参数写入外部存储器,启动CNN模块,给出必要的配置信息,并根据CNN模块反馈的工作状态决定如何给出下一步的控制指令,并在CNN计算完成之后读取计算结果;可以通过在外部主控制器上运行一个操作系统并编写驱动程序来完成。
控制器的具体实现可以选用通用微处理器如ARM处理器;作为提高系统效率的一个选项,可以配置功能简单的微控制器MCU作为外部协控制器来处理如配置寄存器和中断响应等与CNN之间频繁且琐碎的交互动作,将主控制器释放出来专注于更上层的整体控制。
控制接口即用来完成外部控制器和CNN模块之间的配置信息的交互,因为配置信息相对较少,对控制接口并没有较高的性能要求,控制接口的实现可以采用业界通用的外设接口协议如APB,也可以采用自定义的接口。
中断信号是CNN模块向外部控制器发出的反馈信号,用于反馈自身的工作状态,比如某一部分计算完成之后向外部控制器请求下一步的操作指令,或者CNN工作异常时向控制器发出告警信号。
外部存储器用于存储CNN模块的输入数据、CNN模块计算过程的中间数据以及CNN模块的最终计算结果。在启动CNN模块之前外部控制器需要先将CNN模块的输入写入一块CNN模块可访问的存储空间,CNN开始工作之后就可以从该存储空间中读取需要的图像数据和模型参数。图像和参数的数据量相对较大,存储在CNN内部的代价较大,通常在CNN模块外部用DRAM实现;同时控制器和存储器之间的数据接口可以采用传输速率较高的接口协议例如AXI协议来实现。
由于CNN模块在工作过程中对图像和模型参数的读取规律性较强,外部控制器在将这些数据写入存储器时可以采用特定的写入顺序,这样当CNN模块按照计算所需读取时就可以采用DMA方式从一块连续的存储空间读取。
CNN模块的输入需要先由控制器写入存储器,然后CNN才能读取,两者之间是串行的。为了提高整个系统的运行效率,外部存储器和外部控制器以及CNN模块之间可以采用乒乓操作,即系统中除了外部存储器A之外再配置一块可选的存储器B。具体操作时,外部控制器先向存储器A写入第一幅图像和对应的网络参数,完成之后启动CNN模块,在CNN模块处理第一幅图像期间外部控制器向外部存储器B写入第二幅图像和对应的网络参数,CNN模块处理完第一幅图像之后切换外部控制器和CNN模块访问的外部存储器,即外部控制器再次向外部存储器A写入下一幅图像数据(网络参数已经存在,不必重复写入),而CNN模块访问外部存储器B。如此循环就可以实现CNN模块的不间断运行。
如图2所示,CNN模块包括卷积子模块、激活子模块、池化子模块和全连接子模块。子模块的配置方式为单独配置或流水线模式配置。流水线模式配置即子模块直接按照数据流的顺序相连,前一个子模块的输出直接传给后一个子模块作为输入;单独模式配置即各子模块独立工作,各自从外部存储器中读取输入数据,计算结果也写回外部存储器。
卷积、激活、池化和全连接子模块内部均提供了配置寄存器,外部控制器通过控制接口向这些寄存器写入特定的配置值就可以控制模块完成特定的功能。
如图3所示,寄存器的具体实现采用双寄存器组备份,即采用AB两组寄存器,外部控制器访问寄存器组A时寄存器访问控制模块访问寄存器组B,完成一组操作之后切换,双寄存器组的机制提高了模块的运行效率。
因为每个子模块占用一段独立的寄存器地址空间,而与外部控制器交互的控制接口只有一个,因此需要对外部控制器发出的访问进行译码,即根据高位地址判断外部控制器将要访问哪个子模块,然后将该次访问分发到该子模块;这样子模块内部只需要做低位地址的译码并实现自己内部的寄存器访问逻辑即可。寄存器访问控制模块即可完成寄存器访问的译码分发,同时还可以根据各子模块上报的状态信息产生中断信号,并完成接口协议转换。
卷积子模块用于实现CNN中的卷积层,完成卷积核和原始图像或者特征图之间的二维卷积运算,其核心计算是乘累加。
如图4所示,所述卷积子模块包括第一计算控制单元、第一DMA单元、第一MAC、第一ACC、第一存储器访问控制单元和第一内部缓存。第一内部缓存用于缓存第一DMA单元从外部存储器读取的数据;第一计算控制单元用于控制卷积子模块内各单元的运行;第一DMA单元用于卷积子模块与外部存储器之间的读写交互;第一MAC和第一ACC用于乘累加计算;第一MAC用于计算乘法,并将计算结果累加得到部分和;第一ACC将所述部分和进行累加得到卷积结果;存储访问控制单元用于控制外部存储器与第一DMA单元的交互。
开始计算之前需要先获取输入,由于卷积子模块处在整个CNN模块数据流的最前端,无法工作在前述的流水线模式,其所需要的数据只能从外部存储器中读取。卷积子模块和外部存储器的交互由第一DMA单元完成,第一DMA单元分为读和写两个部分,分别实现外部存储器的读取和写入。
外部控制器在将整个CNN模块的输入写入外部存储器时已经做了向量化并且按照二维卷积运算所需的数据读取顺序调整好了存储顺序,这样第一DMA单元直接从外部存储器中读取一段连续的空间就可以得到所需的数据,并且二维卷积运算在数据向量化之后已经转换成了一维运算。由于外部存储器一般采用DRAM实现,访问效率相对较低,如果每一次卷积运算都直接从外部存储器中读数据会影响模块的整体效率;为解决这一问题在卷积子模块内部实现了可以直接访问的第一内部缓存。DMA可以一次从外部存储器中读出多次卷积运算所需的数据并将其写入第一内部缓存,执行卷积运算时再从第一内部缓存中取数,读取内部缓存只需要1~2个时钟周期即可,效率比直接访问外部存储器高得多。第一内部缓存的存在减少了第一DMA单元直接访问外部存储器的频率。可以看到,内部缓存的大小对卷积模块的性能具有较大的影响,内部缓存越大,一次存储的数据就可以供给更多次的卷积运算使用,卷积模块的性能就越高。
乘累加运算由第一MAC和第一ACC共同实现的,其中第一MAC先计算乘法,然后将乘法的结果累加得到部分和;第一ACC单元将部分和做累加得到卷积的最终结果。第一MAC的数量可以按需配置以提供不同的计算性能,配置方式是分别配置c-size和k-size,分别对应卷积层的输入通道数和卷积核数量,总的乘法器的数量是c-size*k-size。比如CNN模块中某个卷积层输入通道数是8,卷积核尺寸是3*3,则计算出一个输出结果需要3*3*8=72次乘法运算,如果卷积核的数量也是8,则对每个卷积核计算出一个输出点需要3*3*8*8=576次乘法运算,如果将c-size和k-size都配置为4,则完成计算需要576/4/4=36次运算,如果将c-size和k-size都配置为8,完成运算只需要576/8/8=9次运算。
第一计算控制单元根据卷积子模块内各单元当前的运行状态决定给出何种控制指令,例如第一缓存中数据足够时控制第一MAC单元读数并计算,数据消耗完之后控制第一DMA单元从外部存储器中读数填充第一内部缓存。
卷积子模块的计算结果可以直接输出给后级的激活子模块,也可以通过第一DMA单元写出到外部存储器。
影响卷积子模块性能的关键是第一内部缓存大小和第一MAC的数量,这两个因素均可以灵活配置,缓存越大、第一MAC数量越多则卷积模块性能越高,硬件成本也越高。除第一MAC的数量可配置外,CNN模块中卷积子模块的数量也可以配置,数量越多,则性能越强。
激活子模块用于激活函数的运算,实现CNN中的激活层,可用于实现各种常见的线性或非线性激活函数。激活层的运算是单点运算,控制较为简单,按照计算公式逐点计算即可。
如图5所示,激活子模块包括第二计算控制单元、第二DMA单元、第二内部缓存、乘加计算单元、查找表、第一选择单元、第二选择单元和第二存储器访问控制单元。第二计算控制单元用于控制激活子模块内各单元的运行;第二DMA单元用于与外部存储器之间进行激活函数参数的读写交互;第二内部缓存用于缓存第二DMA单元从外部存储器读取的数据;乘加计算单元用于线性激活函数的运算;查找表用于非线性激活函数的处理;第一选择单元用于输入路径的选取,第二选择单元用于计算结果输出路径的选取;第二存储器访问控制单元用于于控制外部存储器与第二DMA单元的交互。
计算所需的网络参数需要通过第二DMA单元从外部存储器中读取,线性激活函数的参数主要是系数和偏置,可以直接用内部寄存器存储;非线性激活函数的参数主要是激活函数的函数值,直接存储在查找表中即可。
所需数据的来源通过第一选择来选取,当配置为流水线模式时,由前一级的卷积模块直接输出(可以按需求添加FIFO做缓冲);当配置为独立模式时由第二DMA单元从外部存储器中读取,此时同样可以一次读取多个数据并存储在第二内部缓存中,以此提高模块的运行效率。
对于线性激活函数,可以通过简单的乘加运算实现;非线性激活函数则通过查找表实现,以输入数据作为地址读取查找表即可,查找表的深度可以按需配置,深度越大则激活函数计算精度越高。
激活子模块的输出通过第二选择可以直接输出给后级的池化子模块或者通过第二DMA单元写出到外部存储器。
池化子模块用于实现CNN中的池化层,可以实现最大值池化、最小值池化以及平均值池化。
如图6所示,池化子模块包括第三计算控制单元、第三DMA单元、第三选择单元、LineBuffer、数值计算单元和第三存储器访问控制单元。第三计算控制单元控制池化子模块内各单元的运行;第三DMA单元用于池化子模块与外部存储器之间的读写交互;第三选择单元用于输入路径的选取;LineBuffer用于缓存激活子模块输出的数据,以及缓存第三DMA单元从外部存储器读取的数据;数值计算单元用于最大值、最小值以及平均值的计算;第三存储器访问控制单元用于控制外部存储器与第三DMA单元的交互。
池化层不需要网络参数,只要准备好数据就可以开始计算。池化子模块输入数据的来源同样可以配置为流水线模式或者独立模式,由于激活层是按照光栅格式输出数据,而池化层的运算是二维运算,为了得到池化计算所需的二维数据需要将激活层的输出经过LineBuffer缓存,LineBuffer同样也具备卷积和激活子模块中内部缓存的功能。
池化子模块的输出通过第三选择可以配置为直接输出给后级的全连接子模块或者通过第三DMA单元写出到外部存储器。
全连接子模块用来实现CNN中的全连接层,计算与卷积层类似,可以将全连接层看作卷积核尺寸是1*1的卷积层。
如图7所示,全连接子模块包括第四计算控制单元、第四DMA单元、第四选择单元、第三内部缓存、第二MAC、第二ACC和第四存储访问控制单元。第四计算控制单元用于控制全连接子模块内各单元的运行;第四DMA单元用于全连接子模块与外部存储器之间的读写交互;第四选择单元用于输入路径的选取;第三内部缓存用于缓存第四DMA单元从外部存储器读取的数据;第二MAC和第二ACC用于乘累加计算;第二MAC用于计算乘法,并将计算结果累加得到部分和;第二ACC将所述部分和进行累加得到卷积结果;第四存储访问控制单元用于控制外部存储器与第四DMA单元的交互。
全连接层的输出就是CNN最终的输出,通过DMA直接写出到外部存储器。
如图8所示,存储器访问控制模块由于多个子模块都需要访问外部存储器,但是对外的数据接口只有一个,因此需要设计单独的模块完成访问仲裁。各子模块内部可以采用较为简单自定义接口来简化设计,但是和外部存储器对接的数据接口最好采用标准化的接口协议,以便提高模块的通用性。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (10)
1.一种基于FPGA实现CNN加速的系统,其特征是,所述系统包括外部主控制器、外部存储器以及基于FPGA构建的CNN模块、存储访问控制模块;
所述外部主控制器用于处理CNN模块的输入、输出并管理CNN模块的运行;
所述外部存储器用于存储CNN模块的输入数据、CNN模块计算过程的中间数据以及CNN模块的最终计算结果;
所述CNN模块包括卷积子模块、激活子模块、池化子模块和全连接子模块,子模块的配置方式为单独配置或流水线模式配置;
所述存储访问控制模块用于实现各子模块对外部存储器访问的仲裁,并完成接口协议转换。
2.根据权利要求1所述基于FPGA实现CNN加速的系统,其特征是,所述系统还包括外部协控制器,所述外部协控制器设置在外部主控制器和CNN模块之间,用于进行寄存器的配置和中断的响应。
3.根据权利要求1所述基于FPGA实现CNN加速的系统,其特征是,所述外部存储器包括外部存储器A和外部存储器B,所述外部存储器、外部主控制器和CNN模块之间采用乒乓操作。
4.根据权利要求1所述基于FPGA实现CNN加速的系统,其特征是,所述CNN模块还包括寄存器访问控制模块,所述各子模块内均配置寄存器,所述访问控制模块用于向子模块寄存器写入配置值,控制子模块工作。
5.根据权利要求1-4任一项所述基于FPGA实现CNN加速的系统,其特征是,所述卷积子模块包括第一计算控制单元、第一DMA单元、第一MAC、第一ACC和第一存储器访问控制单元;
所述第一计算控制单元用于控制卷积子模块内各单元的运行;
所述第一DMA单元用于卷积子模块与外部存储器之间的读写交互;
所述第一MAC和第一ACC用于乘累加计算;第一MAC用于计算乘法,并将计算结果累加得到部分和;第一ACC将所述部分和进行累加得到卷积结果;
所述存储访问控制单元用于控制外部存储器与第一DMA单元的交互。
6.根据权利要求5所述基于FPGA实现CNN加速的系统,其特征是,所述卷积子模块还包括第一内部缓存,所述第一内部缓存用于缓存第一DMA单元从外部存储器读取的数据。
7.根据权利要求5所述基于FPGA实现CNN加速的系统,其特征是,所述第一MAC配置多个,配置方式为c-size和k-size,分别对应卷积层的输入通道数和卷积核数量。
8.根据权利要求1-4任一项所述基于FPGA实现CNN加速的系统,其特征是,所述激活子模块用于激活函数的运算,激活子模块包括第二计算控制单元、第二DMA单元、第二内部缓存、乘加计算单元、查找表、第一选择单元、第二选择单元和第二存储器访问控制单元;
所述第二计算控制单元用于控制激活子模块内各单元的运行;
所述第二DMA单元用于与外部存储器之间进行激活函数参数的读写交互;
所述第二内部缓存用于缓存第二DMA单元从外部存储器读取的数据;
所述乘加计算单元用于线性激活函数的运算;
所述查找表用于非线性激活函数的处理;
所述第一选择单元用于输入路径的选取,所述第二选择单元用于计算结果输出路径的选取;
所述第二存储器访问控制单元用于控制外部存储器与第二DMA单元的交互。
9.根据权利要求1-4任一项所述基于FPGA实现CNN加速的系统,其特征是,所述池化子模块包括第三计算控制单元、第三DMA单元、第三选择单元、LineBuffer、数值计算单元和第三存储器访问控制单元;
所述第三计算控制单元控制池化子模块内各单元的运行;
所述第三DMA单元用于池化子模块与外部存储器之间的读写交互;
所述第三选择单元用于输入路径的选取;
所述LineBuffer用于缓存激活子模块输出的数据,以及缓存第三DMA单元从外部存储器读取的数据;
所述数值计算单元用于最大值、最小值以及平均值的计算;
所述第三存储器访问控制单元用于控制外部存储器与第三DMA单元的交互。
10.根据权利要求1-4任一项所述基于FPGA实现CNN加速的系统,其特征是,所述全连接子模块包括第四计算控制单元、第四DMA单元、第四选择单元、第三内部缓存、第二MAC、第二ACC和第四存储访问控制单元;
所述第四计算控制单元用于控制全连接子模块内各单元的运行;
所述第四DMA单元用于全连接子模块与外部存储器之间的读写交互;
所述第四选择单元用于输入路径的选取;
所述第三内部缓存用于缓存第四DMA单元从外部存储器读取的数据;
所述第二MAC和第二ACC用于乘累加计算;第二MAC用于计算乘法,并将计算结果累加得到部分和;第二ACC将所述部分和进行累加得到卷积结果;
所述第四存储访问控制单元用于控制外部存储器与第四DMA单元的交互。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010118764.6A CN111353586A (zh) | 2020-02-23 | 2020-02-23 | 一种基于fpga实现cnn加速的系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010118764.6A CN111353586A (zh) | 2020-02-23 | 2020-02-23 | 一种基于fpga实现cnn加速的系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111353586A true CN111353586A (zh) | 2020-06-30 |
Family
ID=71194049
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010118764.6A Withdrawn CN111353586A (zh) | 2020-02-23 | 2020-02-23 | 一种基于fpga实现cnn加速的系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111353586A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111832720A (zh) * | 2020-09-21 | 2020-10-27 | 电子科技大学 | 一种可配置神经网络推理与在线学习融合计算电路 |
CN111882050A (zh) * | 2020-07-20 | 2020-11-03 | 复旦大学 | 基于fpga的用于提高bcpnn速度的设计方法 |
CN113362292A (zh) * | 2021-05-27 | 2021-09-07 | 重庆邮电大学 | 一种基于可编程逻辑门阵列的骨龄评估方法及系统 |
CN114281554A (zh) * | 2022-03-08 | 2022-04-05 | 之江实验室 | 用于3d图像处理的3d-cnn加速方法及装置、电子设备 |
-
2020
- 2020-02-23 CN CN202010118764.6A patent/CN111353586A/zh not_active Withdrawn
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111882050A (zh) * | 2020-07-20 | 2020-11-03 | 复旦大学 | 基于fpga的用于提高bcpnn速度的设计方法 |
CN111882050B (zh) * | 2020-07-20 | 2024-02-06 | 复旦大学 | 基于fpga的用于提高bcpnn速度的设计方法 |
CN111832720A (zh) * | 2020-09-21 | 2020-10-27 | 电子科技大学 | 一种可配置神经网络推理与在线学习融合计算电路 |
CN113362292A (zh) * | 2021-05-27 | 2021-09-07 | 重庆邮电大学 | 一种基于可编程逻辑门阵列的骨龄评估方法及系统 |
CN114281554A (zh) * | 2022-03-08 | 2022-04-05 | 之江实验室 | 用于3d图像处理的3d-cnn加速方法及装置、电子设备 |
CN114281554B (zh) * | 2022-03-08 | 2022-06-17 | 之江实验室 | 用于3d图像处理的3d-cnn加速方法及装置、电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111353586A (zh) | 一种基于fpga实现cnn加速的系统 | |
CN108805266B (zh) | 一种可重构cnn高并发卷积加速器 | |
CN110852428B (zh) | 基于fpga的神经网络加速方法和加速器 | |
CN107301455B (zh) | 用于卷积神经网络的混合立方体存储系统及加速计算方法 | |
CN112463719A (zh) | 一种基于粗粒度可重构阵列实现的存内计算方法 | |
US11657119B2 (en) | Hardware accelerated convolution | |
CN112732639B (zh) | 一种粗粒度动态可重构处理器及其数据处理方法 | |
US11403104B2 (en) | Neural network processor, chip and electronic device | |
CN113743599A (zh) | 一种卷积神经网络的运算装置及服务器 | |
US20210303358A1 (en) | Inference Engine Circuit Architecture | |
EP3975061A1 (en) | Neural network processor, chip and electronic device | |
CN111860773B (zh) | 处理装置和用于信息处理的方法 | |
CN115033188A (zh) | 一种基于zns固态硬盘的存储硬件加速模块系统 | |
Li et al. | A hardware-efficient computing engine for FPGA-based deep convolutional neural network accelerator | |
CN113157638B (zh) | 一种低功耗存储器内计算处理器和处理运算方法 | |
CN111061997A (zh) | 面向稀疏矩阵向量乘的数据传输方法及dma传输装置 | |
WO2022068149A1 (zh) | 数据加载和存储系统及方法 | |
WO2021115149A1 (zh) | 神经网络处理器、芯片和电子设备 | |
CN109948787B (zh) | 用于神经网络卷积层的运算装置、芯片及方法 | |
CN112346704B (zh) | 一种用于卷积神经网络的全流水线型乘加单元阵列电路 | |
CN114492777A (zh) | 一种算力可扩展的多核神经网络张量处理器 | |
Qiu et al. | An FPGA-based convolutional neural network coprocessor | |
CN115081603A (zh) | 执行Winograd卷积的计算装置、集成电路装置及板卡 | |
CN115081600A (zh) | 执行Winograd卷积的变换单元、集成电路装置及板卡 | |
CN113138804B (zh) | 在传输过程中提取流数据特征的流处理器及其实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20200630 |