APP下载

好设计论文一种基于FPGA的低功耗高速解码器设计

消息来源:baojiabao.com 作者: 发布时间:2024-05-06

报价宝综合消息好设计论文一种基于FPGA的低功耗高速解码器设计

摘要: 针对传统编解码算法复杂度高、不易扩充套件等问题,对自编码神经网络前向传播算法和结构进行了研究,提出了一种以自编码神经网络为编解码算法,以FPGA为实现平台的低功耗高速解码器系统。该系统实现了字元的编解码,同时可被应用于各种多媒体资讯的编解码。通过ModelSim模拟,Xilinx ISE实现后进行硬件实测,对计算精度、资源消耗、计算速度和功耗等进行分析。实验测试结果表明,所设计的解码器能够正确完成资料解码功能,算法简洁高效,扩充套件能力强,系统具有低功耗、速度快等特点,可广泛应用于各种低功耗、行动式产品。

中文引用格式:周松江,李圣辰,刘明. 一种基于FPGA的低功耗高速解码器设计[J].电子技术应用,2018,44(4):27-32.

英文引用格式:Zhou Songjiang,Li Shengchen,Liu Ming. A low power and high speed decoder design based on FPGA[J]. Application of Electronic Technique,2018,44(4):27-32.

0 引言

计算机处理多媒体或文字资讯的基础是对相关资讯进行编码和解码,以利于资讯的传输、显示和保护[1]。面对巨大资讯量的处理需求,快速高效的编解码系统能够有效提高资讯处理能力。近年来,随着神经网络的发展和应用,利用神经网络进行数学函式回归的方案,为资讯的编解码提供了简单有效的途径[2]。自编码神经网络是一种无监督的人工神经网络,其利用反向传播算法训练使得网络的输出值等于输入值,从而为输入资料学习到一种特征表示,广泛应用于影象压缩和资料降维等领域[3-4]。自编码神经网络输出等于输入的特点适合用于资料编码和解码,相比于传统的编解码方法,如熵编码[5],该算法更简洁高效,结构可扩充套件,实用性更强[3]。

而随着编解码器在一些低功耗、行动式产品中的应用,高速、高精度和低功耗已经成为编解码器的一种发展趋势。现场可程式设计门阵列(Field Programmable Gate Array,FPGA)是一种可程式设计逻辑器件,使用者可通过硬件描述语言完成硬件电路设计。FPGA内部集成了具有高效能的数字讯号处理器和大量储存资源,可以高效低成本地实现定点运算和资料储存,因此目前FPGA是一种理想的编解码器实现平台[5-6]。FPGA中各个硬件模组并行执行,可将计算量大的算法对映到FPGA中实现硬件加速。有学者尝试采用FPGA作为神经网络的实现平台,并取得了优异的效能,尤以速度和功耗突出[7-8]。综上所述,基于自编码神经网络,以FPGA为实现平台的编解码系统,具有灵活性高、高速、低功耗等特点,可广泛应用于各种低功耗、行动式应用中。

本文通过分析自编码神经网络的结构和特点,提出了一种用于资料解码的硬件实现架构。根据网络计算过程中包含的运算和神经元间的并行性特点,结合FPGA高并行、低功耗和高速资料处理的优势,将自编码神经网络的解码部分对映到FPGA中。该架构具有速度快、功耗低等特点,除文中论述的文字资讯解码外,该架构具备扩充套件到影象编解码的可能性。

1 自编码神经网络

人工神经网络是基于生物神经网络的基本原理,通过模拟人脑神经系统的结构和功能而建立的一个数学模型,该模型拥有以任意精度逼近一个离散值、实数值或者目标函式的功能[9-10]。自编码神经网络是一种无监督的人工神经网络,其采用反向传播算法,通过学习试图使得网络的输出值等于输入值,从而为输入资料学习到一种特征表示[3-4]。

自编码神经网络模型是一种对称结构,中间为隐含层,输入输出层神经元节点数相等且通过训练使得网络输出值和输入值相等。如图1所示为自编码神经网络的结构图,输入层和输出层含有m个神经元,隐含层含有n个神经元,输入层和隐含层下方的“+1”是偏置节点。自编码神经网络的输入层到隐含层构成编码器,隐含层到输出层构成解码器,对自编码神经网络的训练过程就是通过调整编码器和解码器中的权值和偏置,使其逼近一个恒等函式,从而使得网络输出值等于输入值,这样网络隐含层的输出资料为原始输入资料的另一种特征表示,即该资料经过自编码神经网络的解码器可以恢复原始的输入资料[11]。

在本文中,利用自编码神经网络的编码器对输入资料进行编码,所得到隐含层的输出资料称为原始资料的编码;该编码资料经过自编码神经网络的解码器实现资料解码,从而恢复原始输入资料。下面参照图1所示的自编码神经网络结构,介绍自编码神经网络的前向计算过程,首先计算隐含层n个神经元的输出如式(1):

输出层m个神经元的输出如式(2):

通过对网络前向计算过程式(1)和式(2)的分析可以看出:自编码神经网络对资讯的处理为从输入层开始,经过隐含层直到输出层输出为止,每一层各个神经元之间的计算具有独立性和并行性;式(1)和式(2)的计算包括乘加运算和激励函式运算,且两者按照顺序依次进行。

2 FPGA设计方案

本章对基于FPGA的硬件解码系统的设计需求进行分析,介绍整个系统的硬件架构设计、系统工作原理,最后对设计中的网络计算模组进行详细介绍。

2.1 系统分析

本文在FPGA中设计实现图1所示自编码神经网络的解码器部分,从而实现资料解码功能。在软件端对自编码神经网络进行训练,得到网络模型后将对现今最通用的单字节编码ASCII码归一化后的资料输入至自编码神经网络的编码器以获得编码资料,最后将编码资料送至FPGA端实现资料解码以恢复原始输入的ASCII码。

通过对自编码神经网络前向计算的分析,其计算过程中包括乘加运算和激励函式运算,网络每层中各个神经元之间的计算具有独立性和并行性。而对编码资料进行解码操作的过程中,要求所设计的硬件系统具有实时性特点。FPGA作为一个分散式并行处理系统,其内部包含大量逻辑单元和计算单元,且具有可程式设计、速度快、灵活性高、易配置、设计周期短等特点,因此本文选用FPGA作为所设计资料解码器的硬件实现平台。

所设计的解码器为图1所示自编码神经网络的隐含层到输出层部分,其所包含的权值引数有n×m个,偏置引数有m个,n和m分别表示网络隐含层和输出层神经元的个数。由于实现解码功能仅需要网络的前向计算,因此网络的权值和偏置为固定值,所以在设计中可利用FPGA内部资源对网络权值和偏置进行储存并以固定值的形式参与网络运算。

解码器一次完整的解码过程可简述为:输入资料→解码计算→输出结果。在实际应用中往往包含有多组编码资料,因此设计中将编码资料储存在外部储存器中以供FPGA读取。SD储存卡是一种基于半导体快闪记忆器的新一代记忆装置,由于它具有体积小、资料传输快、可热插拔等优良特性,被广泛应用于行动式装置中[13]。因此本设计选择使用SD卡来储存编码资料。SD卡读操作为每次读取一个扇区的资料,而网络计算模组的输入资料的个数与图1所示隐含层神经元个数相同,两个资料量并不匹配。另外,SD卡读资料操作和网络计算为异步关系,因此本设计中加入FIFO模组,作为SD卡读资料模组和网络计算模组两个异步模组之间的资料快取器,这样的设计也易于扩充套件到其他不同神经元数量的网络结构。

另外,为了便于人为控制对多组编码资料进行解码,系统设计中利用按键来产生一次解码操作的起始讯号。本设计是以ASCII码的编码和解码对系统进行测试,因此设计中采用专门显示字母、数字和符号等的工业字元型液晶LCD1602显示解码结果。最后为了增加FPGA硬件系统稳定性,减少系统时钟的抖动和倾斜,设计中增加混合模式时钟管理器(MMCM),用于在与输入时钟讯号有设定的相位和频率关系的情况下,生成不同的时钟讯号,该讯号用于各个模组工作。

2.2 硬件系统架构

基于上述分析,所设计FPGA硬件系统结构如图2所示。系统外围模组包括储存编码资料的SD卡,产生差分时钟讯号的晶振,产生复位讯号和控制系统工作的按键,和显示网络计算结果的LCD1602显示器。FPGA内部包含三大模组,分别是:资料载入模组、资料处理模组和混合模式时钟管理器。

设计中利用SD卡来储存编码资料,对SD卡的操作采用简单的命令/响应协议[13],全部命令由FPGA发起,SD卡接收到命令后返回响应资料。要读取SD卡中的资料,需要首先完成SD卡的初始化,该系统按照功能分别设计SD卡初始化模组和SD卡读资料模组,其符合FPGA模组化的设计原则。FIFO模组作为SD卡和网络计算模组之间的资料快取器,同时又用于异步资料传输,因此在设计中采用独立的读时钟和写时钟,以用于异步操作。

按键检测模组不断读取外部按键输出讯号key_in的值,当检测到按键按下时该模组产生一个高脉冲讯号,该讯号将作为一次解码操作的起始讯号。网络计算模组按照神经网络的计算方法对读入的资料进行计算。显示驱动模组设计中采用有限状态机的方式控制LCD1602的初始化和资料显示操作,该模组与网络计算模组之间有讯号线连线,以实现将计算结果送至显示驱动模组,显示驱动模组控制LCD1602对计算结果进行显示。

在图2所示的硬件架构图中,混合模式时钟管理器将外部时钟分频产生各个模组工作所需要的时钟讯号,其通过两个时钟线分别与资料载入模组和资料处理模组连线,而资料载入模组和资料处理模组之间通过data_en、data和read_clk 3个讯号连线。

2.3 系统工作原理

FPGA的特点是可以实现并行操作,在图2所示的系统架构图中,资料载入模组和资料处理模组以并行异步的方式工作,下面对其工作原理分别介绍。

资料载入模组:系统上电后,资料载入模组首先控制SD卡初始化模组对SD卡进行初始化,其初始化操作包含有一系列的命令,在初始化完成后SD卡初始化模组输出初始化完成讯号。由于SD卡中的编码资料是在PC端以FAT32档案系统的形式写入的,因此在对SD卡初始化完成后,资料载入模组控制SD卡读资料模组读取SD卡中的FAT32档案系统资讯,获取编码资料的长度,即档案所包含的字节数,该资料将用于控制对编码资料的读取。最后,资料载入模组不断检测FIFO中快取资料的数量,当资料的数量不足设定值时便控制SD卡读资料模组将SD卡中的编码资料读入FIFO中进行快取。

资料处理模组:当按键检测模组检测到外部按键被按下时会产生一个高脉冲讯号,然后资料处理模组会通过data_en、data和read_clk 3个讯号从FIFO中读取资料到网络计算模组进行计算,然后通过显示驱动模组控制将计算结果显示在外部的LCD1602上。资料载入模组和资料处理模组之间data_en、data和read_clk 3个讯号的时序关系如图3所示,当data_en为高电平时,代表FIFO中存在有效的资料可以读取,此时每当read_clk讯号的上升沿到达时,从data埠可以读取一个数据。

如图4所示为FPGA硬件系统工作流程图,其中SD卡读操作和网络计算之间为异步关系,系统中所加入的FIFO模组作为SD卡读资料模组和网络计算模组两个异步模组之间的资料快取器。

2.4 网络计算模组设计

网络计算模组是本设计中的核心模组,用于实现图1中的解码器,将编码资料和解码器部分的权值与偏置按式(2)进行乘加运算,并经过激励函式得到输出值。

通过对网络前向计算分析可知其包括乘加运算和激励函式运算。由于本设计中自编码神经网络的输入是对ASCII码归一化后的资料,即原ASCII码值除以128后的值,因此在FPGA模组中激励函式的输出值需要扩大128倍才是真正的ASCII码值。由于128=27,在FPGA中乘操作可通过移位实现,因此对计算结果扩大128倍相当于将二进位制格式的小数点右移7位。更进一步,直接撷取小数点后7位即为计算结果扩大128倍后的ASCII码值。因此在网络计算模组将计算分为3部分:乘加运算、激励函式运算和截位运算,如图5所示为一个输出层神经元的计算结构示意图,输出层各个神经元按照图5所示的计算结构以并行、独立的方式进行计算。

模组中的乘加运算是将编码资料、解码器部分权值和偏置按照式(2)中激励函式内部的乘加运算规则进行计算。本设计输出层神经元的激励函式为hard_sigmoid函式[12],表示式为式(3):

根据定义,hard_sigmoid函式为分段函式,且各段均为线性关系,其非常便于在FPGA系统中实现,即利用条件判断语句对输入进行判断并输出不同的值,如图6所示为hard_sigmoid函式硬件实现示意图。

3 系统测试分析

为了测试所设计自编码神经网络在FPGA平台上的实现,本文选择的网络结构为输入层、输出层含有4个神经元节点,隐含层含有8个神经元节点。所选择的应用背景为对ASCII码的编码和解码,其中软件端完成对ASCII码的编码,所得到的编码资料在FPGA端实现解码。

本实验测试集由软件生成,软件环境下对ASCII码中非控制字元(码值为32~127,共96个)做归一化处理,然后按照随机组合的方式4个一组输入至所设计的自编码神经网络并获得隐含层的输出,将该输出作为FPGA的测试输入资料储存在SD卡中。所选择的FPGA硬件平台是Xilinx VC707 FPGA开发板,系统开发环境为Xilinx ISE 14.7,模拟环境为ModelSim SE 10.1c,如图7所示为硬件系统测试图。

在图7所示的硬件系统测试图中,①为SD卡,②为LCD1602显示屏,③为控制按键。系统上电后,通过控制按键的按下操作不断从SD卡中读取资料,经过网络计算模组计算后将结果显示在LCD1602显示屏上,每次显示4个字元,如图7中LCD1602显示屏的第二行即为解码后的4个数据,对应于图1所示神经网络的4个输出。

3.1 网络计算结果分析

神经网络经过训练得到一组最优引数,包括网络权值和偏置。为了在FPGA中实现所设计自编码神经网络的解码器部分,需要获取对ASCII码编码后的资料(神经网络隐含层的输出资料)和解码器部分的网络权值与偏置。另外由于FPGA仅能对二进位制资料识别和计算,因此需要将上述资料转换为二进位制资料。

在FPGA设计中,资料的表示方式与FPGA逻辑资源消耗直接相关的。资料表示位数越多,资料精度越高,逻辑资源的消耗也就越多,因此在FPGA设计中需要权衡FPGA资源消耗和资料精度之间的关系。结合本文的实际应用,同时为了更好地权衡FPGA设计中的精度、资源占用和功耗,本设计采用定点数表示上述资料。

由于在FPGA设计中采用有限位定点数来表示资料时,对原资料进行定点量化的过程中会因为资料的截断而产生误差。根据网络计算模组的设计,其输出为计算结果二进位制小数点后7位,因此在设计中需要保证这7位资料正确,即与原始输入资料相比,经过解码后输出结果的误差需要小于2-7,即应小于7.812 5×10-3。本文利用MATLAB下的Fixed Point Toolbox对资料进行量化,然后分析本设计中资料不同的量化位数对计算结果误差的影响,如图8所示为定点数表示中小数点的位数和最大误差之间的关系。

从图8可以看出:

(1)随着定点数小数位数的增加,最大误差值不断降低,即资料精度越来越高;

(2)定点数小数位变为12位之后,其最大误差基本保持不变;

(3)定点数小数位为9位时,其最大误差与7.812 5×10-3基本一致;定点数小数位为10位时,其最大误差已符合小于7.812 5×10-3的要求。

基于图8所示的分析结果,本文在对设计中的网络权值、偏置和编码资料进行定点数量化时,小数位均设计为10位。进一步通过对网络的权值、偏置和编码资料的大小范围进行分析可以确定其整数位的位数,3种资料的二进位制定点数格式如表1所示。

本设计在ModelSim环境下对网络计算模组进行模拟,并对模组输出的计算结果与软件中的原始输入资料进行分析比对,所测试资料中的绝对误差最大值小于7.812 5×10-3,符合设计中的误差要求。另外通过硬件实测,所有被编码后的资料经过FPGA计算后均被正确解码,并将结果显示在LCD1602上,即所设计的FPGA硬件系统正确地完成了解码功能,从而验证了对所设计网络计算模组的误差分析。

3.2 系统性能分析

如表2所示为Xilinx ISE对系统工程综合实现后列出的主要资源占用情况。可以看出,DSP资源占用较大,主要原因是网络计算模组中的乘加计算和激励函式运算均含有定点数乘法和加法操作,因此会占用较多的DSP资源。另外,BRAM资源的占用主要来自于FIFO模组的实现和网络计算模组中网络权值与偏置的储存。

如表3所示为FPGA硬件实现资料解码的速度和软件解码速度的比较,软件解码是在MATLAB软件中测试所得,CPU为Intel Core i7,主频为2.5 GHz。FPGA硬件解码速度是通过在FPGA中设定计数器,对从读取解码器输入资料到最后输出结果的时钟进行计数,然后利用ChipScope工具检视计数值来计算工作时间。表3中的结果显示,相比于CPU软件解码,本文所设计的FPGA硬件解码器加速了7倍以上。

通过Xilinx ISE自带的XPower工具可以得到FPGA的执行功耗大致为0.389 W,所设计系统的外围装置中LCD1602功耗大致为0.693 W,其余外设的功耗可忽略不计,因此整个系统总功耗为1 W左右。而相比之下,Intel Core i7-6500U主频为2.5 GHz的CPU的功耗可高达65 W,可见本系统功耗仅为通用CPU的1.5%,因此特别适合将本文所设计的基于FPGA的解码器应用于低功耗行动式装置中。

4 结论

利用神经网络所具有的输入输出之间的对映关系,可以简单高效地实现资料编码和解码。本文根据自编码神经网络的结构和特点,将其用于编码和解码,并在FPGA中实现自编码神经网络的解码器部分。通过对软件算法的设计和网络计算过程的分析,按照功能和需求对FPGA模组进行设计。利用ModelSim软件对所设计的各个FPGA模组进行模拟验证,利用Xilinx ISE对整个工程进行设计、综合和实现,并将程式设计档案下载至Xilinx VC707 FPGA开发板中进行验证,同时对FPGA系统的资源占用、计算速度和功耗进行评估。通过测试,对于在软件中经过编码的资料,在FPGA系统中可以正确解码。同时相比于通用CPU,该系统计算过程加速了7倍以上,而执行功耗仅为CPU的1.5%,因此具有速度快、功耗低的特点,特别适合将其应用于实时性、低功耗行动式装置中。

参考文献

[1] 曹雪虹,张宗橙.信息论与编码[M].北京:清华大学出版社,2016.

[2] 张定会,李敬红,左小五.神经网络编码和解码[C].全国青年通讯学术会议.2002.

[3] 王雅思.深度学习中的自编码器的表达能力研究[D].哈尔滨:哈尔滨工业大学,2014.

[4] 李时峰.基于自编码神经网络文字特征选择的研究[D].天津:天津科技大学,2016.

[5] 白玉婷,张刚.AVS熵编码的FPGA实现[J].软件,2012,33(2):102-104,156.

[6] 陈章进,锺国海,毕卓.一种基于低成本FPGA的高速8B/10B编解码器设计[J].微计算机资讯,2012,28(10):189-190,480.

[7] Li Huimin,Fan Xitian,Jiao Li,et al.A high performance FPGA-based accelerator for large-scale convolutional neural networks[C].Field Programmable Logic and Applications(FPL),2016 26th International Conference on.IEEE,2016:1-9.

[8] NURVITADHI E,VENKATESH G,SIM J,et al.Can FPGAs beat GPUs in accelerating next-generation deep neural networks?[C].Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays.ACM:5-14.

[9] CYBENKO G.Approximation by superpositions of a sigmoidal function[J].Mathematics of Control,Signals,and Systems(MCSS),1989,2(4):303-314.

[10] BENGIO Y.Learning deep architectures for AI[J].Foundations and trends? in Machine Learning,2009,2(1):1-127.

[11] 鲁亚平.面向深度网络的自编码器研究[D].苏州:苏州大学,2016.

[12] Tensorflow.hard_sigmoid definition[EB/OL].[2017-07-26].https://www.tensorflow.org/api_docs/python/tf/contrib/keras/backend/hard_sigmoid.

[13] 张锋,潘冀宁,朱振荣.基于SPI模式的Micro SD卡驱动设计与验证[J].通讯世界,2017(12):3-4.

作者资讯:

周松江,李圣辰,刘 明

(北京邮电大学 资讯光子学与光通讯研究院,北京100876)

2019-11-28 17:54:00

相关文章