基于Python的sigmoid函数FPGA实现

2014-07-01 23:45刘毅飞
微处理机 2014年1期
关键词:人工神经网络设计者波形

刘毅飞

(湖北科技学院生物医学工程学院,咸宁437100)

基于Python的sigmoid函数FPGA实现

刘毅飞

(湖北科技学院生物医学工程学院,咸宁437100)

sigmoid函数是人工神经网络中通常采用的传递函数,采用基于Python的软硬件协同设计方法,在FPGA上实现了定点sigmoid函数。实验结果表明采用基于Python的软硬件协同设计方法,可以利用Python上大量的包和模块从而大幅度提高系统设计、仿真和校验的效率,并且能将软件算法快速有效地转换为硬件实现,在整个软硬件设计过程中仅采用Python语言,解决了当前系统设计中软硬件设计者分别采用不同设计语言存在的沟通问题。

Python语言;现场可编程门阵列;sigmoid函数;软硬件协同设计;神经网络

1 引 言

人工神经网络在模式识别、分类、人工智能领域有着广泛应用。在人工神经网络中,sigmoid函数是人工神经网络中常用的一种传递函数,在嵌入式应用中,sigmoid函数通常可以在DSP和FPGA上实现。FPGA作为一种可编程逻辑器件,具有功耗低、可以在上面实时实现大量的算法。目前在FPGA上面有许多神经网络和sigmoid函数的实现方案,在这些方案中普遍采用Verilog和VHDL语言进行硬件设计,而软件设计通常采用其他高级语言比如C语言,Python语言等,由于这种设计方法硬件设计者和软件设计者之间采用不同的设计语言,存在着仿真和校验效率低、软硬件设计者之间沟通较为困难等问题,而软硬件协同设计方法在软硬件设计过程中仅采用一种设计语言,具体到神经网络上比如采用SystemC[1],handle-C[2]等基于C语言的软硬件协同设计语言。Python[3]是一种简单易学并且功能强大的编程语言,采用这种新的基于Python的软硬件设计方法,可以通过Python扩展包MyHDL[4]使其能支持硬件设计和仿真,并能够在FPGA上快速实现人工神经网络中的sigmoid函数。

2 方法

2.1 sigmoid的FPGA实现方法

在人工神经网络中,通常使用的一种sigmoid函数为log-sigmoid函数,其公式如式(1)所示,函数f(x)的值域在(0,1)之间,

sigmoid的FPGA实现方法主要包括LUT查找表,分段线性逼近,高阶逼近或泰勒级数展开[5-8]等。本文采用文献[8]中描述的分段线性逼近方法,计算公式如式(2)

2.2 log-sigmoid定点数的格式表示

通常在FPGA上的数可以采用定点和浮点两种方式来表示,由于定点的表示方式尽管设计较为复杂,但是速度较快,占用FPGA资源较小,通常采用定点来完成。本设计中输入数x为9位定点数,其中符号位1位,整数4位,小数4位;输出y也为9位定点数,符号位1位,整数1位,小数位7位。式(2)中的常数采用符号位1位,整数1位,小数位7位的表示方式。

2.3 Python软硬件协同设计

基于Python的软硬件协同设计过程如图1所示[9],图中Python的硬件设计部分采用MyHDL可综合子集,最后使用MyHDL的toVerilog()方法将MyHDL设计自动转换为相应的Verilog代码,而Python硬件测试平台可以使用任何Python语句从而支持复杂的仿真校验。另外MyHDL支持与Verilog混合仿真,设计的硬件测试平台还可以用来作为转换后的Verilog代码测试平台,也就是测试平台可以重用,不用重新编写,仿真速度和设计效率大大提高。在仿真符合要求之后,就可以进行FPGA设计流程后续的下载,综合和测试工作。

3 结果

3.1 实验环境

Python上存在大量的软件包,模块可以用来提高设计效率,实验用到的Python包包括:硬件设计和仿真使用MyHDL 0.8[10],绘图使用matplotlib,定点设计采用fixedpoint,数值运算采用numpy。波形查看工具为GTKWAVE,Python开发环境使用SPE(Stani’s Python Editor),所有的这些工具都是免费的。FPGA器件采用altera公司CycloneII2C35F672C6,编译综合采用Quartus 12.1sp1 webpack。

图1 基于Python软硬件协同设计流程

3.2 仿真波形

在设计过程中生成的VCD仿真波形可以随时采用GTKWAVE查看,可以便于校验设计是否正确,最终设计完成的sigmoid函数输出的仿真模拟波形如图2所示。

3.3 精度及误差

由于整个过程采用Python设计,Python存在大量的软件包可以使用,来评估设计精度和绘制各种图,采用matplotlib包绘制的MyHdl完成的sigmoid函数FPGA实现和numpy的sigmoid函数比较图如图3所示,函数输入x在[-8,8]之间时的sigmoid函数FPGA实现误差如图4所示。

图2 MyHDL的sigmoid实现的仿真波形

图3 sigmoid函数的实现比较图

图4 MyHDL的sigmoid函数的FPGA实现的误差图

3.4 综合结果

在仿真,校验和精度符合系统设计要求后,采用MyHdl包的toVerilog()方法将Python的sigmoid硬件描述自动转换为Verilog描述,另外MyHDL本身还支持与modelsim的协同仿真。使用modelsim仿真的波形如图5所示,与图2的Python环境下仿真波形相似,采用Quartus编译综合后FPGA资源使用情况为:使用125个LE,9个寄存器。

图5 sigmoid函数的Modelsim仿真波形图

4 结束语

采用一种新的基于Python的软硬件协同设计方法,在FPGA上实现了在人工神经网络上广泛使用的sigmoid函数。设计仿真过程使用Python语言扩展包MyHDL及其他python包,使得仿真校验和传统的设计方法相比效率更高,仿真速度也更快。从转换后的硬件综合结果可以看出,Python也具有较好的硬件描述能力,可以有效地完成硬件设计。

现代系统的算法越来越复杂,传统的软硬件设计分开的方法越来越不适应市场对设计的要求。采用Python的软硬件协同设计方法,软硬件设计仅仅采用一种语言Python,软硬件设计者之间不存在沟通问题,另外仿真和校验的速度也会大大提高。所以采用基于Python的软硬件协同设计方法设计效率大大提高,设计的产品能更快地进入市场。

[1]Lettnin D,Braun A,Bodgan M,et al.Synthesis of Embedded SystemC Design:A Case Study of Digital Neural Networks[C].Proceedings of the Design,Automation and Test in Europe Conference and Exhibition Designers:IEEE,2004:248-253.

[2]Pandya V,Areibi S,Moussa M.A Handel-C Implementation of the Back-Propagation Algorithm On Field Programmable Gate Arrays[C].Proceedings of the 2005 International Conference on Reconfigurable Computing and FPGAs:IEEE,2005.

[3]Python Software Foundation.Python Documentation(Python 2.7)[EB/OL].[2013-6-10],http://www.python.org.

[4]Decaluwe J.MyHDL:a Python-Based Hardware Description Language[J].Linux Journal,2004,127(10):5.

[5]Tommiska M T.Efficient digital implementation of the sigmoid function for reprogrammable logic[C].IEEE Proceedings-Computers and Digital Techniques:IET,2003:403-411.

[6]Himavathi S,Anitha D,Muthuramalingam A.Feedforward Neural Network Implementation in FPGA Using Layer Multiplexing for Effective Resource Utilization[J].IEEE TRANSACTIONS ON NEURAL NETWORKS,2007,18(3):880-888.

[7]Namin,A.H.Leboeuf,K.Wu Huapeng Artificial neural networks activation function HDL coder[C].IEEE International Conference on Electro/Information Technology.Windsor,ON:IEEE,2009:389-392.

[8]Amin H,Curtis K M,Hayes-Gill B R.Piecewise linear approximation applied to nonlinear function of a neural network[C].IEEE Proceedings-Circuits,Devices and Systems:IET,1997:313-317.

[9]刘毅飞.基于Python的软硬件协同设计方法[J].现代电子技术,2013,36(8):76-78.

[10]Decaluwe J.MyHDLmanual[R].Decaluwe J.2013.5

FPGA Im p lementation of Sigmoid Function Based on Python

LIU Yi-fei
(School of Biomedical Engineering,Hubei University of Science and Technology,Xianning 437100,China)

Sigmoid is an activation function which is commonly used in the artificial neutral network.This paper implementes the sigmoid function on FPGA by using the software and hardware co-design methodology based on Python.The result shows that themethod can highly improve efficiency of system design,simulation and verification by using many python packages and modules,and it can quickly convert the software algorithm to its hardware implementation.During the software and hardware design,only python design language is used,so there is no gap between the hardware and software designers.

Python;FPGA;Sigmoid;Software-hardware co-design;Neutral network

10.3969/j.issn.1002-2279.2014.01.020

TN407

:A

:1002-2279(2014)01-0073-03

刘毅飞(1971-),男,湖北咸宁人,副教授,硕士,主研方向:嵌入式系统、医学图像处理与分析。

2013-03-15

猜你喜欢
人工神经网络设计者波形
2020德国iF设计奖
利用人工神经网络快速计算木星系磁坐标
人工神经网络实现简单字母的识别
2019德国IF设计大奖
用于SAR与通信一体化系统的滤波器组多载波波形
Pareto最优稀疏频率雷达波形设计
基于ARM的任意波形电源设计
双丝双正弦电流脉冲波形控制
人工神经网络和安时法电池SOC估计
基于改进人工神经网络的航天器电信号分类方法