基于Python的sigmoid函数FPGA实现
- 首页 >> Python编程sigmoid函数是人工神经网络中通常采用的传递函数,采用基于Python的软硬件协同设计方法,在FPGA上实现了定点sigmoid函数。实验结果表明采用基于Python的软硬件协同设计方法,可以利用Python上大量的包和模块从而大幅度提高系统设计、仿真和校验的效率,并且能将软件算法快速有效地转换为硬件实现,在整个软硬件设计过程中仅采用Python语言,解决了当前系统设计中软硬件设计者分别采用不同设计语言存在的沟通问题
人工神经网络在模式识别、分类、人工智能领域有着广泛应用。在人工神经网络中,sigmoid函数是人工神经网络中常用的一种传递函数,在嵌入式应用中.sigmoid函数通常可以在DSP和FPGA上实现。FPGA作为一种可编程逻辑器件,具有功耗低、可以在上面实时实现大量的算法。目前在FPGA上面有许多神经网络和sigmoid函数的实现方案,在这些方案中普遍采用Verilog和VHDL语言进行硬件设计,而软件设计通常采用其他高级语言比如C语言.Python语言等,由于这种设计方法硬件设计者和软件设计者之间采用不同的设计语言.存在着仿真和校验效率低、软硬件设计者之间沟通较为困难等问题,而软硬件协同设计方法在软硬件设计过程中仅采用一种设计语言,具体到神经网络上比如采用SystemC⋯.handle—C【21等基于C语言的软硬件协同设计语言。Python.3。是一种简单易学并且功能强大的编程语言,采用这种新的基于Python的软硬件设计方法,可以通过Python扩展包MyHDL‘41使其能支持硬件设计和仿真,并能够在FPGA上快速实现人工神经网络中的sigmoid函数。
2方法
2.1 sigmoid的FPGA实现方法
在人工神经网络中。通常使用的一种sigmoid函数为log—sigmoid函数,其公式如式(1)所示,函数f(x)的值域在(0,1)之间,f(x)=1/(1+e”) (1)sigmoid的FPGA实现方法主要包括LUT查找表,分段线性逼近,高阶逼近或泰勒级数展开‘5‘彰等。本文采用文献[8]中描述的分段线性逼近方法,讣钎:公式女Il式(2)
Y=1 IXlI>5
Y=0.03125丰lXI+0.84375 2.375≤IXl<5
Y=0.125:I:lXI+0.625 1≤lXI<2.375
Y=0.25{IXl+0.5 0≤IXI<1
Y=1一Y X<0
2.2 log—sigmoid定点数的格式表示
为GTKWAVE,Python开发环境使』lJ SPE(Stani’sPython Editor),所有的这些。l:』i.都是免赞的。FPGA器件采川ahera公I订CyclonelI 2C35F672C6,编泽综介
(2) 采川Quartus 12.1spl webpack。
通常在FPGA上的数可以采用定点和浮点两种方式来表示,由于定点的表示方式尽管设计较为复杂,但是速度较快,占用FPGA资源较小,通常采用定点来完成。本设计中输入数X为9位定点数,其中符号位1位,整数4位,小数4位;输出Y也为9位定点数,符号位1位,整数1位,小数位7位。式(2)中的常数采用符号位l位,整数l位,小数位7位的表示方式。
2.3 Python软硬件协同设计
基于Python的软硬件协同设计过程如图1所示【9‘,图中Python的硬件设计部分采用MyHDL可综合子集.最后使用MyHDL的toVel’ilog()方法将MyHDL设计自动转换为相应的VeriIog代码,而Python硬件测试平台可以使用任何Python语句从而支持复杂的仿真校验。另外MyHDL支持与Verilog混合仿真,设计的硬件测试平台还可以用来作为转换后的Verilog代码测试平台,也就是测试平台可以重用,不用重新编写,仿真速度和设计效率大大提高。在仿真符合要求之后,就可以进行FPGA设计流程后续的下载,综合和测试工作。