《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 一種基于FPGA的低功耗高速解碼器設(shè)計(jì)
一種基于FPGA的低功耗高速解碼器設(shè)計(jì)
2018年電子技術(shù)應(yīng)用第4期
周松江,李圣辰,劉 明
北京郵電大學(xué) 信息光子學(xué)與光通信研究院,北京100876
摘要: 針對傳統(tǒng)編解碼算法復(fù)雜度高、不易擴(kuò)展等問題,對自編碼神經(jīng)網(wǎng)絡(luò)前向傳播算法和結(jié)構(gòu)進(jìn)行了研究,提出了一種以自編碼神經(jīng)網(wǎng)絡(luò)為編解碼算法,以FPGA為實(shí)現(xiàn)平臺的低功耗高速解碼器系統(tǒng)。該系統(tǒng)實(shí)現(xiàn)了字符的編解碼,同時可被應(yīng)用于各種多媒體信息的編解碼。通過ModelSim仿真,Xilinx ISE實(shí)現(xiàn)后進(jìn)行硬件實(shí)測,對計(jì)算精度、資源消耗、計(jì)算速度和功耗等進(jìn)行分析。實(shí)驗(yàn)測試結(jié)果表明,所設(shè)計(jì)的解碼器能夠正確完成數(shù)據(jù)解碼功能,算法簡潔高效,擴(kuò)展能力強(qiáng),系統(tǒng)具有低功耗、速度快等特點(diǎn),可廣泛應(yīng)用于各種低功耗、便攜式產(chǎn)品。
中圖分類號: TN791;TP183
文獻(xiàn)標(biāo)識碼: 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ǔ)是對相關(guān)信息進(jìn)行編碼和解碼,以利于信息的傳輸、顯示和保護(hù)[1]。面對巨大信息量的處理需求,快速高效的編解碼系統(tǒng)能夠有效提高信息處理能力。近年來,隨著神經(jīng)網(wǎng)絡(luò)的發(fā)展和應(yīng)用,利用神經(jīng)網(wǎng)絡(luò)進(jìn)行數(shù)學(xué)函數(shù)回歸的方案,為信息的編解碼提供了簡單有效的途徑[2]。自編碼神經(jīng)網(wǎng)絡(luò)是一種無監(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é)構(gòu)可擴(kuò)展,實(shí)用性更強(qiáng)[3]

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

    本文通過分析自編碼神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和特點(diǎn),提出了一種用于數(shù)據(jù)解碼的硬件實(shí)現(xiàn)架構(gòu)。根據(jù)網(wǎng)絡(luò)計(jì)算過程中包含的運(yùn)算和神經(jīng)元間的并行性特點(diǎn),結(jié)合FPGA高并行、低功耗和高速數(shù)據(jù)處理的優(yōu)勢,將自編碼神經(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ò)的基本原理,通過模擬人腦神經(jīng)系統(tǒng)的結(jié)構(gòu)和功能而建立的一個數(shù)學(xué)模型,該模型擁有以任意精度逼近一個離散值、實(shí)數(shù)值或者目標(biāo)函數(shù)的功能[9-10]。自編碼神經(jīng)網(wǎng)絡(luò)是一種無監(jiān)督的人工神經(jīng)網(wǎng)絡(luò),其采用反向傳播算法,通過學(xué)習(xí)試圖使得網(wǎng)絡(luò)的輸出值等于輸入值,從而為輸入數(shù)據(jù)學(xué)習(xí)到一種特征表示[3-4]

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

wdz2-t1.gif

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

    wdz2-gs1.gif

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

wdz2-gs2.gif

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

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

    本章對基于FPGA的硬件解碼系統(tǒng)的設(shè)計(jì)需求進(jìn)行分析,介紹整個系統(tǒng)的硬件架構(gòu)設(shè)計(jì)、系統(tǒng)工作原理,最后對設(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ù)解碼功能。在軟件端對自編碼神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,得到網(wǎng)絡(luò)模型后將對現(xiàn)今最通用的單字節(jié)編碼ASCII碼歸一化后的數(shù)據(jù)輸入至自編碼神經(jīng)網(wǎng)絡(luò)的編碼器以獲得編碼數(shù)據(jù),最后將編碼數(shù)據(jù)送至FPGA端實(shí)現(xiàn)數(shù)據(jù)解碼以恢復(fù)原始輸入的ASCII碼。

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

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

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

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

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

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

wdz2-t2.gif

    設(shè)計(jì)中利用SD卡來存儲編碼數(shù)據(jù),對SD卡的操作采用簡單的命令/響應(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ù)據(jù)傳輸,因此在設(shè)計(jì)中采用獨(dú)立的讀時鐘和寫時鐘,以用于異步操作。

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

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

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

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

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

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

    通過對網(wǎng)絡(luò)前向計(jì)算分析可知其包括乘加運(yùn)算和激勵函數(shù)運(yùn)算。由于本設(shè)計(jì)中自編碼神經(jīng)網(wǎng)絡(luò)的輸入是對ASCII碼歸一化后的數(shù)據(jù),即原ASCII碼值除以128后的值,因此在FPGA模塊中激勵函數(shù)的輸出值需要擴(kuò)大128倍才是真正的ASCII碼值。由于128=27,在FPGA中乘操作可通過移位實(shí)現(xiàn),因此對計(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)算、激勵函數(shù)運(yùn)算和截位運(yùn)算,如圖5所示為一個輸出層神經(jīng)元的計(jì)算結(jié)構(gòu)示意圖,輸出層各個神經(jīng)元按照圖5所示的計(jì)算結(jié)構(gòu)以并行、獨(dú)立的方式進(jìn)行計(jì)算。

wdz2-t5.gif

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

     wdz2-gs3.gif

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

wdz2-t6.gif

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

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

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

wdz2-t7.gif

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

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

    神經(jīng)網(wǎng)絡(luò)經(jīng)過訓(xùn)練得到一組最優(yōu)參數(shù),包括網(wǎng)絡(luò)權(quán)值和偏置。為了在FPGA中實(shí)現(xiàn)所設(shè)計(jì)自編碼神經(jīng)網(wǎng)絡(luò)的解碼器部分,需要獲取對ASCII碼編碼后的數(shù)據(jù)(神經(jīng)網(wǎng)絡(luò)隱含層的輸出數(shù)據(jù))和解碼器部分的網(wǎng)絡(luò)權(quán)值與偏置。另外由于FPGA僅能對二進(jìn)制數(shù)據(jù)識別和計(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)用,同時為了更好地權(quán)衡FPGA設(shè)計(jì)中的精度、資源占用和功耗,本設(shè)計(jì)采用定點(diǎn)數(shù)表示上述數(shù)據(jù)。

    由于在FPGA設(shè)計(jì)中采用有限位定點(diǎn)數(shù)來表示數(shù)據(jù)時,對原數(shù)據(jù)進(jìn)行定點(diǎn)量化的過程中會因?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)過解碼后輸出結(jié)果的誤差需要小于2-7,即應(yīng)小于7.812 5×10-3。本文利用MATLAB下的Fixed Point Toolbox對數(shù)據(jù)進(jìn)行量化,然后分析本設(shè)計(jì)中數(shù)據(jù)不同的量化位數(shù)對計(jì)算結(jié)果誤差的影響,如圖8所示為定點(diǎn)數(shù)表示中小數(shù)點(diǎn)的位數(shù)和最大誤差之間的關(guān)系。

wdz2-t8.gif

    從圖8可以看出:

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

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

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

    基于圖8所示的分析結(jié)果,本文在對設(shè)計(jì)中的網(wǎng)絡(luò)權(quán)值、偏置和編碼數(shù)據(jù)進(jìn)行定點(diǎn)數(shù)量化時,小數(shù)位均設(shè)計(jì)為10位。進(jìn)一步通過對網(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)境下對網(wǎng)絡(luò)計(jì)算模塊進(jìn)行仿真,并對模塊輸出的計(jì)算結(jié)果與軟件中的原始輸入數(shù)據(jù)進(jìn)行分析比對,所測試數(shù)據(jù)中的絕對誤差最大值小于7.812 5×10-3,符合設(shè)計(jì)中的誤差要求。另外通過硬件實(shí)測,所有被編碼后的數(shù)據(jù)經(jīng)過FPGA計(jì)算后均被正確解碼,并將結(jié)果顯示在LCD1602上,即所設(shè)計(jì)的FPGA硬件系統(tǒng)正確地完成了解碼功能,從而驗(yàn)證了對所設(shè)計(jì)網(wǎng)絡(luò)計(jì)算模塊的誤差分析。

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

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

wdz2-b2.gif

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

wdz2-b3.gif

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

4 結(jié)論

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

參考文獻(xiàn)

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

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

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

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

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

[6] 陳章進(jìn),鐘國海,畢卓.一種基于低成本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ū)動設(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)載。