《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 一種基于FPGA的低功耗高速解碼器設(shè)計(jì)
一種基于FPGA的低功耗高速解碼器設(shè)計(jì)
2018年電子技術(shù)應(yīng)用第4期
周松江,李圣辰,劉 明
北京郵電大學(xué) 信息光子學(xué)與光通信研究院,北京100876
摘要: 針對(duì)傳統(tǒng)編解碼算法復(fù)雜度高、不易擴(kuò)展等問(wèn)題,對(duì)自編碼神經(jīng)網(wǎng)絡(luò)前向傳播算法和結(jié)構(gòu)進(jìn)行了研究,提出了一種以自編碼神經(jīng)網(wǎng)絡(luò)為編解碼算法,以FPGA為實(shí)現(xiàn)平臺(tái)的低功耗高速解碼器系統(tǒng)。該系統(tǒng)實(shí)現(xiàn)了字符的編解碼,同時(shí)可被應(yīng)用于各種多媒體信息的編解碼。通過(guò)ModelSim仿真,Xilinx ISE實(shí)現(xiàn)后進(jìn)行硬件實(shí)測(cè),對(duì)計(jì)算精度、資源消耗、計(jì)算速度和功耗等進(jìn)行分析。實(shí)驗(yàn)測(cè)試結(jié)果表明,所設(shè)計(jì)的解碼器能夠正確完成數(shù)據(jù)解碼功能,算法簡(jiǎn)潔高效,擴(kuò)展能力強(qiáng),系統(tǒng)具有低功耗、速度快等特點(diǎn),可廣泛應(yīng)用于各種低功耗、便攜式產(chǎn)品。
中圖分類號(hào): TN791;TP183
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.173486
中文引用格式: 周松江,李圣辰,劉明. 一種基于FPGA的低功耗高速解碼器設(shè)計(jì)[J].電子技術(shù)應(yīng)用,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.
A low power and high speed decoder design based on FPGA
Zhou Songjiang,Li Shengchen,Liu Ming
Institute of Information Photonics and Optical Communications,Beijing University of Posts and Telecommunications,Beijing 100876
Abstract: In view of the complexity and inflexibility of the traditional encoding and decoding algorithms, this paper studies the forward propagation algorithm and structure of autoencoder neural networks. A low power consumption and high speed decoder system is proposed, using the autoencoder neural network as the codec algorithm with FPGA implementation. The system realizes the decoding of characters, and can be applied to the decoding of various multimedia information. Through ModelSim simulation and Xilinx ISE implementation, the hardware measurement are carried out, and the calculation accuracy, resource consumption, calculation speed and power consumption are analyzed. Experimental results show that the designed decoder can decode data correctly, the algorithm is efficient, scalable, the proposed system has the characteristics of low power consumption and high speed, and it can be widely used in a variety of low power, portable products.
Key words : FPGA;decoder;autoencoder neural network;hardware implementation;high speed and low power consumption

0 引言

    計(jì)算機(jī)處理多媒體或文字信息的基礎(chǔ)是對(duì)相關(guān)信息進(jìn)行編碼和解碼,以利于信息的傳輸、顯示和保護(hù)[1]。面對(duì)巨大信息量的處理需求,快速高效的編解碼系統(tǒng)能夠有效提高信息處理能力。近年來(lái),隨著神經(jīng)網(wǎng)絡(luò)的發(fā)展和應(yīng)用,利用神經(jīng)網(wǎng)絡(luò)進(jìn)行數(shù)學(xué)函數(shù)回歸的方案,為信息的編解碼提供了簡(jiǎn)單有效的途徑[2]。自編碼神經(jīng)網(wǎng)絡(luò)是一種無(wú)監(jiān)督的人工神經(jīng)網(wǎng)絡(luò),其利用反向傳播算法訓(xùn)練使得網(wǎng)絡(luò)的輸出值等于輸入值,從而為輸入數(shù)據(jù)學(xué)習(xí)到一種特征表示,廣泛應(yīng)用于圖像壓縮和數(shù)據(jù)降維等領(lǐng)域[3-4]。自編碼神經(jīng)網(wǎng)絡(luò)輸出等于輸入的特點(diǎn)適合用于數(shù)據(jù)編碼和解碼,相比于傳統(tǒng)的編解碼方法,如熵編碼[5],該算法更簡(jiǎn)潔高效,結(jié)構(gòu)可擴(kuò)展,實(shí)用性更強(qiáng)[3]

    而隨著編解碼器在一些低功耗、便攜式產(chǎn)品中的應(yīng)用,高速、高精度和低功耗已經(jīng)成為編解碼器的一種發(fā)展趨勢(shì)?,F(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array,FPGA)是一種可編程邏輯器件,用戶可通過(guò)硬件描述語(yǔ)言完成硬件電路設(shè)計(jì)。FPGA內(nèi)部集成了具有高性能的數(shù)字信號(hào)處理器和大量存儲(chǔ)資源,可以高效低成本地實(shí)現(xiàn)定點(diǎn)運(yùn)算和數(shù)據(jù)存儲(chǔ),因此目前FPGA是一種理想的編解碼器實(shí)現(xiàn)平臺(tái)[5-6]。FPGA中各個(gè)硬件模塊并行執(zhí)行,可將計(jì)算量大的算法映射到FPGA中實(shí)現(xiàn)硬件加速。有學(xué)者嘗試采用FPGA作為神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)平臺(tái),并取得了優(yōu)異的性能,尤以速度和功耗突出[7-8]。綜上所述,基于自編碼神經(jīng)網(wǎng)絡(luò),以FPGA為實(shí)現(xiàn)平臺(tái)的編解碼系統(tǒng),具有靈活性高、高速、低功耗等特點(diǎn),可廣泛應(yīng)用于各種低功耗、便攜式應(yīng)用中。

    本文通過(guò)分析自編碼神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和特點(diǎn),提出了一種用于數(shù)據(jù)解碼的硬件實(shí)現(xiàn)架構(gòu)。根據(jù)網(wǎng)絡(luò)計(jì)算過(guò)程中包含的運(yùn)算和神經(jīng)元間的并行性特點(diǎn),結(jié)合FPGA高并行、低功耗和高速數(shù)據(jù)處理的優(yōu)勢(shì),將自編碼神經(jīng)網(wǎng)絡(luò)的解碼部分映射到FPGA中。該架構(gòu)具有速度快、功耗低等特點(diǎn),除文中論述的文字信息解碼外,該架構(gòu)具備擴(kuò)展到圖像編解碼的可能性。

1 自編碼神經(jīng)網(wǎng)絡(luò)

    人工神經(jīng)網(wǎng)絡(luò)是基于生物神經(jīng)網(wǎng)絡(luò)的基本原理,通過(guò)模擬人腦神經(jīng)系統(tǒng)的結(jié)構(gòu)和功能而建立的一個(gè)數(shù)學(xué)模型,該模型擁有以任意精度逼近一個(gè)離散值、實(shí)數(shù)值或者目標(biāo)函數(shù)的功能[9-10]。自編碼神經(jīng)網(wǎng)絡(luò)是一種無(wú)監(jiān)督的人工神經(jīng)網(wǎng)絡(luò),其采用反向傳播算法,通過(guò)學(xué)習(xí)試圖使得網(wǎng)絡(luò)的輸出值等于輸入值,從而為輸入數(shù)據(jù)學(xué)習(xí)到一種特征表示[3-4]

    自編碼神經(jīng)網(wǎng)絡(luò)模型是一種對(duì)稱結(jié)構(gòu),中間為隱含層,輸入輸出層神經(jīng)元節(jié)點(diǎn)數(shù)相等且通過(guò)訓(xùn)練使得網(wǎng)絡(luò)輸出值和輸入值相等。如圖1所示為自編碼神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)圖,輸入層和輸出層含有m個(gè)神經(jīng)元,隱含層含有n個(gè)神經(jīng)元,輸入層和隱含層下方的“+1”是偏置節(jié)點(diǎn)。自編碼神經(jīng)網(wǎng)絡(luò)的輸入層到隱含層構(gòu)成編碼器,隱含層到輸出層構(gòu)成解碼器,對(duì)自編碼神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程就是通過(guò)調(diào)整編碼器和解碼器中的權(quán)值和偏置,使其逼近一個(gè)恒等函數(shù),從而使得網(wǎng)絡(luò)輸出值等于輸入值,這樣網(wǎng)絡(luò)隱含層的輸出數(shù)據(jù)為原始輸入數(shù)據(jù)的另一種特征表示,即該數(shù)據(jù)經(jīng)過(guò)自編碼神經(jīng)網(wǎng)絡(luò)的解碼器可以恢復(fù)原始的輸入數(shù)據(jù)[11]。

wdz2-t1.gif

    在本文中,利用自編碼神經(jīng)網(wǎng)絡(luò)的編碼器對(duì)輸入數(shù)據(jù)進(jìn)行編碼,所得到隱含層的輸出數(shù)據(jù)稱為原始數(shù)據(jù)的編碼;該編碼數(shù)據(jù)經(jīng)過(guò)自編碼神經(jīng)網(wǎng)絡(luò)的解碼器實(shí)現(xiàn)數(shù)據(jù)解碼,從而恢復(fù)原始輸入數(shù)據(jù)。下面參照?qǐng)D1所示的自編碼神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),介紹自編碼神經(jīng)網(wǎng)絡(luò)的前向計(jì)算過(guò)程,首先計(jì)算隱含層n個(gè)神經(jīng)元的輸出如式(1):

    wdz2-gs1.gif

    輸出層m個(gè)神經(jīng)元的輸出如式(2):

wdz2-gs2.gif

    通過(guò)對(duì)網(wǎng)絡(luò)前向計(jì)算過(guò)程式(1)和式(2)的分析可以看出:自編碼神經(jīng)網(wǎng)絡(luò)對(duì)信息的處理為從輸入層開(kāi)始,經(jīng)過(guò)隱含層直到輸出層輸出為止,每一層各個(gè)神經(jīng)元之間的計(jì)算具有獨(dú)立性和并行性;式(1)和式(2)的計(jì)算包括乘加運(yùn)算和激勵(lì)函數(shù)運(yùn)算,且兩者按照順序依次進(jìn)行。

2 FPGA設(shè)計(jì)方案

    本章對(duì)基于FPGA的硬件解碼系統(tǒng)的設(shè)計(jì)需求進(jìn)行分析,介紹整個(gè)系統(tǒng)的硬件架構(gòu)設(shè)計(jì)、系統(tǒng)工作原理,最后對(duì)設(shè)計(jì)中的網(wǎng)絡(luò)計(jì)算模塊進(jìn)行詳細(xì)介紹。

2.1 系統(tǒng)分析

    本文在FPGA中設(shè)計(jì)實(shí)現(xiàn)圖1所示自編碼神經(jīng)網(wǎng)絡(luò)的解碼器部分,從而實(shí)現(xiàn)數(shù)據(jù)解碼功能。在軟件端對(duì)自編碼神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,得到網(wǎng)絡(luò)模型后將對(duì)現(xiàn)今最通用的單字節(jié)編碼ASCII碼歸一化后的數(shù)據(jù)輸入至自編碼神經(jīng)網(wǎng)絡(luò)的編碼器以獲得編碼數(shù)據(jù),最后將編碼數(shù)據(jù)送至FPGA端實(shí)現(xiàn)數(shù)據(jù)解碼以恢復(fù)原始輸入的ASCII碼。

    通過(guò)對(duì)自編碼神經(jīng)網(wǎng)絡(luò)前向計(jì)算的分析,其計(jì)算過(guò)程中包括乘加運(yùn)算和激勵(lì)函數(shù)運(yùn)算,網(wǎng)絡(luò)每層中各個(gè)神經(jīng)元之間的計(jì)算具有獨(dú)立性和并行性。而對(duì)編碼數(shù)據(jù)進(jìn)行解碼操作的過(guò)程中,要求所設(shè)計(jì)的硬件系統(tǒng)具有實(shí)時(shí)性特點(diǎn)。FPGA作為一個(gè)分布式并行處理系統(tǒng),其內(nèi)部包含大量邏輯單元和計(jì)算單元,且具有可編程、速度快、靈活性高、易配置、設(shè)計(jì)周期短等特點(diǎn),因此本文選用FPGA作為所設(shè)計(jì)數(shù)據(jù)解碼器的硬件實(shí)現(xiàn)平臺(tái)。

    所設(shè)計(jì)的解碼器為圖1所示自編碼神經(jīng)網(wǎng)絡(luò)的隱含層到輸出層部分,其所包含的權(quán)值參數(shù)有n×m個(gè),偏置參數(shù)有m個(gè),n和m分別表示網(wǎng)絡(luò)隱含層和輸出層神經(jīng)元的個(gè)數(shù)。由于實(shí)現(xiàn)解碼功能僅需要網(wǎng)絡(luò)的前向計(jì)算,因此網(wǎng)絡(luò)的權(quán)值和偏置為固定值,所以在設(shè)計(jì)中可利用FPGA內(nèi)部資源對(duì)網(wǎng)絡(luò)權(quán)值和偏置進(jìn)行存儲(chǔ)并以固定值的形式參與網(wǎng)絡(luò)運(yùn)算。

    解碼器一次完整的解碼過(guò)程可簡(jiǎn)述為:輸入數(shù)據(jù)→解碼計(jì)算→輸出結(jié)果。在實(shí)際應(yīng)用中往往包含有多組編碼數(shù)據(jù),因此設(shè)計(jì)中將編碼數(shù)據(jù)存儲(chǔ)在外部存儲(chǔ)器中以供FPGA讀取。SD存儲(chǔ)卡是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備,由于它具有體積小、數(shù)據(jù)傳輸快、可熱插拔等優(yōu)良特性,被廣泛應(yīng)用于便攜式設(shè)備中[13]。因此本設(shè)計(jì)選擇使用SD卡來(lái)存儲(chǔ)編碼數(shù)據(jù)。SD卡讀操作為每次讀取一個(gè)扇區(qū)的數(shù)據(jù),而網(wǎng)絡(luò)計(jì)算模塊的輸入數(shù)據(jù)的個(gè)數(shù)與圖1所示隱含層神經(jīng)元個(gè)數(shù)相同,兩個(gè)數(shù)據(jù)量并不匹配。另外,SD卡讀數(shù)據(jù)操作和網(wǎng)絡(luò)計(jì)算為異步關(guān)系,因此本設(shè)計(jì)中加入FIFO模塊,作為SD卡讀數(shù)據(jù)模塊和網(wǎng)絡(luò)計(jì)算模塊兩個(gè)異步模塊之間的數(shù)據(jù)緩存器,這樣的設(shè)計(jì)也易于擴(kuò)展到其他不同神經(jīng)元數(shù)量的網(wǎng)絡(luò)結(jié)構(gòu)。

    另外,為了便于人為控制對(duì)多組編碼數(shù)據(jù)進(jìn)行解碼,系統(tǒng)設(shè)計(jì)中利用按鍵來(lái)產(chǎn)生一次解碼操作的起始信號(hào)。本設(shè)計(jì)是以ASCII碼的編碼和解碼對(duì)系統(tǒng)進(jìn)行測(cè)試,因此設(shè)計(jì)中采用專門顯示字母、數(shù)字和符號(hào)等的工業(yè)字符型液晶LCD1602顯示解碼結(jié)果。最后為了增加FPGA硬件系統(tǒng)穩(wěn)定性,減少系統(tǒng)時(shí)鐘的抖動(dòng)和傾斜,設(shè)計(jì)中增加混合模式時(shí)鐘管理器(MMCM),用于在與輸入時(shí)鐘信號(hào)有設(shè)定的相位和頻率關(guān)系的情況下,生成不同的時(shí)鐘信號(hào),該信號(hào)用于各個(gè)模塊工作。

2.2 硬件系統(tǒng)架構(gòu)

    基于上述分析,所設(shè)計(jì)FPGA硬件系統(tǒng)結(jié)構(gòu)如圖2所示。系統(tǒng)外圍模塊包括存儲(chǔ)編碼數(shù)據(jù)的SD卡,產(chǎn)生差分時(shí)鐘信號(hào)的晶振,產(chǎn)生復(fù)位信號(hào)和控制系統(tǒng)工作的按鍵,和顯示網(wǎng)絡(luò)計(jì)算結(jié)果的LCD1602顯示器。FPGA內(nèi)部包含三大模塊,分別是:數(shù)據(jù)加載模塊、數(shù)據(jù)處理模塊和混合模式時(shí)鐘管理器。

wdz2-t2.gif

    設(shè)計(jì)中利用SD卡來(lái)存儲(chǔ)編碼數(shù)據(jù),對(duì)SD卡的操作采用簡(jiǎn)單的命令/響應(yīng)協(xié)議[13],全部命令由FPGA發(fā)起,SD卡接收到命令后返回響應(yīng)數(shù)據(jù)。要讀取SD卡中的數(shù)據(jù),需要首先完成SD卡的初始化,該系統(tǒng)按照功能分別設(shè)計(jì)SD卡初始化模塊和SD卡讀數(shù)據(jù)模塊,其符合FPGA模塊化的設(shè)計(jì)原則。FIFO模塊作為SD卡和網(wǎng)絡(luò)計(jì)算模塊之間的數(shù)據(jù)緩存器,同時(shí)又用于異步數(shù)據(jù)傳輸,因此在設(shè)計(jì)中采用獨(dú)立的讀時(shí)鐘和寫時(shí)鐘,以用于異步操作。

    按鍵檢測(cè)模塊不斷讀取外部按鍵輸出信號(hào)key_in的值,當(dāng)檢測(cè)到按鍵按下時(shí)該模塊產(chǎn)生一個(gè)高脈沖信號(hào),該信號(hào)將作為一次解碼操作的起始信號(hào)。網(wǎng)絡(luò)計(jì)算模塊按照神經(jīng)網(wǎng)絡(luò)的計(jì)算方法對(duì)讀入的數(shù)據(jù)進(jìn)行計(jì)算。顯示驅(qū)動(dòng)模塊設(shè)計(jì)中采用有限狀態(tài)機(jī)的方式控制LCD1602的初始化和數(shù)據(jù)顯示操作,該模塊與網(wǎng)絡(luò)計(jì)算模塊之間有信號(hào)線連接,以實(shí)現(xiàn)將計(jì)算結(jié)果送至顯示驅(qū)動(dòng)模塊,顯示驅(qū)動(dòng)模塊控制LCD1602對(duì)計(jì)算結(jié)果進(jìn)行顯示。

    在圖2所示的硬件架構(gòu)圖中,混合模式時(shí)鐘管理器將外部時(shí)鐘分頻產(chǎn)生各個(gè)模塊工作所需要的時(shí)鐘信號(hào),其通過(guò)兩個(gè)時(shí)鐘線分別與數(shù)據(jù)加載模塊和數(shù)據(jù)處理模塊連接,而數(shù)據(jù)加載模塊和數(shù)據(jù)處理模塊之間通過(guò)data_en、data和read_clk 3個(gè)信號(hào)連接。

2.3 系統(tǒng)工作原理

    FPGA的特點(diǎn)是可以實(shí)現(xiàn)并行操作,在圖2所示的系統(tǒng)架構(gòu)圖中,數(shù)據(jù)加載模塊和數(shù)據(jù)處理模塊以并行異步的方式工作,下面對(duì)其工作原理分別介紹。

    數(shù)據(jù)加載模塊:系統(tǒng)上電后,數(shù)據(jù)加載模塊首先控制SD卡初始化模塊對(duì)SD卡進(jìn)行初始化,其初始化操作包含有一系列的命令,在初始化完成后SD卡初始化模塊輸出初始化完成信號(hào)。由于SD卡中的編碼數(shù)據(jù)是在PC端以FAT32文件系統(tǒng)的形式寫入的,因此在對(duì)SD卡初始化完成后,數(shù)據(jù)加載模塊控制SD卡讀數(shù)據(jù)模塊讀取SD卡中的FAT32文件系統(tǒng)信息,獲取編碼數(shù)據(jù)的長(zhǎng)度,即文件所包含的字節(jié)數(shù),該數(shù)據(jù)將用于控制對(duì)編碼數(shù)據(jù)的讀取。最后,數(shù)據(jù)加載模塊不斷檢測(cè)FIFO中緩存數(shù)據(jù)的數(shù)量,當(dāng)數(shù)據(jù)的數(shù)量不足設(shè)定值時(shí)便控制SD卡讀數(shù)據(jù)模塊將SD卡中的編碼數(shù)據(jù)讀入FIFO中進(jìn)行緩存。

    數(shù)據(jù)處理模塊:當(dāng)按鍵檢測(cè)模塊檢測(cè)到外部按鍵被按下時(shí)會(huì)產(chǎn)生一個(gè)高脈沖信號(hào),然后數(shù)據(jù)處理模塊會(huì)通過(guò)data_en、data和read_clk 3個(gè)信號(hào)從FIFO中讀取數(shù)據(jù)到網(wǎng)絡(luò)計(jì)算模塊進(jìn)行計(jì)算,然后通過(guò)顯示驅(qū)動(dòng)模塊控制將計(jì)算結(jié)果顯示在外部的LCD1602上。數(shù)據(jù)加載模塊和數(shù)據(jù)處理模塊之間data_en、data和read_clk 3個(gè)信號(hào)的時(shí)序關(guān)系如圖3所示,當(dāng)data_en為高電平時(shí),代表FIFO中存在有效的數(shù)據(jù)可以讀取,此時(shí)每當(dāng)read_clk信號(hào)的上升沿到達(dá)時(shí),從data端口可以讀取一個(gè)數(shù)據(jù)。

wdz2-t3.gif

    如圖4所示為FPGA硬件系統(tǒng)工作流程圖,其中SD卡讀操作和網(wǎng)絡(luò)計(jì)算之間為異步關(guān)系,系統(tǒng)中所加入的FIFO模塊作為SD卡讀數(shù)據(jù)模塊和網(wǎng)絡(luò)計(jì)算模塊兩個(gè)異步模塊之間的數(shù)據(jù)緩存器。

wdz2-t4.gif

2.4 網(wǎng)絡(luò)計(jì)算模塊設(shè)計(jì)

    網(wǎng)絡(luò)計(jì)算模塊是本設(shè)計(jì)中的核心模塊,用于實(shí)現(xiàn)圖1中的解碼器,將編碼數(shù)據(jù)和解碼器部分的權(quán)值與偏置按式(2)進(jìn)行乘加運(yùn)算,并經(jīng)過(guò)激勵(lì)函數(shù)得到輸出值。

    通過(guò)對(duì)網(wǎng)絡(luò)前向計(jì)算分析可知其包括乘加運(yùn)算和激勵(lì)函數(shù)運(yùn)算。由于本設(shè)計(jì)中自編碼神經(jīng)網(wǎng)絡(luò)的輸入是對(duì)ASCII碼歸一化后的數(shù)據(jù),即原ASCII碼值除以128后的值,因此在FPGA模塊中激勵(lì)函數(shù)的輸出值需要擴(kuò)大128倍才是真正的ASCII碼值。由于128=27,在FPGA中乘操作可通過(guò)移位實(shí)現(xiàn),因此對(duì)計(jì)算結(jié)果擴(kuò)大128倍相當(dāng)于將二進(jìn)制格式的小數(shù)點(diǎn)右移7位。更進(jìn)一步,直接截取小數(shù)點(diǎn)后7位即為計(jì)算結(jié)果擴(kuò)大128倍后的ASCII碼值。因此在網(wǎng)絡(luò)計(jì)算模塊將計(jì)算分為3部分:乘加運(yùn)算、激勵(lì)函數(shù)運(yùn)算和截位運(yùn)算,如圖5所示為一個(gè)輸出層神經(jīng)元的計(jì)算結(jié)構(gòu)示意圖,輸出層各個(gè)神經(jīng)元按照?qǐng)D5所示的計(jì)算結(jié)構(gòu)以并行、獨(dú)立的方式進(jìn)行計(jì)算。

wdz2-t5.gif

    模塊中的乘加運(yùn)算是將編碼數(shù)據(jù)、解碼器部分權(quán)值和偏置按照式(2)中激勵(lì)函數(shù)內(nèi)部的乘加運(yùn)算規(guī)則進(jìn)行計(jì)算。本設(shè)計(jì)輸出層神經(jīng)元的激勵(lì)函數(shù)為hard_sigmoid函數(shù)[12],表達(dá)式為式(3):

     wdz2-gs3.gif

    根據(jù)定義,hard_sigmoid函數(shù)為分段函數(shù),且各段均為線性關(guān)系,其非常便于在FPGA系統(tǒng)中實(shí)現(xiàn),即利用條件判斷語(yǔ)句對(duì)輸入進(jìn)行判斷并輸出不同的值,如圖6所示為hard_sigmoid函數(shù)硬件實(shí)現(xiàn)示意圖。

wdz2-t6.gif

3 系統(tǒng)測(cè)試分析

    為了測(cè)試所設(shè)計(jì)自編碼神經(jīng)網(wǎng)絡(luò)在FPGA平臺(tái)上的實(shí)現(xiàn),本文選擇的網(wǎng)絡(luò)結(jié)構(gòu)為輸入層、輸出層含有4個(gè)神經(jīng)元節(jié)點(diǎn),隱含層含有8個(gè)神經(jīng)元節(jié)點(diǎn)。所選擇的應(yīng)用背景為對(duì)ASCII碼的編碼和解碼,其中軟件端完成對(duì)ASCII碼的編碼,所得到的編碼數(shù)據(jù)在FPGA端實(shí)現(xiàn)解碼。

    本實(shí)驗(yàn)測(cè)試集由軟件生成,軟件環(huán)境下對(duì)ASCII碼中非控制字符(碼值為32~127,共96個(gè))做歸一化處理,然后按照隨機(jī)組合的方式4個(gè)一組輸入至所設(shè)計(jì)的自編碼神經(jīng)網(wǎng)絡(luò)并獲得隱含層的輸出,將該輸出作為FPGA的測(cè)試輸入數(shù)據(jù)保存在SD卡中。所選擇的FPGA硬件平臺(tái)是Xilinx VC707 FPGA開(kāi)發(fā)板,系統(tǒng)開(kāi)發(fā)環(huán)境為Xilinx ISE 14.7,仿真環(huán)境為ModelSim SE 10.1c,如圖7所示為硬件系統(tǒng)測(cè)試圖。

wdz2-t7.gif

    在圖7所示的硬件系統(tǒng)測(cè)試圖中,①為SD卡,②為L(zhǎng)CD1602顯示屏,③為控制按鍵。系統(tǒng)上電后,通過(guò)控制按鍵的按下操作不斷從SD卡中讀取數(shù)據(jù),經(jīng)過(guò)網(wǎng)絡(luò)計(jì)算模塊計(jì)算后將結(jié)果顯示在LCD1602顯示屏上,每次顯示4個(gè)字符,如圖7中LCD1602顯示屏的第二行即為解碼后的4個(gè)數(shù)據(jù),對(duì)應(yīng)于圖1所示神經(jīng)網(wǎng)絡(luò)的4個(gè)輸出。

3.1 網(wǎng)絡(luò)計(jì)算結(jié)果分析

    神經(jīng)網(wǎng)絡(luò)經(jīng)過(guò)訓(xùn)練得到一組最優(yōu)參數(shù),包括網(wǎng)絡(luò)權(quán)值和偏置。為了在FPGA中實(shí)現(xiàn)所設(shè)計(jì)自編碼神經(jīng)網(wǎng)絡(luò)的解碼器部分,需要獲取對(duì)ASCII碼編碼后的數(shù)據(jù)(神經(jīng)網(wǎng)絡(luò)隱含層的輸出數(shù)據(jù))和解碼器部分的網(wǎng)絡(luò)權(quán)值與偏置。另外由于FPGA僅能對(duì)二進(jìn)制數(shù)據(jù)識(shí)別和計(jì)算,因此需要將上述數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)。

    在FPGA設(shè)計(jì)中,數(shù)據(jù)的表示方式與FPGA邏輯資源消耗直接相關(guān)的。數(shù)據(jù)表示位數(shù)越多,數(shù)據(jù)精度越高,邏輯資源的消耗也就越多,因此在FPGA設(shè)計(jì)中需要權(quán)衡FPGA資源消耗和數(shù)據(jù)精度之間的關(guān)系。結(jié)合本文的實(shí)際應(yīng)用,同時(shí)為了更好地權(quán)衡FPGA設(shè)計(jì)中的精度、資源占用和功耗,本設(shè)計(jì)采用定點(diǎn)數(shù)表示上述數(shù)據(jù)。

    由于在FPGA設(shè)計(jì)中采用有限位定點(diǎn)數(shù)來(lái)表示數(shù)據(jù)時(shí),對(duì)原數(shù)據(jù)進(jìn)行定點(diǎn)量化的過(guò)程中會(huì)因?yàn)閿?shù)據(jù)的截?cái)喽a(chǎn)生誤差。根據(jù)網(wǎng)絡(luò)計(jì)算模塊的設(shè)計(jì),其輸出為計(jì)算結(jié)果二進(jìn)制小數(shù)點(diǎn)后7位,因此在設(shè)計(jì)中需要保證這7位數(shù)據(jù)正確,即與原始輸入數(shù)據(jù)相比,經(jīng)過(guò)解碼后輸出結(jié)果的誤差需要小于2-7,即應(yīng)小于7.812 5×10-3。本文利用MATLAB下的Fixed Point Toolbox對(duì)數(shù)據(jù)進(jìn)行量化,然后分析本設(shè)計(jì)中數(shù)據(jù)不同的量化位數(shù)對(duì)計(jì)算結(jié)果誤差的影響,如圖8所示為定點(diǎn)數(shù)表示中小數(shù)點(diǎn)的位數(shù)和最大誤差之間的關(guān)系。

wdz2-t8.gif

    從圖8可以看出:

    (1)隨著定點(diǎn)數(shù)小數(shù)位數(shù)的增加,最大誤差值不斷降低,即數(shù)據(jù)精度越來(lái)越高;

    (2)定點(diǎn)數(shù)小數(shù)位變?yōu)?2位之后,其最大誤差基本保持不變;

    (3)定點(diǎn)數(shù)小數(shù)位為9位時(shí),其最大誤差與7.812 5×10-3基本一致;定點(diǎn)數(shù)小數(shù)位為10位時(shí),其最大誤差已符合小于7.812 5×10-3的要求。

    基于圖8所示的分析結(jié)果,本文在對(duì)設(shè)計(jì)中的網(wǎng)絡(luò)權(quán)值、偏置和編碼數(shù)據(jù)進(jìn)行定點(diǎn)數(shù)量化時(shí),小數(shù)位均設(shè)計(jì)為10位。進(jìn)一步通過(guò)對(duì)網(wǎng)絡(luò)的權(quán)值、偏置和編碼數(shù)據(jù)的大小范圍進(jìn)行分析可以確定其整數(shù)位的位數(shù),3種數(shù)據(jù)的二進(jìn)制定點(diǎn)數(shù)格式如表1所示。

wdz2-b1.gif

    本設(shè)計(jì)在ModelSim環(huán)境下對(duì)網(wǎng)絡(luò)計(jì)算模塊進(jìn)行仿真,并對(duì)模塊輸出的計(jì)算結(jié)果與軟件中的原始輸入數(shù)據(jù)進(jìn)行分析比對(duì),所測(cè)試數(shù)據(jù)中的絕對(duì)誤差最大值小于7.812 5×10-3,符合設(shè)計(jì)中的誤差要求。另外通過(guò)硬件實(shí)測(cè),所有被編碼后的數(shù)據(jù)經(jīng)過(guò)FPGA計(jì)算后均被正確解碼,并將結(jié)果顯示在LCD1602上,即所設(shè)計(jì)的FPGA硬件系統(tǒng)正確地完成了解碼功能,從而驗(yàn)證了對(duì)所設(shè)計(jì)網(wǎng)絡(luò)計(jì)算模塊的誤差分析。

3.2 系統(tǒng)性能分析

    如表2所示為Xilinx ISE對(duì)系統(tǒng)工程綜合實(shí)現(xiàn)后列出的主要資源占用情況??梢钥闯?,DSP資源占用較大,主要原因是網(wǎng)絡(luò)計(jì)算模塊中的乘加計(jì)算和激勵(lì)函數(shù)運(yùn)算均含有定點(diǎn)數(shù)乘法和加法操作,因此會(huì)占用較多的DSP資源。另外,BRAM資源的占用主要來(lái)自于FIFO模塊的實(shí)現(xiàn)和網(wǎng)絡(luò)計(jì)算模塊中網(wǎng)絡(luò)權(quán)值與偏置的存儲(chǔ)。

wdz2-b2.gif

    如表3所示為FPGA硬件實(shí)現(xiàn)數(shù)據(jù)解碼的速度和軟件解碼速度的比較,軟件解碼是在MATLAB軟件中測(cè)試所得,CPU為Intel Core i7,主頻為2.5 GHz。FPGA硬件解碼速度是通過(guò)在FPGA中設(shè)置計(jì)數(shù)器,對(duì)從讀取解碼器輸入數(shù)據(jù)到最后輸出結(jié)果的時(shí)鐘進(jìn)行計(jì)數(shù),然后利用ChipScope工具查看計(jì)數(shù)值來(lái)計(jì)算工作時(shí)間。表3中的結(jié)果顯示,相比于CPU軟件解碼,本文所設(shè)計(jì)的FPGA硬件解碼器加速了7倍以上。

wdz2-b3.gif

    通過(guò)Xilinx ISE自帶的XPower工具可以得到FPGA的運(yùn)行功耗大致為0.389 W,所設(shè)計(jì)系統(tǒng)的外圍設(shè)備中LCD1602功耗大致為0.693 W,其余外設(shè)的功耗可忽略不計(jì),因此整個(gè)系統(tǒng)總功耗為1 W左右。而相比之下,Intel Core i7-6500U主頻為2.5 GHz的CPU的功耗可高達(dá)65 W,可見(jiàn)本系統(tǒng)功耗僅為通用CPU的1.5%,因此特別適合將本文所設(shè)計(jì)的基于FPGA的解碼器應(yīng)用于低功耗便攜式設(shè)備中。

4 結(jié)論

    利用神經(jīng)網(wǎng)絡(luò)所具有的輸入輸出之間的映射關(guān)系,可以簡(jiǎn)單高效地實(shí)現(xiàn)數(shù)據(jù)編碼和解碼。本文根據(jù)自編碼神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和特點(diǎn),將其用于編碼和解碼,并在FPGA中實(shí)現(xiàn)自編碼神經(jīng)網(wǎng)絡(luò)的解碼器部分。通過(guò)對(duì)軟件算法的設(shè)計(jì)和網(wǎng)絡(luò)計(jì)算過(guò)程的分析,按照功能和需求對(duì)FPGA模塊進(jìn)行設(shè)計(jì)。利用ModelSim軟件對(duì)所設(shè)計(jì)的各個(gè)FPGA模塊進(jìn)行仿真驗(yàn)證,利用Xilinx ISE對(duì)整個(gè)工程進(jìn)行設(shè)計(jì)、綜合和實(shí)現(xiàn),并將編程文件下載至Xilinx VC707 FPGA開(kāi)發(fā)板中進(jìn)行驗(yàn)證,同時(shí)對(duì)FPGA系統(tǒng)的資源占用、計(jì)算速度和功耗進(jìn)行評(píng)估。通過(guò)測(cè)試,對(duì)于在軟件中經(jīng)過(guò)編碼的數(shù)據(jù),在FPGA系統(tǒng)中可以正確解碼。同時(shí)相比于通用CPU,該系統(tǒng)計(jì)算過(guò)程加速了7倍以上,而運(yùn)行功耗僅為CPU的1.5%,因此具有速度快、功耗低的特點(diǎn),特別適合將其應(yīng)用于實(shí)時(shí)性、低功耗便攜式設(shè)備中。

參考文獻(xiàn)

[1] 曹雪虹,張宗橙.信息論與編碼[M].北京:清華大學(xué)出版社,2016.

[2] 張定會(huì),李敬紅,左小五.神經(jīng)網(wǎng)絡(luò)編碼和解碼[C].全國(guó)青年通信學(xué)術(shù)會(huì)議.2002.

[3] 王雅思.深度學(xué)習(xí)中的自編碼器的表達(dá)能力研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2014.

[4] 李時(shí)峰.基于自編碼神經(jīng)網(wǎng)絡(luò)文本特征選擇的研究[D].天津:天津科技大學(xué),2016.

[5] 白玉婷,張剛.AVS熵編碼的FPGA實(shí)現(xiàn)[J].軟件,2012,33(2):102-104,156.

[6] 陳章進(jìn),鐘國(guó)海,畢卓.一種基于低成本FPGA的高速8B/10B編解碼器設(shè)計(jì)[J].微計(jì)算機(jī)信息,2012,28(10):189-190,480.

[7] Li Huimin,F(xiàn)an 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] 魯亞平.面向深度網(wǎng)絡(luò)的自編碼器研究[D].蘇州:蘇州大學(xué),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卡驅(qū)動(dòng)設(shè)計(jì)與驗(yàn)證[J].通訊世界,2017(12):3-4.



作者信息:

周松江,李圣辰,劉  明

(北京郵電大學(xué) 信息光子學(xué)與光通信研究院,北京100876)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。