基于fpga的神经网络sigmoid函数设计与实现

上传人:第*** 文档编号:30643148 上传时间:2018-01-31 格式:DOC 页数:4 大小:485.50KB
返回 下载 相关 举报
基于fpga的神经网络sigmoid函数设计与实现_第1页
第1页 / 共4页
基于fpga的神经网络sigmoid函数设计与实现_第2页
第2页 / 共4页
基于fpga的神经网络sigmoid函数设计与实现_第3页
第3页 / 共4页
基于fpga的神经网络sigmoid函数设计与实现_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《基于fpga的神经网络sigmoid函数设计与实现》由会员分享,可在线阅读,更多相关《基于fpga的神经网络sigmoid函数设计与实现(4页珍藏版)》请在金锄头文库上搜索。

1、1基于FPGA的神经网 络 sigmoid函数 设计 与 实现摘要 提出基于 Hybrid CORDIC 算法计算神经网络 sigmoid 激活函数的方法,采用 VHDL 硬件描述语言和流水线技术构造了 sigmoid 函数的寄存器传输级模块,并在现场可编程门阵列上给予硬件实现。优化后的sigmoid 函数模块结合了查找表和 CORIDC 迭代算法的特点,具有高效率、高速度、高精度等优点。实验数据表明,本设计模块的计算结果与实际结果的误差小于 0.15%,完全满足神经网络数字 VLSI 的要求。 关键词 神经网络,sigmoid 函数,坐标旋转数字计算机,现场可编程门阵列,流水线Impleme

2、nt 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 eff

3、iciency 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 accurat

4、ely and efficiently.Key words neural networks, sigmoid function, CORDIC, FPGA, pipeline0. 引言人工神经网络(ANN )理论模型 1要求发展神经网络型计算机来实现,但迄今为止,由于条件的限制,这方面的工作还主要集中在传统计算机的软件模拟实现上。大多数学者认为,要使人工神经网络更快、更有效地行大规模计算,关键在于其超大规模集成电路(V LSI)硬件的实现。正是基于上述考虑,神经网络的数字VLSI 技术近年来发展很快,已成为ANN的一个重要分支。在神经网络的数字VLSI技术中,sigmoid函数2的硬件设计与实

5、现是一个重点,文献 3中xey1提出了利用泰勒级数多项式展开来实现sigmoid函数的方法,但是该方法需要大量的乘法器单元,因此不利于大规模数字神经网络的集成;文献 4中提出了利用分段线性逼近的方法,但利用该方法来计算sigmoid函数,会降低sigmoid函数的计算精度。本文提出了一种利用Hybrid CORDIC算法来计算sigmoid函数的方法,基于现场可编程门阵列(Field Programmable Gate Array)行了相应的硬件设计、优化和实现。由于采用了查找表、流水线等技术,所研制的sigmoid函数模块具有高效、高速、精确等优点,充分满足了数字神经网络系统的需要。1. C

6、ORDIC算法1.1 CORDIC算法CORDIC(Co-ordinate Rotation Digital Computer,坐标旋转数字计算机)算法 5是一种高效的迭代算法,它通过一系列简单的移位和加/ 减法迭代来实现矢量极坐标的旋转。由于该算法采用的运算符简单(移位和加/减),易于硬件实现,因此广泛的应用于乘法、除法、双曲线函数等超越代数函数的数字硬件设计和实现中。基本的CORDIC算法方程如式(1 )(2)所示: (1 ) kkkk YXmNYX1(2 )Z1参数m可取值-1、0 、1,分别代表双曲线、线性、圆周三种极坐标变换模式,与其对应的迭代角度 分别k为 , , 。每种变换模式的

7、两个kh2arctnk2arctn旋转方向都是确定的,对向量化( )而言,具0KY有原点的向量(X 0,Y0)根据 的值行旋)(kkZsign转,直到 迭代收敛到0;对旋转( )而言,K具有原点的向量(X 0,Y0)根据 的值kk行旋转,直到 迭代收敛到0。 是模校正因子,ZN用于校正第k次迭代所引起的模值改变,一般在每次迭代过程中先不考虑 的模校正作用,在迭代结束后用kN整个迭代过程的总模校正因子 对输出结KkN1果行校正。整个CORDIC算法的操作模式如表1 所示。表1 CORDIC 算法的操作模式mm0KZ(Rotation)0KY(Vectoring) k1(Circular)sinc

8、oYX00NY2XN00arctnZ2arctn0 KKk2(Linear) 0ZXYK0/XYZK-1(Hyperbolic)0sinhcoN2N0arctnhkh2arctnCORDIC算法的本质是利用一组常数的角度基底, 去逼近任意一个旋转角度,为了确保k,0KCORDIC算法的收敛性,这组常数的角度基底必须满足式(3 )的不等式关系 6:(3 )10Kk对于圆周模式或者线性模式而言,由于或者 ,满足式)2(tan5.)2(tan11kkk25.0)((3)的不等式关系,因此在这两种模式下,CORDIC算法的收敛性是满足的;但对于双曲线模式而言,由于并不是所有的 ,因此不满足)(tanh

9、.)(th11kk式(3)的不等式关系,从而使得该模式下的收敛性无法得以保证。一个相对简单的解决方法是当迭代次数时,相应的迭代行两次,于是K,3,14jk在双曲线模式下,旋转角度基底如(4)所示:(4 )2arctn,2arctn,arct, , 144010 Khh从表1可以看出,当采用不同的操作模式并赋予不同的初值时,CORDIC算法可用于计算各种不同的超越代数函数。例如当 时,00,1ZYNXm可计算出对应的双曲正弦 、双曲余弦)cosh(K及指数 ;当)sinh(0ZYKZe0时,可计算出对应的倒数函,YXm数 。这两种函数都将用于神经网络sigmoid函1数的设计中。1.2 Hybr

10、id CORDIC算法在利用CORDIC算法来实现基本超越代数函数计算的过程中,所需的计算精度越高,相应的迭代次数就越多。迭代次数过多,又从而导致计算效率下降。虽然流水线技术在大规模集成电路设计中的引入适当的提高了该算法的计算效率,但是当集成电路对流水线级数提出限制时,利用CORDIC算法行计算的效率问题需再次得以解决。从原则上来说,CORDIC算法通过多次迭代可得到对应任意分辨率的输入数据的结果,而传统的查找表(LUT)技术由于受到查找表容量随着分辨率增长而迅速增长的限制,往往实用于低分辨率的输入数据范围。将传统的查找表技术和基本的CORDIC算法相结合的Hybrid CORDIC算法解决了

11、 计算效率和计算精度的矛盾。利用该方法, 根据需要适当分配 LUT和基本CORDIC算法迭代运算所占的比例,从而能够高效率、高精度的计算对应的输出值。第2节将重点介绍如何利用 Hybrid CORDIC算法来设计sigmoid 函数并采用 FPGA器件实现相应的逻辑功能。2. 基于FPGA的sigmoid 模块的实现2.1 Sigmoid模块的系统总体设计分析sigmoid函数输入与输出的关系,可得到当输入变量Z大于7.5或小于-7.5 时, sigmoid函数输出值趋近于1或 0。因此在本设计中定义输入信号范围为,对应的输出信号的范围为 。5.7. 10Se x p o n e n t i

12、a lf u n c t i o n u n i tz 1 5 . . 0 q 2 3 . . 0 s 3 1 . . 0 d i v i s i o nf u n c t i o n u n i tc l k , e ns i g m o i d f u n c t i o nzze图 1 sigmoid函数的系统设计框图如图1所示,采用自顶向下的设计方法, sigmoid函数的寄存器传输级(RTL)模块被划分为指数运算单元子模块和倒数运算单元子模块。sigmoid函数的RTL模块的输入和输出数据分别采用了两种数据格式:输入数据用16-bits 字长来表示,其中1-bit用于符号位,3-bi

13、ts 用于表示输入数据的整数部分,12-bits用于表示输入数据的小数部分;输出数据用32-bits字长来表示,其中1-bit用于符号位,1-bit 用于表示输出数据的整数部分,30-bits用于表示输出数据的小数部分。输入、输出数据采用不同的数据格式的主要原因在于sigmoid函数的输出范围,如果其输入和输出采用相同的数据格式,那10S么输出信号的大部分数据位将会一直为0,所以输入和输出应采用不同的数据格式。设计的sigmoid函数模块在流水线优化前完成一次正常计算需要经过24级流水线。指数运算子模块包含16级流水线,其中1级流水线用于输入数据的锁存, 1级流水线用于查找表操作,13级流水线

14、用于双曲线模式下CORDIC算法的旋转迭代,1级流水线用于总模校正因子的校正以及指数 的计算;倒数运算子KZYXe0模块包含8级流水线,其中1级流水线用于数据的归一化,1 级用于查找表操作,1级用于乘法功能的实现,4级用于线性模式下的CORDIC算法的向量化迭代,1 级用于数据的反归一化。2.2 指数运算单元子模块考虑到输入信号Z的范围,指数运算单元子模块 的输出信号q的数据格式用24-bits字长来表示,其中1-bit用于符号位,11-bits用于表示输出信号的整数部分,12-bits用于表示输出信号的小数部分。依据Hybrid CORDIC算法的基本原理,在指数运算单元子模块中构建了一个

15、bits容量的ROM ,该42ROM里面存储着双曲正弦和双曲余弦的值。输入信号Z的1-bit符号位和 3-bits的整数位作为 ROM的地址输入,通过读取ROM中24-bits的存储值,将直接获得与输入数据整数部分对应的双曲正弦和双曲余弦,从而节省了利3用基本CORDIC算法所需要的最大迭代次数为7 次的迭代时间。输入数据12-bits的小数部分决定了接下来的13次迭代(其中k =4的迭代行了两次),如图2 所示,每次迭代运算仅仅用到移位和加减法,13级基于流水线的迭代操作后,通过基于移位的总模校正运算和减法运算即可获取对应的指数值,从而实现了指数运算单元子模块的功能。 Z X 0X 4X 4

16、 X 1 1Y 0Y 4Y 4 Y 1 1X 1 2Y 1 2Z 0Z 4Z 4 Z 1 1 ZZ R O Mp i p e l i n e r e g i s t e ra d d / s u b s h f i tZ 1 2e x p ( - Z )s c a l e a n d s u b m o d e l图2 基于Hybrid CORDIC 算法的指数运算单元子模块的框图2.3 倒数运算单元子模块倒数运算单元子模块的设计同样也是基于Hybrid CORDIC算法的。在该子模块中包含有一个ROM 单元,通过行查找表操作来读取里面存储的对应于小数部分高10-bits 的倒数值,接下来的CORDIC迭代操作用于计算对应整个输入的准确的倒

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号