基于FPGA的神经网络sigmoid函数设计与实现.doc_第1页
基于FPGA的神经网络sigmoid函数设计与实现.doc_第2页
基于FPGA的神经网络sigmoid函数设计与实现.doc_第3页
基于FPGA的神经网络sigmoid函数设计与实现.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于FPGA的神经网络sigmoid函数设计与实现摘要 提出基于Hybrid CORDIC算法计算神经网络sigmoid激活函数的方法,采用VHDL硬件描述语言和流水线技术构造了sigmoid函数的寄存器传输级模块,并在现场可编程门阵列上给予硬件实现。优化后的sigmoid函数模块结合了查找表和CORIDC迭代算法的特点,具有高效率、高速度、高精度等优点。实验数据表明,本设计模块的计算结果与实际结果的误差小于0.15%,完全满足神经网络数字VLSI的要求。 关键词 神经网络,sigmoid函数,坐标旋转数字计算机,现场可编程门阵列,流水线Implement Sigmoid Function for Neural Networks based FPGA DesignAbstract Efficient design of sigmoid function for neural networks based FPGA is presented in this paper. Employing the hybrid CORDIC algorithm, the sigmoid function is described with VHDL in register transfer level. In order to enhance the efficiency and accuracy of implementation on Alteras FPGA, the technology of pipeline and look-up table have been utilized. Through comparing the results obtained by the post-simulation of EDA tools with the results directly accounted by Matlab, it can be concluded that the designed model works accurately and efficiently.Key words neural networks, sigmoid function, CORDIC, FPGA, pipeline10. 引言人工神经网络(ANN)理论模型1要求发展神经网络型计算机来实现,但迄今为止,由于条件的限制,这方面的工作还主要集中在传统计算机的软件模拟实现上。大多数学者认为,要使人工神经网络更快、更有效地进行大规模计算,关键在于其超大规模集成电路(V LSI)硬件的实现。正是基于上述考虑,神经网络的数字VLSI技术近年来发展很快,已成为ANN的一个重要分支。在神经网络的数字VLSI技术中,sigmoid函数2的硬件设计与实现是一个重点,文献3中提出了利用泰勒级数多项式展开来实现sigmoid函数的方法,但是该方法需要大量的乘法器单元,因此不利于大规模数字神经网络的集成;文献4中提出了利用分段线性逼近的方法,但利用该方法来计算sigmoid函数,会降低sigmoid函数的计算精度。本文提出了一种利用Hybrid CORDIC算法来计算sigmoid函数的方法,基于现场可编程门阵列(Field Programmable Gate Array)进行了相应的硬件设计、优化和实现。由于采用了查找表、流水线等技术,所研制的sigmoid函数模块具有高效、高速、精确等优点,充分满足了数字神经网络系统的需要。1. CORDIC算法1.1 CORDIC算法CORDIC(Co-ordinate Rotation Digital Computer,坐标旋转数字计算机)算法5是一种高效的迭代算法,它通过一系列简单的移位和加/减法迭代来实现矢量极坐标的旋转。由于该算法采用的运算符简单(移位和加/减),易于硬件实现,因此广泛的应用于乘法、除法、双曲线函数等超越代数函数的数字硬件设计和实现中。基本的CORDIC算法方程如式(1)(2)所示: (1) (2)参数m可取值-1、0、1,分别代表双曲线、线性、圆周三种极坐标变换模式,与其对应的迭代角度分别为,。每种变换模式的两个4旋转方向都是确定的,对向量化()而言,具有原点的向量(X0,Y0)根据的值进行旋转,直到迭代收敛到0;对旋转()而言,具有原点的向量(X0,Y0)根据的值进行旋转,直到迭代收敛到0。是模校正因子,用于校正第k次迭代所引起的模值改变,一般在每次迭代过程中先不考虑的模校正作用,在迭代结束后用整个迭代过程的总模校正因子对输出结果进行校正。整个CORDIC算法的操作模式如表1所示。表1 CORDIC算法的操作模式m(Rotation)(Vectoring)1(Circular)0(Linear)-1(Hyperbolic)CORDIC算法的本质是利用一组常数的角度基底,去逼近任意一个旋转角度,为了确保CORDIC算法的收敛性,这组常数的角度基底必须满足式(3)的不等式关系6: (3)对于圆周模式或者线性模式而言,由于或者,满足式(3)的不等式关系,因此在这两种模式下,CORDIC算法的收敛性是满足的;但对于双曲线模式而言,由于并不是所有的,因此不满足式(3)的不等式关系,从而使得该模式下的收敛性无法得以保证。一个相对简单的解决方法是当迭代次数时,相应的迭代进行两次,于是在双曲线模式下,旋转角度基底如(4)所示: (4)从表1可以看出,当采用不同的操作模式并赋予不同的初值时,CORDIC算法可用于计算各种不同的超越代数函数。例如当时,可计算出对应的双曲正弦、双曲余弦及指数;当时,可计算出对应的倒数函数。这两种函数都将用于神经网络sigmoid函数的设计中。1.2 Hybrid CORDIC算法在利用CORDIC算法来实现基本超越代数函数计算的过程中,所需的计算精度越高,相应的迭代次数就越多。迭代次数过多,又从而导致计算效率下降。虽然流水线技术在大规模集成电路设计中的引入适当的提高了该算法的计算效率,但是当集成电路对流水线级数提出限制时,利用CORDIC算法进行计算的效率问题需再次得以解决。从原则上来说,CORDIC算法通过多次迭代可得到对应任意分辨率的输入数据的结果,而传统的查找表(LUT)技术由于受到查找表容量随着分辨率增长而迅速增长的限制,往往实用于低分辨率的输入数据范围。将传统的查找表技术和基本的CORDIC算法相结合的Hybrid CORDIC算法解决了计算效率和计算精度的矛盾。利用该方法,根据需要适当分配LUT和基本CORDIC算法迭代运算所占的比例,从而能够高效率、高精度的计算对应的输出值。第2节将重点介绍如何利用Hybrid CORDIC算法来设计sigmoid函数并采用FPGA器件实现相应的逻辑功能。2. 基于FPGA的sigmoid模块的实现2.1 Sigmoid模块的系统总体设计分析sigmoid函数输入与输出的关系,可得到当输入变量Z大于7.5或小于-7.5时,sigmoid函数输出值趋近于1或0。因此在本设计中定义输入信号范围为,对应的输出信号的范围为。图1 sigmoid函数的系统设计框图如图1所示,采用自顶向下的设计方法,sigmoid函数的寄存器传输级(RTL)模块被划分为指数运算单元子模块和倒数运算单元子模块。sigmoid函数的RTL模块的输入和输出数据分别采用了两种数据格式:输入数据用16-bits字长来表示,其中1-bit用于符号位,3-bits用于表示输入数据的整数部分,12-bits用于表示输入数据的小数部分;输出数据用32-bits字长来表示,其中1-bit用于符号位,1-bit用于表示输出数据的整数部分,30-bits用于表示输出数据的小数部分。输入、输出数据采用不同的数据格式的主要原因在于sigmoid函数的输出范围,如果其输入和输出采用相同的数据格式,那么输出信号的大部分数据位将会一直为0,所以输入和输出应采用不同的数据格式。设计的sigmoid函数模块在流水线优化前完成一次正常计算需要经过24级流水线。指数运算子模块包含16级流水线,其中1级流水线用于输入数据的锁存,1级流水线用于查找表操作,13级流水线用于双曲线模式下CORDIC算法的旋转迭代,1级流水线用于总模校正因子的校正以及指数的计算;倒数运算子模块包含8级流水线,其中1级流水线用于数据的归一化,1级用于查找表操作,1级用于乘法功能的实现,4级用于线性模式下的CORDIC算法的向量化迭代,1级用于数据的反归一化。2.2 指数运算单元子模块考虑到输入信号Z的范围,指数运算单元子模块的输出信号q的数据格式用24-bits字长来表示,其中1-bit用于符号位,11-bits用于表示输出信号的整数部分,12-bits用于表示输出信号的小数部分。依据Hybrid CORDIC算法的基本原理,在指数运算单元子模块中构建了一个bits容量的ROM,该ROM里面存储着双曲正弦和双曲余弦的值。输入信号Z的1-bit符号位和3-bits的整数位作为ROM的地址输入,通过读取ROM中24-bits的存储值,将直接获得与输入数据整数部分对应的双曲正弦和双曲余弦,从而节省了利用基本CORDIC算法所需要的最大迭代次数为7次的迭代时间。输入数据12-bits的小数部分决定了接下来的13次迭代(其中k=4的迭代进行了两次),如图2所示,每次迭代运算仅仅用到移位和加减法,13级基于流水线的迭代操作后,通过基于移位的总模校正运算和减法运算即可获取对应的指数值,从而实现了指数运算单元子模块的功能。图2 基于Hybrid CORDIC算法的指数运算单元子模块的框图2.3 倒数运算单元子模块倒数运算单元子模块的设计同样也是基于Hybrid CORDIC算法的。在该子模块中包含有一个ROM单元,通过进行查找表操作来读取里面存储的对应于小数部分高10-bits的倒数值,接下来的CORDIC迭代操作用于计算对应整个输入的准确的倒数值7。该子模块由加法子单元、数据归一化和反归一化子单元、查找表子单元三部分组成:其中加法子单元用于计算输入信号q与1的和;数据归一化和反归一化子单元在倒数计算前将利用移位运算把数据转换到,在倒数计算后同样利用移位运算将实际的计算结果还原;查找表子单元实际上是一个容量为bits的ROM, 归一化后的数据的高10-bits小数部分的值将作为该ROM的地址输入,读取里面存储的对应的倒数值。从表1可知,CORDIC算法在线性向量化的模式下,通过迭代操作,Z将逼近输入X的倒数值。第k次迭代时,根据旋转方向,Z将加上或者减去。由于Z的初始值为0,在经过k次迭代后将得到k-bits小数宽度的倒数值,本设计中经过查找表操作得到的值对应于Z在k次迭代后的值(在本设计中k10),因此方程式(1)可转换为式(5): (5)从式(5)可看出,原有的k次迭代操作被一次LUT操作所代替,因此大大的提高了计算效率。由于目前流行的FPGA器件中一般都含有一定数量的专用乘法器单元,因此16x16bits的专用乘法器和32位的加法/减法器将用于求解的运算。然后将和l的值作为初始值赋值给接下来的线性向量化的CORDIC操作,按照图2所示的迭代操作,进行4次迭代,最终得到输入X的精确的倒数值。3. 实验仿真与优化3.1 仿真利用VHDL硬件描述语言设计的sigmoid函数的RTL模块采用Altera公司StratixII系列的FPGA EP2S60FC484作为目标芯片,使用Altera公司的FPGA设计工具QuartusII 5.0进行综合、时序分析和仿真。表2是综合后的时序分析结果,从图中可得到所设计的sigmoid函数模块在流水线优化前工作的最高时钟 频率约为109MHz,其最大延时来自于乘法器运算子单元,耗时约为9ns。图3-a是该模块在流水线优化前的后仿真波形示意图,为了便于观察,设定sigmoid函数模块工作在100MHz时钟频率下,从零点为起点在模块的输入端Z依次给出任意10个输入值(),经过24级流水线操作,在sigmoid函数模块的输出端sigmoid_out得到对应的10个输出值。从图中可看出整个模块的流水线操作正常,为了比较RTL模块输出值与实际值的误差,我们用Matlab软件去直接计算与这10个对应的输出值(取输出值的4位有效数字),结果如表3所示。从表3的数据可看出,所设计sigmoid函数RTL模块的后仿真结果与实际结果的误差0.15%。表2 流水线优化前后的时序分析结果RTL模型类型最大工作频率流水线级数优化前的sigmoid函数RTL模型109MHz24优化后的sigmoid函数RTL模型109MHz10表3 QuartusII后仿真结果和Matlab直接计算结果比较输入值(Hex/Dec)QuartusII输出值(Hex/Dec)Matlab输出值(Dec)|误差|(%)96CB/-6.57540016D780/0.0013940.0013920.14BDAD/-4.145300FF9400/0.015600.015590.06D100/-2.937503385000/0.050310.050330.04E400/-1.7500097BC000/0.14820.14810.07FA00/-0.37501A158000/0.40760.40730.070600/0.375025ED0000/0.59260.59270.021800/1.5000345F0000/0.81830.81760.043468/3.27543DDA0000/0.96370.96360.015253/5.14533FA10000/0.99420.994207635/7.387940000000/1.00000.99940.06图3-a 流水线优化前的sigmoid函数RTL模型的后仿真波形示意图图3-b 流水线优化后的sigmoid函数RTL模型的后仿真波形示意图3.2 流水线优化基于Hybrid CORDIC算法所设计的sigmoid函数的计算精度的提高是以增加迭代次数为代价的,在优化前的设计中,虽然采用了LUT技术,节省了一定的迭代次数,但sigmoid函数的RTL模型进行一次计算依然需要经过24级流水线。为了提高计算效率,需要在不降低电路最高工作频率的前提下,对流水线的级数进行优化。通过QuartusII的时序分析可知,优化前的sigmoid函数的RTL模型的最大时延来自于乘法器运算单元子模块。在流水线的优化过程中,在保证流水线最大时延不增加的情况下,将多级低延时的流水线合并为一级流水线。在本优化中,将指数运算单元子模块中的13级双曲线模式下CORIDC算法的旋转迭代流水线操作和1级总模校正因子校正以及指数计算的流水线操作合并为4级流水线操作;将倒数运算子模块中1级用于数据归一化的流水线操作和1级用于查找表的流水线操作合并为1级流水线操作,将4级用于线性模式下的CORDIC算法的向量化迭代的流水线操作合并为1级流水线操作。基于上述分析,优化后RTL模型的流水线级数从24级减少到10级,且最高工作频率依然为109MHz,优化后的RTL模型的仿真结果如图3-b所示。实验结果表明,优化后的sigmoid函数的RTL模型具有高速度、高效率、高精确度的优点,将其作为软核应用于神经网络的数字VLSI的设计与开发中,必将起到积极的促进性的作用。参考文献:1 K. HORNIK, M. STINCHCOMBE, H. WHITE. Multilayer Feedforward Networks. Neural NetworksJ, 1989, 2: 359-366.2 MARTIN T. HAGAN, HOWARD B. DEMUTH, MARK BEA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论