深度神經(jīng)網(wǎng)絡(luò)FPGA設(shè)計與實現(xiàn)PPT完整全套教學(xué)課件_第1頁
深度神經(jīng)網(wǎng)絡(luò)FPGA設(shè)計與實現(xiàn)PPT完整全套教學(xué)課件_第2頁
深度神經(jīng)網(wǎng)絡(luò)FPGA設(shè)計與實現(xiàn)PPT完整全套教學(xué)課件_第3頁
深度神經(jīng)網(wǎng)絡(luò)FPGA設(shè)計與實現(xiàn)PPT完整全套教學(xué)課件_第4頁
深度神經(jīng)網(wǎng)絡(luò)FPGA設(shè)計與實現(xiàn)PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩519頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Contents目錄第1章深度學(xué)習(xí)及AI芯片第2章深度學(xué)習(xí)開發(fā)平臺第3章深度神經(jīng)網(wǎng)絡(luò)基礎(chǔ)層算子介紹第4章FPGA基本介紹第5章FPGA神經(jīng)網(wǎng)絡(luò)開發(fā)基礎(chǔ)第6章FPGA神經(jīng)網(wǎng)絡(luò)計算的RTL級開發(fā)第7章基于FPGA實現(xiàn)YOLOV2模型計算加速實例分析第8章基于OpenCL的FPGA神經(jīng)網(wǎng)絡(luò)計算加速開發(fā)第9章神經(jīng)網(wǎng)絡(luò)壓縮與加速技術(shù)全套可編輯PPT課件第1章深度學(xué)習(xí)及AI芯片1.1深度學(xué)習(xí)研究現(xiàn)狀1.2AI芯片研究現(xiàn)狀

1.1深度學(xué)習(xí)研究現(xiàn)狀1.1深度學(xué)習(xí)研究現(xiàn)狀隨著“人工智能”“深度學(xué)習(xí)”和“機器學(xué)習(xí)”這三個概念的出現(xiàn)并應(yīng)用于社會各個領(lǐng)域,越來越多的人將這三個概念混為一談。嚴(yán)格來說,機器學(xué)習(xí)是人工智能的一個分支,專門研究計算機怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為;而深度學(xué)習(xí)是實現(xiàn)機器學(xué)習(xí)的一種技術(shù),該技術(shù)使得機器學(xué)習(xí)能夠?qū)崿F(xiàn)眾多的應(yīng)用并拓展了人工智能的領(lǐng)域范圍。圖1-1為人工智能、機器學(xué)習(xí)、深度學(xué)習(xí)的關(guān)系圖,而圖1-2為深度學(xué)習(xí)與傳統(tǒng)機器學(xué)習(xí)的區(qū)別。

圖1-1人工智能、機器學(xué)習(xí)、深度學(xué)習(xí)的關(guān)系圖

圖1-2深度學(xué)習(xí)與傳統(tǒng)機器學(xué)習(xí)的區(qū)別

1.1.2深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的發(fā)展歷程

傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)起源于生物神經(jīng)網(wǎng)絡(luò),20世紀(jì)40年代出現(xiàn)的神經(jīng)元的MP模型和Hebb學(xué)習(xí)規(guī)則,為以后的學(xué)習(xí)算法奠定了基礎(chǔ)。1957年,F(xiàn).Roseblatt提出了由兩層神經(jīng)元組成的神經(jīng)網(wǎng)絡(luò),并將其稱為“感知器”?!案兄鳌弊鳛槭讉€可以學(xué)習(xí)的人工神經(jīng)網(wǎng)絡(luò)在社會上引起了轟動,許多學(xué)者紛紛投入到神經(jīng)網(wǎng)絡(luò)的研究中。這段研究浪潮成為了神經(jīng)網(wǎng)絡(luò)研究的第一次高潮。20世70年代,Minskey指出感知器只能做簡單的線性分類任務(wù),甚至無法實現(xiàn)稍復(fù)雜的異或(xor)問題,神經(jīng)網(wǎng)絡(luò)的研究陷入冰河期,如圖1-3所示。

圖1-3神經(jīng)網(wǎng)絡(luò)發(fā)展簡史

1)監(jiān)督學(xué)習(xí)

監(jiān)督學(xué)習(xí)是指所有數(shù)據(jù)都有明確的標(biāo)簽,通過建立一個學(xué)習(xí)訓(xùn)練過程,將模型訓(xùn)練結(jié)果與實際的數(shù)據(jù)標(biāo)簽相比較,并不斷地調(diào)節(jié)預(yù)測模型,直到模型得到一個理想的結(jié)果。

2)半監(jiān)督學(xué)習(xí)

半監(jiān)督學(xué)習(xí)是指所有訓(xùn)練數(shù)據(jù)中,有一部分是有標(biāo)簽的,一部分是沒有標(biāo)簽的,往往沒有標(biāo)簽的數(shù)據(jù)比有標(biāo)簽的數(shù)據(jù)量要大。

3)無監(jiān)督學(xué)習(xí)

無監(jiān)督學(xué)習(xí)是對無標(biāo)簽數(shù)據(jù)進行分析的一種學(xué)習(xí)方法。

4)深度強化學(xué)習(xí)

深度強化學(xué)習(xí)是指在沒有數(shù)據(jù)標(biāo)簽的情況下,網(wǎng)絡(luò)通過匯報函數(shù)來判斷輸出結(jié)果是否接近目標(biāo)。

1.1.3典型的深度神經(jīng)網(wǎng)絡(luò)

1)深度置信網(wǎng)絡(luò)

深度置信網(wǎng)絡(luò)(DeepBeliefNetwork,DBN)是由GeoffreyE.Hinton于2016年提出的由多個限制玻爾茲曼機(RestrictedBoltzmannMachines)層組成,以貪婪的方式進行訓(xùn)練的一種概率生成模型。

2)深度卷積神經(jīng)網(wǎng)絡(luò)

深度卷積神經(jīng)網(wǎng)絡(luò)(DeepConvolutionalNeuralNetwork,DCNN)是受啟于人大腦對眼睛接收信號的理解過程而提出的模型,它的雛形是1998年LeCun提出的LeNet-5模型,真正進入大眾視野是2012年AlexNet模型取得ImageNet比賽的分類任務(wù)的冠軍。

深度卷積神經(jīng)網(wǎng)絡(luò)模型被廣泛應(yīng)用于計算機視覺領(lǐng)域。

3)深度遞歸神經(jīng)網(wǎng)絡(luò)

遞歸神經(jīng)網(wǎng)絡(luò)(RecursiveNeuralNetwork,RNN)是于1990年出現(xiàn)的一種處理序列結(jié)構(gòu)信息的深度神經(jīng)網(wǎng)絡(luò)模型,它可以在處理新輸入的同時存儲信息。

4)生成對抗網(wǎng)絡(luò)

生成對抗網(wǎng)絡(luò)(GenerativeAdversarialNets,GAN)是由IanGoodfellow于2014年提出的一種無監(jiān)督學(xué)習(xí)網(wǎng)絡(luò)模型。

5)圖神經(jīng)網(wǎng)絡(luò)

圖神經(jīng)網(wǎng)絡(luò)是在已有神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上進行的拓展,其理論基礎(chǔ)由Franco博士在2009年首次提出,直到2013年才得到廣泛關(guān)注及應(yīng)用。

6)?AutoML

AutoML是針對龐大數(shù)量的神經(jīng)網(wǎng)絡(luò)模型而發(fā)展起來的深度神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)工具,它是一種避免人工干預(yù)、可自動針對特定問題搜索出最佳神經(jīng)網(wǎng)絡(luò)架構(gòu)的網(wǎng)絡(luò)學(xué)習(xí)方法。該算法的模型主要是神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索(NeuralArchitectureSearch,NAS)及在其基礎(chǔ)上改進得到的漸進式神經(jīng)架構(gòu)搜索和高效神經(jīng)架構(gòu)搜索等,谷歌(Google)通過提供CloudAutoML將其發(fā)揮到了極致,只需上傳數(shù)據(jù),谷歌的NAS算法就會找到一個快速簡便的架構(gòu)。

1.1.4深度學(xué)習(xí)的典型應(yīng)用

1.在圖像方面的應(yīng)用

圖像識別與解譯是深度學(xué)習(xí)最典型的應(yīng)用領(lǐng)域,其任務(wù)就是讓計算機像人一樣描述攝像機拍攝到的內(nèi)容。

1)人臉識別技術(shù)

目前的應(yīng)用領(lǐng)域有家庭看護、移動互聯(lián)網(wǎng)、智能硬件、政府警用、金融、視頻監(jiān)控、商超零售和網(wǎng)站娛樂等。圖1-4為人臉識別技術(shù)的應(yīng)用實例圖。

圖1-4人臉識別系統(tǒng)

2)圖像分類

2012年,深度學(xué)習(xí)算法AlexNet贏得圖像分類比賽(即ILSVRC比賽,ImageNetLargeScaleVisualRecognitionChallenge)冠軍,深度學(xué)習(xí)開始在圖像分類領(lǐng)域被熟知。在隨后的ILSVRC比賽中,不斷發(fā)展的深度學(xué)習(xí)方法一直占據(jù)絕對優(yōu)勢;在ILSVRC2013比賽中,排名前20的都是深度學(xué)習(xí)算法,并且其錯誤率由2010年的近30%降低到2017年的2.251%(如圖1-5所示),其圖像分類成功率已超過人工標(biāo)注的。

圖1-5歷年ILSVRC錯誤率(錯誤率5%~10%為人類認知范圍)

3)無人駕駛技術(shù)

4)醫(yī)學(xué)影像分析

5)遙感圖像解譯

6)智能安防

2.在語音方面的應(yīng)用

2009年深度學(xué)習(xí)的概念被引入語音識別領(lǐng)域,并對該領(lǐng)域產(chǎn)生了重大影響,隨后谷歌利用深度學(xué)習(xí)自動地從海量數(shù)據(jù)中提取復(fù)雜特征,提高了語音識別的準(zhǔn)確度,也將識別錯誤率降低了20%。目前,語音識別已被各個領(lǐng)域廣泛應(yīng)用,如同聲傳譯系統(tǒng)、蘋果公司提出的Siri系統(tǒng)、科大訊飛的智能輸入法等。另外,語音識別還被應(yīng)用于家庭自動化、視頻游戲和虛擬輔助中。

3.在語言分析方面的應(yīng)用

自然語言處理也是深度學(xué)習(xí)的一個重要應(yīng)用領(lǐng)域,世界上最早的深度學(xué)習(xí)用于自然語言處理的工作誕生于NEC美國實驗室,其研究員R.Collobert和J.Weston從2008年開始采用嵌入式和多層一維卷積的結(jié)構(gòu),用于詞性標(biāo)注、分塊、命名實體識別和語義角色四個典型的自然語言處理問題。

1)機器翻譯如圖1-6所示

2)情感分析

3)詞性標(biāo)注

圖1-6?seq2seq網(wǎng)絡(luò)簡圖

1.2AI芯片研究現(xiàn)狀

1.2.1GPUGPU(GraphicProcessingUnit)起初專門用于處理圖形任務(wù),主要由控制器、寄存器和邏輯單元構(gòu)成。

1.2.2半制定FPGA

FPGA(Field-ProgrammableGateArray)是現(xiàn)場可編程門陣列,它允許無限次的編程,并利用小型查找表來實現(xiàn)組合邏輯。FPGA可以定制化硬件流水線,可以同時處理多個應(yīng)用或在不同時刻處理不同應(yīng)用,具有可編程、高性能、低能耗、高穩(wěn)定、可并行和安全性的特點,在通信、航空航天、汽車電子、工業(yè)控制、測試測量等領(lǐng)域取得了很大的應(yīng)用市場。

1.2.3全定制ASIC

ASIC(ApplicationSpecificIntegratedCircuit)是專用集成電路,是指應(yīng)特定用戶要求和特定電子系統(tǒng)的需要而設(shè)計、制造的集成電路。相比于同樣工藝的FPGA實現(xiàn),ASIC可以實現(xiàn)5~10倍的計算加速,且量產(chǎn)后ASIC的成本會大大降低。不同于可編程的GPU和FPGA,ASIC一旦制造完成將不能更改,因此具有開發(fā)成本高、周期長、門檻高等問題。

1.2.4SoC

SoC(SystemonChip)是系統(tǒng)級芯片,一般是將中央處理器、存儲器、控制器、軟件系統(tǒng)等集成在單一芯片上,通常是面向特殊用途的指定產(chǎn)品,如手機SoC、電視SoC、汽車SoC等。系統(tǒng)級芯片能降低開發(fā)和生產(chǎn)成本,相比于ASIC芯片,其開發(fā)周期短,因此更加適合量產(chǎn)商用。

1.2.5類腦芯片

類腦芯片(Brain-InspiredChip)是仿照人類大腦的信息處理方式,打破了存儲和計算分離的架構(gòu),實現(xiàn)了數(shù)據(jù)并行傳送、分布式處理的低功耗芯片。在基于馮·諾依曼結(jié)構(gòu)的計算芯片中,計算模塊和存儲模塊分離處理從而引入了延時及功耗浪費。類腦芯片側(cè)重于仿照人類大腦神經(jīng)元模型及其信息處理的機制,利用扁平化的設(shè)計結(jié)構(gòu),從而在降低能耗的前提下高效地完成計算任務(wù)。第2章深度學(xué)習(xí)開發(fā)平臺2.1深度學(xué)習(xí)平臺介紹2.2深度學(xué)習(xí)平臺對比

2.1深度學(xué)習(xí)平臺介紹

2.1.1TensorFlowTensorFlow是谷歌公司在DistBelief(分布式深度學(xué)習(xí)平臺)的基礎(chǔ)上改進的第二代人工智能學(xué)習(xí)系統(tǒng),而它的名字則來源于其運行原理。Tensor(張量)意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計算,TensorFlow是一個將數(shù)據(jù)流圖(DataFlowGraphs)應(yīng)用于數(shù)值計算的開源軟件庫。

TensorFlow是一個將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)傳輸至人工智能神經(jīng)網(wǎng)絡(luò)中,并對其進行分析和處理的系統(tǒng)。其中,節(jié)點(Nodes)在數(shù)據(jù)流圖中表示數(shù)學(xué)操作,而數(shù)據(jù)流圖中的線(Edges)則表示在節(jié)點間相互聯(lián)系的多維數(shù)據(jù)數(shù)組,即張量(Tensor)。它具有非常靈活的架構(gòu),能夠幫助用戶在多種平臺上展開計算,也被廣泛應(yīng)用于語音識別或圖像識別等多項機器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域。

TensorFlow還有很多便于應(yīng)用的其他優(yōu)勢:

(1)?TensorFlow具有高度的靈活性。

(2)?TensorFlow具有真正的可移植性。

(3)?TensorFlow可以加強科研和產(chǎn)品之間的相關(guān)性。

(4)?TensorFlow具有自動求微分的能力。

(5)?TensorFlow支持多語言。

(6)?TensorFlow可以最大化系統(tǒng)性能。

(7)?TensorFlow支持分布式執(zhí)行。

(8)?TensorFlow可以進行遷移學(xué)習(xí)(TransferLearning)。

(9)?TensorFlow生態(tài)系統(tǒng)包含許多工具和庫。

(10)?TensorFlow支持CPU和GPU運行。

鑒于上述優(yōu)勢,近幾年,TensorFlow被廣泛應(yīng)用于各種領(lǐng)域。作為一個廣受歡迎的深度學(xué)習(xí)框架,TensorFlow不僅可以幫助現(xiàn)有很多互聯(lián)網(wǎng)上的應(yīng)用提高智能水平,而且還能夠被廣泛應(yīng)用于其他領(lǐng)域。

1)AlphaGo

2)智能醫(yī)療

3)嬰兒食品制作

4)自動駕駛

5)音樂創(chuàng)作

2.1.2Caffe

Caffe是一個深度學(xué)習(xí)框架,其優(yōu)點是表達力強、速度快和模塊化,由伯克利視覺學(xué)習(xí)中心(BerkeleyVisionandLearningCenter,BVLC)和社區(qū)貢獻者開發(fā),賈楊青等人在加州大學(xué)伯克利分校攻讀博士期間創(chuàng)建了這個項目。Caffe的核心模塊有三個,分別是Blobs、Layers和Nets。Blobs用來進行數(shù)據(jù)存儲、數(shù)據(jù)交互和處理,Caffe通過Blobs統(tǒng)一制定了數(shù)據(jù)內(nèi)存的接口;Layers是神經(jīng)網(wǎng)絡(luò)的核心,它定義了許多層級結(jié)構(gòu),并將Blobs視為輸入輸出;Nets是一系列Layers的集合,并且這些層結(jié)構(gòu)通過連接形成一個網(wǎng)圖。

Caffe的特性和優(yōu)點主要有:

(1)?Caffe具有模塊性。

(2)?Caffe支持任意有向非循環(huán)圖形式的網(wǎng)絡(luò)構(gòu)建。

(3)?Caffe提供了Python和Matlab相結(jié)合的目前研究代碼的快速原型和接口,這兩種語言都用在了構(gòu)造網(wǎng)絡(luò)和分類輸入中。

(4)?Caffe可以促進創(chuàng)新和應(yīng)用。

(5)?Caffe代碼具有可擴展性和活躍性。

(6)?Caffe具有非常快的運算速度。

2.1.3Pytorch

Pytorch是Torch的Python版本,是由Facebook開源的神經(jīng)網(wǎng)絡(luò)框架。

Pytorch的基礎(chǔ)主要包括以下三個方面:

(1)?Numpy風(fēng)格的Tensor操作。

(2)變量自動求導(dǎo)。

(3)神經(jīng)網(wǎng)絡(luò)層、損失函數(shù)和優(yōu)化函數(shù)等高層被封裝。

Pytorch具有以下特性和優(yōu)點:

(1)?Pytorch可以混合前端,新的混合前端在急切模式和圖形模式之間無縫轉(zhuǎn)換,以提供靈活性和速度。

(2)?Python語言優(yōu)先。Pytorch的深度集成允許用戶在Python中使用流行的庫和包編寫神經(jīng)網(wǎng)絡(luò)層。

(3)?Pytorch擁有豐富的工具和函數(shù)庫。

(4)?Pytorch可以快速實現(xiàn)。

(5)?Pytorch具有簡潔易懂的代碼。

(6)?Pytorch具有強大的社區(qū)。

(7)?Pytorch使用命令式/熱切式范式。

2.1.4MXNet

MXNet是亞馬遜(Amazon)選擇的深度學(xué)習(xí)庫。它擁有類似于Theano和TensorFlow的數(shù)據(jù)流圖,能夠應(yīng)用于多個GPU配置;有著更高級別的模型構(gòu)建塊,并且能夠在任何硬件上運行(包括手機)。MXNet提供了對R、Julia、C++、Scala、Matlab和JavaScript的接口,其中對Python的支持只是其冰山一角。

MXNet能夠提供以下功能:

(1)設(shè)備放置。

(2)多GPU培訓(xùn)。

(3)自動區(qū)分。

(4)優(yōu)化的預(yù)定義圖層。

MXNet具有高性能且簡單易學(xué)的代碼、高級API訪問和低級控制,是深度學(xué)習(xí)框架中獨一無二的選擇;MXNet是DMLC第一個結(jié)合了所有成員的努力的項目,也同時吸引了很多核心成員的加入。

2.1.5CNTK

CNTK(theMicrosoftCognitiveToolkit,微軟認知工具集)是一個統(tǒng)一的深度學(xué)習(xí)工具包,它通過有向圖將神經(jīng)網(wǎng)絡(luò)描述為一系列計算步驟。CNTK使用戶能夠通過深度學(xué)習(xí)實現(xiàn)集中性的、能夠處理大規(guī)模數(shù)據(jù)的人工智能,它具有擴展性強、工作效率高和準(zhǔn)確性強等優(yōu)點,并且可以實現(xiàn)多種編程語言與算法之間的相互兼容。

CNTK具有以下四個特性:

(1)高度優(yōu)化的內(nèi)置組件。

(2)能夠?qū)Y源進行有效利用。

(3)能夠幫助用戶創(chuàng)建自己的網(wǎng)絡(luò)。

(4)能夠使用Azure(微軟基于云計算的操作系統(tǒng))進行培訓(xùn)和托管。

CNTK具有以下三個優(yōu)點:

(1)速度快和可擴展性強。

(2)商業(yè)級質(zhì)量。

(3)兼容性。

CNTK目前主要被應(yīng)用于基于神經(jīng)網(wǎng)絡(luò)的邏輯回歸與MNIST數(shù)字識別,也允許用戶使用圖級別的API來編寫神經(jīng)網(wǎng)絡(luò)。由于它的高效性和可擴展性,CNTK被越來越多的用戶所熟知和采用。

2.1.6PaddlePaddle

PaddlePaddle具有以下優(yōu)點:

(1)代碼易于理解,官方提供豐富的學(xué)習(xí)資料及工具,并且?guī)椭脩粞杆俪蔀樯疃葘W(xué)習(xí)開發(fā)者。

(2)框架具備非常好的擴展性,并且提供了豐富全面的API,能夠?qū)崿F(xiàn)用戶各種天馬行空的創(chuàng)意。

(3)基于百度多年的AI技術(shù)積累以及大量的工程實踐驗證,框架安全穩(wěn)定。

(4)框架能夠一鍵安裝,針對CPU、GPU都做了眾多優(yōu)化,分布式性能強勁,并且具有很強的開放性。

PaddlePaddle廣泛應(yīng)用于以下幾個方面:

(1)它能夠?qū)⒃~表示成一個實數(shù)向量(One-HotVector),從而能夠進行詞與詞之間的計算;

(2)根據(jù)不同用戶個性化需求與興趣推薦其可能感興趣的信息或商品;

(3)可以用來判斷一段文本所表達的情緒狀態(tài),比如正面、負面;

(4)能夠根據(jù)圖像所傳達的語義信息將圖像按類別進行區(qū)分;

(5)能夠通過深度學(xué)習(xí)方法實現(xiàn)不同語言之間的轉(zhuǎn)換;

(6)能夠利用基于PaddlePaddle的SSD(SingleShotMultiboxDetector,單次多目標(biāo)檢測)神經(jīng)網(wǎng)絡(luò)模型來做目標(biāo)探測。

2.1.7Darknet

Darknet是一個使用C語言和CUDA(ComputerUnifiedDeviceArchitecture,計算統(tǒng)一設(shè)備架構(gòu))編寫的開源神經(jīng)網(wǎng)絡(luò)框架。它安裝快速,并支持CPU和GPU計算。Darknet易于安裝,只有兩個可選的依賴項:如果用戶想要更多種類的支持圖像類型,可以使用OpenCV;如果用戶想要用GPU計算,可以使用CUDA。CPU上的Darknet速度很快,但它在GPU上的速度更快,是CPU上的500倍!

Darknet框架已經(jīng)被廣泛應(yīng)用于深度學(xué)習(xí)領(lǐng)域:它被應(yīng)用于基于YOLO(一種基于深度神經(jīng)網(wǎng)絡(luò)的對象識別和定位算法)網(wǎng)絡(luò)的實時目標(biāo)識別與檢測系統(tǒng);被應(yīng)用于在ImageNet數(shù)據(jù)集和CIFAR-10數(shù)據(jù)集下的目標(biāo)分類系統(tǒng);還被應(yīng)用于基于RNN網(wǎng)絡(luò)的自然語言處理系統(tǒng)。Darknet正在被越來越多的用戶所熟知和使用。

2.2深度學(xué)習(xí)平臺對比

表2-1中總結(jié)了這些平臺的主要情況,每款平臺都有各自的特點。

表2-2和圖2-1對比了不同深度學(xué)習(xí)工具在Github上活躍程度的一些指標(biāo)。

從圖2-1中可以看出,無論從哪個指標(biāo)來看,TensorFlow都要完勝其他對手。圖2-1主流的深度學(xué)習(xí)平臺在Github上的數(shù)據(jù)統(tǒng)計圖

表2-3對主流深度學(xué)習(xí)平臺進行了各個維度的評分,可作為讀者選擇學(xué)習(xí)平臺的參考依據(jù)。第3章深度神經(jīng)網(wǎng)絡(luò)基礎(chǔ)層算子介紹3.1卷積算子3.2反卷積算子3.3池化算子3.4激活算子3.5全連接算子3.6Softmax算子3.7批標(biāo)準(zhǔn)化算子3.8Shortcut算子

3.1卷積算子

基礎(chǔ)概念(1)卷積核(Kernel)。圖像處理時,對輸入圖像中一個小區(qū)域像素加權(quán)平均后成為輸出圖像的一種操作。(2)填充(Padding)。填充是指處理輸入特征圖(FeatureMap)邊界的方式。(3)步長(Stride)。步長即卷積核遍歷輸入特征圖時每步移動的像素數(shù)。

(4)輸出特征圖尺寸。有了上面三個概念,我們就可以定義卷積運算后輸出特征圖的尺寸大小了。為了便于說明,定義卷積操作參數(shù)如表3-1所示。

假設(shè)3?×?3數(shù)據(jù)矩陣P如圖3-1所示(我們常見的圖像一般是三通道的,這里為方便理解,舉個單通道的例子)。圖3-1Padding示意圖

首先對矩陣P進行Padding補0,將其擴充至5?×?5的P_padding,如圖3-1所示。

Padding?=?n,即在圖片矩陣四周補n圈0(此處為方便起見,以Padding?=?1為例,具體Padding值根據(jù)實際需求而定)。

然后將P_padding與卷積核Kernel作卷積運算。已知輸入特征圖尺寸I?=?3,卷積核Kernel尺寸K?=?3,滑動步長S?=?1,Padding像素數(shù)P?=?1,則輸出特征圖尺寸為

圖3-2所示的是使用一個卷積核得到一個特征圖的過程,而實際應(yīng)用中,會使用多個卷積核得到多個輸出特征圖。圖3-2卷積示意圖

圖3-2中,不同灰度框表示從輸入特征圖矩陣中依次提取出和卷積核一樣大小的塊數(shù)據(jù)。為了提高卷積操作的運算效率,需要進行img2col(圖像矩陣轉(zhuǎn)成列)操作,即把這些不同灰度框內(nèi)的數(shù)據(jù)向量化。共有3?×?3個向量,最后得到9個向量化的數(shù)據(jù)矩陣,如圖3-3所示。

圖3-3img2col示意圖

接著進行矩陣相乘操作,即將卷積核Kernel展成行,與圖像矩陣展成的列進行矩陣相乘,具體操作如圖3-4所示。圖3-4矩陣相乘示意圖

最后進行col2img(矩陣轉(zhuǎn)特征圖)操作,即將生成的列向量轉(zhuǎn)成矩陣輸出,如圖3-5所示。圖3-5col2img示意圖

這里只給出了一個卷積核,一個卷積核只會生成一個特征圖,而在實際應(yīng)用中,為了增強卷積層的表示能力,會使用很多個卷積核以得到多個特征圖。卷積核很多時,如果一個一個計算會很浪費時間和內(nèi)存,但是如果把這些卷積核全部按行排列,再與輸入特征圖轉(zhuǎn)成的列向量作矩陣相乘操作,會一次得出所有的輸出特征圖,這樣可大大提高特征圖矩陣卷積的速度。

3.2反?卷?積?算?子反卷積算子是一種上采樣算子,常被應(yīng)用于場景分割、生成模型等算法網(wǎng)絡(luò)中。它有很多其他的叫法,如TransposedConvolution(轉(zhuǎn)置卷積)、FractionalStridedConvolution(小步長卷積)等。

為了方便說明,首先定義反卷積操作參數(shù),如表3-2所示。

圖3-6是一個簡單的卷積運算,已知輸入特征圖尺寸I?=?4,卷積核Kernel尺寸K?=?3,滑動步長S?=?1,Padding像素數(shù)P?=?0,則輸出特征圖尺寸為

其對應(yīng)的反卷積參數(shù)為(I′=2,K′=3,S′=1,P′=2,O′=4),反卷積運算示意圖如圖3-7所示。

圖3-6卷積運算示意圖(一)

圖3-7反卷積運算示意圖(一)

可以發(fā)現(xiàn),卷積和反卷積操作中K?=?K′,S?=?S′,但是卷積的P?=?0,反卷積的P′=?2通過對比可以發(fā)現(xiàn),卷積層中左上角的輸入只對左上角的輸出有貢獻,所以反卷積層會出現(xiàn)P′=K?-?P?-?1?=?2。

通過示意圖可以發(fā)現(xiàn),反卷積層的輸入/輸出在S?=?S'?=?1時的關(guān)系為

O′=I′?-?K′?+?2P′+1?=?I′+?(K?-?1)?-?2P(3-2)

而對于步長S?>?1的卷積,我們可能會想到對應(yīng)的反卷積步長S′<?1。圖3-8所示為I?=?5,K?=?3,S?=?2,P?=?1,O?=?3的卷積操作,其所對應(yīng)的反卷積操作如圖3-9所示。對于步長S?>?1對應(yīng)的反卷積操作,我們可以理解為:在其輸入特征圖像素之間插入S?-?1個0,此時步長S′不再是小數(shù)而為1。因此,結(jié)合上面所得到的結(jié)論,可以得出此時的輸入/輸出關(guān)系為

O′=S(I′?-?1)?+?K?-?2P(3-3)

圖3-8卷積運算示意圖(二)

圖3-9反卷積運算示意圖(二)

3.3池化算子

常用的池化算子有:(1)平均池化算子:進行池化操作時,對局部感受野中的所有值求均值并作為采樣值。(2)最大池化算子:進行池化操作時,取局部感受野中的最大值作為采樣值。

3.3.1平均池化算子

為了簡化平均池化的過程,這里假設(shè)輸入的是一個w?=?4,h?=?4,c?=?1的矩陣,數(shù)值如圖3-10左側(cè)所示。執(zhí)行平均池化的樹池是一個size?=?2的矩陣,令stride?=?2,pad?=?0。

經(jīng)過平均池化計算后,輸出的結(jié)果矩陣的尺寸大小為m?×?n?×?c,這里

同時c?=?1不變,即輸出2?×?2?×?1的矩陣,數(shù)值如圖3-10右側(cè)所示。

圖3-10平均池化算子

3.3.2最大池化算子

為了簡化最大池化的過程,這里假設(shè)輸入的是一個w?=?4,h?=?4,c?=?1的矩陣,數(shù)值如圖3-11左側(cè)所示。執(zhí)行最大池化的樹池是一個size?=?2的矩陣,令stride?=?2,pad?=?0。

經(jīng)過最大池化計算后,輸出的結(jié)果矩陣的尺寸大小為m?×?n?×?c,這里m?=?n?=?

同時c?=?1不變,即輸出2?×?2?×?1的矩陣,數(shù)值如圖3-11右側(cè)所示。

圖3-11最大池化算子

3.4激活算子

常用的激活函數(shù)有Sigmoid函數(shù)、Tanh函數(shù)、Relu函數(shù)、Softplus函數(shù)和Leaky_relu函數(shù),其計算公式和函數(shù)圖像如表3-3所示。

3.5全?連?接?算?子

圖3-12顯示的是全連接層的過程。X是全連接層的輸入,也就是特征;W是全連接層的參數(shù),也稱為權(quán)值。

圖3-12全連接層

特征X是由全連接層前面多個卷積層和池化層處理后得到的。假設(shè)全連接層前面連接的是一個卷積層,這個卷積層輸出了100個特征(也就是我們常說的特征圖的通道為100),每個特征的大小是4?×?4,在將100個特征輸入給全連接層之前Flatten層會將這些特征拉平成N行1列的一維向量,此時,N?=?100?×?4?×?4?=?1600,則特征向量X為1600行1列的一維向量。

全連接層的參數(shù)W是深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中全連接層尋求的最優(yōu)權(quán)值,可表示為T行N列的二維向量,其中T表示類別數(shù)。例如,需要解決的是7分類問題,則T?=?7,其他分類數(shù)目以此類推。通過W?×?X?=?Y,得到T行1列的一維向量,即為全連接層的輸出。

3.6Softmax算子

Softmax算子用于多分類問題,是分類型神經(jīng)網(wǎng)絡(luò)中的輸出層(Softmax層)函數(shù),它可以計算出神經(jīng)網(wǎng)絡(luò)輸出層的值。因此,Softmax算子主要作用于神經(jīng)網(wǎng)絡(luò)的最后一層,旨在輸出輸入樣本屬于各個類別的概率。如圖3-13所示,全連接層的輸出向量Y中的數(shù)字范圍是(?-∞,+∞),而Softmax層的作用是使輸出向量Y中的數(shù)字在(0,1)之間改變。

圖3-13Softmax層

Softmax算子的計算公式為

(3-4)

式中:aj、ak分別表示圖3-13中全連接層的輸出向量Y的第j個和第k個值。

通過Softmax算子的計算后,得到輸出向量P,P中的數(shù)值Sj∈(0,1),j∈[1,T?]。其中Sj??表示輸入樣本屬于該j類別的概率,概率值越大,則輸入樣本屬于該類別的可能性越大。實際中,可以利用Softmax算子解決樣本的多分類問題。

3.7批標(biāo)準(zhǔn)化算子

同卷積層、池化層、全連接層、激活層一樣,批標(biāo)準(zhǔn)化(BatchNormalization,又稱批歸一化)層也屬于網(wǎng)絡(luò)的一層。批標(biāo)準(zhǔn)化算子(后面簡稱BN算子)由谷歌于2015年提出,這是一個深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練的技巧,它不僅可以加快模型的收斂速度,而且可以緩解深層網(wǎng)絡(luò)中“梯度彌散”的問題,從而使得訓(xùn)練深層網(wǎng)絡(luò)模型更加容易和穩(wěn)定。

網(wǎng)絡(luò)一旦訓(xùn)練起來,參數(shù)就需要更新,前面層訓(xùn)練參數(shù)的更新將導(dǎo)致后面層輸入數(shù)據(jù)分布的變化,進而上層的網(wǎng)絡(luò)需要不停地去適應(yīng)這些分布變化,這使得模型訓(xùn)練變得困難。假設(shè)某個神經(jīng)元輸入為x,權(quán)重為W,輸出y?=?f(Wx+b),激活函數(shù)f為Tanh函數(shù)(如圖3-14所示)。當(dāng)x在[-1,1]之間變化時,輸出隨著輸入變化,但是在此區(qū)間之外輸出幾乎沒什么變化,即無論輸入再怎么擴大,Tanh激活函數(shù)輸出值仍接近1,也就是說,輸出對比較大的輸入值不敏感了。

圖3-14Tanh激活函數(shù)

BN算子的具體運算主要分為以下4步:

(1)求每一個批次訓(xùn)練數(shù)據(jù)的均值μB,即

(3-5)

式中:xi為該批次的訓(xùn)練數(shù)據(jù);m為該批次包含的訓(xùn)練數(shù)據(jù)的個數(shù)。

(2)求每一個批次訓(xùn)練批數(shù)據(jù)的方差,即

(3-6)

(3)利用前兩步求得的均值和方差,對該批次訓(xùn)練數(shù)據(jù)做標(biāo)準(zhǔn)化,獲得標(biāo)準(zhǔn)化的輸入,即

(3-7)

式中:ε是為了避免除數(shù)為0所使用的微小正數(shù)。

(4)對標(biāo)準(zhǔn)化的輸入進行尺度變換和偏移,得到對應(yīng)層的輸出yi,即

(3-8)

式中:γ是尺度因子;β是平移因子。這一步是BN的精髓。由于標(biāo)準(zhǔn)化后的xi基本會被限制在正態(tài)分布下,因此網(wǎng)絡(luò)的表達能力下降。為解決該問題,我們引入兩個新的參數(shù):γ、β。γ和β是在訓(xùn)練時網(wǎng)絡(luò)自己學(xué)習(xí)得到的。

3.8Shortcut算子

Shortcut(“直連”或“捷徑”)是CNN模型發(fā)展中出現(xiàn)的一種非常有效的結(jié)構(gòu)。研究人員發(fā)現(xiàn),網(wǎng)絡(luò)的深度對CNN的效果影響非常大。理論上,網(wǎng)絡(luò)的層數(shù)越多,能夠提取到不同層次的特征越豐富,網(wǎng)絡(luò)學(xué)習(xí)生成的模型預(yù)測的準(zhǔn)確率就越高;但實際上,單純地增加網(wǎng)絡(luò)深度并不能提高網(wǎng)絡(luò)的效果,反而會造成“梯度彌散”或“梯度爆炸”,損害模型的效果。

Highway(高速)是較早將Shortcut的思想引入深度模型中的一種方法。最初的CNN模型只有相鄰兩層之間存在連接,如圖3-15所示,x、y是相鄰兩層,通過WH連接,多個這樣的層前后串接起來就形成了深度網(wǎng)絡(luò)。相鄰層之間的關(guān)系為

y?=?H(x,WH)(3-9)

式中:H表示網(wǎng)絡(luò)中的變換。

圖3-15最初CNN相鄰兩層之間的連接

為了解決深度網(wǎng)絡(luò)中梯度彌散和退化的問題,Highway在兩層之間增加了帶權(quán)的Shortcut。兩層之間的結(jié)構(gòu)如圖3-16所示。圖3-16Shortcut的一般結(jié)構(gòu)

x與y的關(guān)系為

y?=?H(x,WH)·T(x,WT)+x·C(x,WC)(3-10)

式中:T稱為“transformgate”(傳輸門);C稱為“carrygate”(搬運門)。輸入層x通過C的加權(quán)連接到輸出層y。這種連接方式的好處是,不管梯度怎么下降,總有C支路是直接累加上去的,它的梯度不會消失,從而緩解了深度網(wǎng)絡(luò)中的梯度發(fā)散問題。另外,如果某一層是冗余的,我們只需要讓該層學(xué)習(xí)到C支路為x,T支路為0,即輸入是x,經(jīng)過該冗余層后,輸出仍然為x。這樣當(dāng)網(wǎng)絡(luò)自行決定了哪些層為冗余層后,自然解決了退化問題。

當(dāng)然還有很多其他的利用Shortcut算子的網(wǎng)絡(luò)模型,典型的如ResNet,它是Highway網(wǎng)絡(luò)的一個特例。ResNet引入了殘差網(wǎng)絡(luò)結(jié)構(gòu),通過這種殘差網(wǎng)絡(luò)結(jié)構(gòu),可以把網(wǎng)絡(luò)層設(shè)計得更深(目前可以達到1000多層),而且最終的分類效果也非常好。殘差網(wǎng)絡(luò)的基本結(jié)構(gòu)如圖3-17所示。

圖3-17殘差網(wǎng)絡(luò)的基本結(jié)構(gòu)第4章FPGA基本介紹4.1FPGA概述4.2FPGA系列及型號選擇4.3FPGA性能衡量指標(biāo)

4.1FPGA概述

4.1.1可編程邏輯器件FPGA是可編程邏輯器件的一種。在數(shù)字電子系統(tǒng)領(lǐng)域,存在三種基本的器件類型:存儲器、微處理器和邏輯器件。

可編程邏輯器件包括PAL、GAL、PLD等,經(jīng)過不斷的發(fā)展,現(xiàn)已演變成兩種主要類型:FPGA和CPLD。在這兩類可編程邏輯器件中,F(xiàn)PGA基于查找表結(jié)構(gòu),其提供了最高的邏輯密度、最豐富的特性和最高的性能;而CPLD基于乘積項結(jié)構(gòu),提供的邏輯資源比FPGA少得多??梢钥闯觯現(xiàn)PGA具有其他可編程邏輯器件不具有的優(yōu)點。

4.1.2FPGA的特點

不同于其他可編程邏輯器件,F(xiàn)PGA具有以下獨特的優(yōu)點:

(1)高性能和實時性。

(2)高集成性。

(3)高可靠性和低成本。

(4)高靈活性和低功耗。

4.1.3FPGA的體系結(jié)構(gòu)

FPGA獨特的體系結(jié)構(gòu)使得它具有高性能、低能耗、可配置等特點。FPGA的結(jié)構(gòu)如圖4-1所示。

圖4-1FPGA的結(jié)構(gòu)

(1)?CLB。CLB是FPGA的基本邏輯單元,其內(nèi)部又可以分為組合邏輯和寄存器兩部分。組合邏輯電路實際上是一個多變量輸入的PROM陣列,可以實現(xiàn)多變量任意函數(shù);而寄存器電路則是由多個觸發(fā)器及可編程輸入、輸出和時鐘端組成的。在FPGA中,所有的邏輯功能都是在CLB中完成的。

(2)?IOB。IOB為芯片內(nèi)部邏輯和芯片外部的輸入端/輸出端提供接口,可編程為輸入、輸出和雙向I/O三種方式。

(3)?PI。FPGA依靠對PI的編程,將各個CLB和IOB有效地組合起來,實現(xiàn)系統(tǒng)的邏輯功能。

4.2FPGA系列及型號選擇

4.2.1FPGA生產(chǎn)廠家Xilinx和Altera公司生產(chǎn)的FPGA產(chǎn)品的區(qū)別如表4-1所示。

4.2.2FPGA系列

表4-2和表4-3為兩家公司所生產(chǎn)的FPGA子系列。

4.2.3基于應(yīng)用的FPGA型號選擇

這里總結(jié)了6類應(yīng)用中較為常用的FPGA型號,如表4-4所示。

4.3FPGA性能衡量指標(biāo)

衡量FPGA的性能,是進行FPGA實驗的關(guān)鍵之一。一般來說,F(xiàn)PGA芯片的性能指標(biāo)可以從說明文檔里查看。除此之外,F(xiàn)PGA的性能還可以從速率、帶寬、時延、時延帶寬積、往返時間和資源利用率等多個角度來衡量評估。

(1)速率:衡量速率的指標(biāo)包括吞吐量、CPI、MIPS、MFLOPS、GFLOPS和TFLOPS等。其中:

①吞吐量是指系統(tǒng)在單位時間內(nèi)處理請求的數(shù)量。

②CPI(ClockCyclePerInstruction)是執(zhí)行一條指令所需的時鐘周期數(shù)。

③MIPS(MillionInstructionPerSecond)是每秒執(zhí)行多少百萬條指令。

④MFLOPS(MegaFLoating-pointOperationPerSecond)是每秒執(zhí)行多少百萬次浮點運算。

⑤GFLOPS(GigaFLoating-pointOperationPerSecond)是每秒執(zhí)行多少十億次浮點運算。

⑥TFLOPS(TeraFLoating-pointOperationPerSecond)是每秒執(zhí)行多少萬億次浮點運算。

(2)帶寬(Bandwidth):單位時間內(nèi)從一端傳送到另一端的最大數(shù)據(jù)量。

(3)時延(Delay或Latency):數(shù)據(jù)從一端傳送到另一端所需的時間,有時也稱為延遲或遲延。時延由以下幾個不同的部分組成:

①發(fā)送時延:主機或路由器發(fā)送數(shù)據(jù)幀所需的時間。

②傳播時延:電磁波在信道中傳播一定的距離所需的時間。

③處理時延:主機或者路由器接收到分組后,對其進行處理所需的時間。

④排隊時延:分組在網(wǎng)絡(luò)傳輸時,進入路由器后要在輸入隊列中排隊等待處理,路由器確定轉(zhuǎn)發(fā)接口后,還要在輸出隊列中排隊等待轉(zhuǎn)發(fā),這些等待時間即為排隊時延。

(4)時延帶寬積(Bandwidth-DelayProduct):傳播時延?×?帶寬,表示一條鏈路上傳播的所有比特(以比特為單位)。

(5)往返時間(Round-TripTime,RTT):從發(fā)送端發(fā)送數(shù)據(jù)開始,到發(fā)送端收到來自接收端的確認(接收端收到數(shù)據(jù)后立即發(fā)送確認),總共經(jīng)歷的時延。

(6)資源利用率(ResourceUtilization):利用的資源占總FPGA資源的百分比。第5章FPGA神經(jīng)網(wǎng)絡(luò)開發(fā)基礎(chǔ)5.1FPGA開發(fā)簡介5.2FPGA的結(jié)構(gòu)特性與優(yōu)勢5.3FPGA深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)加速計算的開發(fā)過程5.4FPGA在深度學(xué)習(xí)方面的發(fā)展

5.1FPGA開發(fā)簡介可以使用硬件描述語言(Verilog、VHDL)或C/C++/OpenCL語言編寫程序并燒錄到FPGA上。通過這種方式對FPGA上的門電路以及存儲器之間的連線進行調(diào)整,從而修改它的功能。這種燒錄是可重復(fù)的,它給算法程序的設(shè)計、實現(xiàn)和優(yōu)化留出了更多的空間,解決了ASIC靈活性不足的問題。在算法需要不斷改進或者芯片需求量不多的情況下,F(xiàn)PGA大大地降低了從算法編程到芯片電路的調(diào)試成本,是實現(xiàn)半定制人工智能芯片的最佳選擇之一。

5.2FPGA的結(jié)構(gòu)特性與優(yōu)勢

1.原始計算能力Xilinx的研究表明,Ultrascale+TMXCVU13PFPGA(38.3INT8TOP/s)與目前最先進的NVidiaTeslaP40加速卡以基礎(chǔ)頻率運行(40INT8TOP/s)相比,具有幾乎相同的計算能力。片上存儲器對于減少深度學(xué)習(xí)應(yīng)用中的延遲是至關(guān)重要的,F(xiàn)PGA可以顯著提高計算能力。大量的片上高速緩存可以減少與外部存儲器訪問相關(guān)的內(nèi)存的瓶頸,以及高內(nèi)存帶寬設(shè)計的功耗和成本。

2.效率和功耗

FPGA以其功效而聞名。研究表明,XilinxVirtexUltrascale+在通用計算效率方面的性能幾乎是NVidiaTeslaV100的四倍。GPU耗電的主要原因是它們需要圍繞其計算資源的額外復(fù)雜性以促進軟件的可編程性。雖然NVidiaTeslaV100利用針對深度學(xué)習(xí)的Tensor操作設(shè)計的Tensor內(nèi)核提供了與XilinxFPGA相當(dāng)?shù)男剩且矡o法估計NVidia的Tensor內(nèi)核的設(shè)計是否能在快速發(fā)展的深度學(xué)習(xí)領(lǐng)域保持有效。

3.靈活性和易用性

GPU中的數(shù)據(jù)流由軟件定義,由GPU的復(fù)雜內(nèi)存層次結(jié)構(gòu)(如CPU的情況)指導(dǎo)。當(dāng)數(shù)據(jù)通過存儲器層次結(jié)構(gòu)時,與存儲器訪問和存儲器沖突相關(guān)的延遲和功率迅速增加。另一個重要的事實是GPU的架構(gòu),即單指令多線程(SingleInstructionMultipleThreads,SIMT),該功能允許GPU比CPU更節(jié)能。但是,很明顯,在接收大量GPU線程的情況下,只有部分工作負載可以有效地映射到大規(guī)模并行體系結(jié)構(gòu)中,如果在線程中找不到足夠的并行性,則會導(dǎo)致性能降低。FPGA可以提供更靈活的架構(gòu),這些架構(gòu)是DSP和BRAM(BlockRandomAccessMemory,塊隨機存取存儲器)模塊混合體的硬件可編程資源。

4.功能安全

GPU最初的設(shè)計是用于不需要安全的圖形和高性能計算系統(tǒng)中,但某些應(yīng)用程序(如高級駕駛輔助系統(tǒng),AdvancedDriverAssitanceSystems,ADAS)卻需要功能安全性。在這種情況下,GPU的設(shè)計應(yīng)滿足功能安全要求。對于GPU供應(yīng)商來說,這可能是一個耗時的挑戰(zhàn)。而FPGA已用于功能安全在其上起著非常重要的作用的行業(yè),如自動化、航空電子和國防。因此,F(xiàn)PGA的設(shè)計旨在滿足包括ADAS在內(nèi)的廣泛應(yīng)用的安全要求。

5.3FPGA深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)加速計算的開發(fā)過程

5.3.1神經(jīng)網(wǎng)絡(luò)模型計算量分析神經(jīng)網(wǎng)絡(luò)模型由多層神經(jīng)網(wǎng)絡(luò)層組成,其他每個神經(jīng)網(wǎng)絡(luò)層的基本結(jié)構(gòu)可參見公式(5-1)。根據(jù)公式我們可以看出,網(wǎng)絡(luò)模型中每一層的大量計算是上一層的輸出結(jié)果和其對應(yīng)的權(quán)重值這兩個矩陣的乘加運算。

Yi?=?Xi?×?Wi?+?Bi(5-1)式中:Yi

表示當(dāng)前層輸出;Xi?表示當(dāng)前層輸入;Wi表示當(dāng)前層權(quán)重;Bi表示當(dāng)前層偏置。

計算平臺系統(tǒng)有兩個主要指標(biāo):計算力與帶寬。其定義如下:

(1)計算力(也稱計算平臺的性能上限):一個計算平臺傾盡全力每秒所能完成的浮點運算數(shù),單位是FLOPS。

(2)帶寬(也稱計算平臺的帶寬上限):一個計算平臺傾盡全力每秒所能完成的內(nèi)存交換量,單位是B/s。

神經(jīng)網(wǎng)絡(luò)模型同樣有兩個主要指標(biāo):計算量與訪存量。其定義如下:

(1)計算量(也稱時間復(fù)雜度):輸入單個樣本(對于CNN而言就是一幅圖像),模型完成一次前向傳播過程所發(fā)生的浮點運算數(shù),單位是FLOPS。

(2)訪存量(也稱空間復(fù)雜度):輸入單個樣本,模型完成一次前向傳播過程所發(fā)生的內(nèi)存交換總量,單位是字節(jié)(B)。

在神經(jīng)網(wǎng)絡(luò)模型中,我們常用的網(wǎng)絡(luò)層有卷積層、POOL層、Plat層、激活層、全連接層等,為了更方便得出理論性能,這里只討論常用網(wǎng)絡(luò)層計算量的計算。

卷積層的計算量公式為

卷積層計算量?=?Pow(M,2)?×?Pow(K,2)?×?Cin?×?Cout

(5-2)

式中:M表示每個卷積核輸出特征圖的邊長;K表示每個卷積核的邊長;Cin

表示每個卷積核的通道數(shù),即輸入通道數(shù),也即上一層的輸出通道數(shù);Cout

表示本卷積層具有的卷積核個數(shù),也即輸出通道數(shù)。

全連接層的計算量公式為

全連接層計算量?=?H?×?W(5-3)

式中:H表示當(dāng)前層權(quán)重矩陣的行數(shù);W表示當(dāng)前層權(quán)重矩陣的列數(shù)。

對于常用的神經(jīng)網(wǎng)絡(luò)模型,這里以VGG16模型為例來說明。VGG16模型由13層卷積層與全連接層組成,其網(wǎng)絡(luò)模型如圖5-1所示。

圖5-1VGG16網(wǎng)絡(luò)模型

VGG16模型運行時,輸入一幅224?×?224的RGB圖像,經(jīng)過預(yù)處理后,得到(224,224,4)的特征數(shù)據(jù),再經(jīng)過卷積層后,特征數(shù)據(jù)尺寸越來越少,通道數(shù)越來越多,卷積層隨后平展開來,經(jīng)過全連接層,最后輸出1000種分類概率情況,通過每種分類的概率情況便可得知該圖像的分類。VGG16模型運行數(shù)據(jù)規(guī)模圖如圖5-2所示。圖5-2VGG16模型運行數(shù)據(jù)規(guī)模圖

以此類推,便可得到VGG16模型的計算量,如表5-1所示。

5.3.2神經(jīng)網(wǎng)絡(luò)模型訪問帶寬分析

神經(jīng)網(wǎng)絡(luò)模型帶寬,也就是模型的空間復(fù)雜度,嚴(yán)格來講包括三部分:輸入量、參數(shù)量、輸出量。

(1)輸入量:輸入特征圖的數(shù)據(jù)量的總和,其計算公式為

卷積層輸入量?=?Pow(I,2)?×?C(5-4)

全連接層輸入量?=?H(5-5)

式中:I為在卷積層時輸入特征圖的邊長;C為在卷積層時輸入特征圖的通道數(shù);H為在全連接層時當(dāng)前層輸入矩陣的行數(shù)。

(2)參數(shù)量:模型所有帶參數(shù)的層的權(quán)重參數(shù)總量(即模型體積),其計算公式為

卷積層參數(shù)量?=?Pow(K,2)?×?Cin?×?Cout(5-6)

全連接層參數(shù)量?=?H?×?W(5-7)

式中:K為在卷積層時每個卷積核的邊長;

Cin

為在卷積層時每個卷積核的通道數(shù),也即輸入通道數(shù);Cout

為在卷積層時本卷積層具有的卷積核個數(shù),也即輸出通道數(shù);H為在全連接層時當(dāng)前層權(quán)重矩陣的行數(shù);W為在全連接層時當(dāng)前層輸出矩陣的列數(shù)。

(3)輸出量:輸出特征圖的數(shù)據(jù)量的總和,其計算公式為

卷積層輸出量?=?Pow(O,2)?×Cout

(5-8)

全連接層輸出量?=?W?(5-9)

式中:O為在卷積層時輸出特征圖的邊長;Cout

為在卷積層時本卷積層具有的卷積核個數(shù),也即輸出通道數(shù);W為在全連接層時當(dāng)前層輸出矩陣的列數(shù)。

便可得到VGG16模型的帶寬量,如表5-2所示。

5.3.3加速硬件芯片選型

根據(jù)產(chǎn)品需求對相關(guān)功能模塊進行器件選型時,應(yīng)該遵循以下原則:

(1)開源性原則:盡量選擇有開源IP的芯片。

(2)普遍性原則:元器件要被廣泛使用和驗證過,盡量少用冷偏芯片,減少開發(fā)風(fēng)險。

(3)高性價比原則:在功能、性能、使用率都相近的情況下,盡量選擇價格低的器件,減少成本。

(4)采購方便原則:盡量選擇容易買到、供貨周期短的元器件。

(5)持續(xù)發(fā)展原則:盡量選擇在可預(yù)見的時間內(nèi),不會停產(chǎn)的、生命周期長的元器件。

(6)可替代原則:盡量選擇有較多可替代型號的元器件。

(7)向上兼容原則:盡量選擇被大量使用或者在市場上應(yīng)用較為成熟的器件,減少開發(fā)風(fēng)險。

(8)資源節(jié)約原則:器件資源選擇以滿足設(shè)計需求為原則,以節(jié)約成本。

(9)歸一化原則:盡量精簡器件種類,方便產(chǎn)品化后的批量生產(chǎn)和器件采購,減輕供應(yīng)鏈壓力。

一般情況下,加速硬件產(chǎn)品的選型一般涉及FPGA、DDR、CPLD、EthernetPhy、Flash、EEPROM、時鐘IC、電源芯片等主要器件。

1.?FPGA芯片選型

FPGA芯片選型應(yīng)該從器件資源、規(guī)模大小、速度、引腳、IP的可用性、器件的生命周期和功耗等方面來評估。

(1)器件資源:評估是否需要高速接口,需要多少個通道,每個通道的最高收發(fā)速度為多少,是否需要DSP模塊和RAM模塊。

(2)規(guī)模大?。喊压δ苣K、IP核以及調(diào)試過程中耗費的資源評估進去,再留出20%~30%的余量即可。

(3)速度:分析功能需求和平衡資源后,估算速度等級要求,然后留出一定的余量即可。

(4)引腳:設(shè)計時需要評估I/O引腳數(shù)量、接口類型、標(biāo)準(zhǔn)和驅(qū)動強度以及外部接口的電氣標(biāo)準(zhǔn),以此來選擇適合的FPGA封裝和類型。

(5)?IP的可用性:選型時應(yīng)注意芯片廠家的IP核是否足夠多以覆蓋設(shè)計,是否能免費提供。因為IP可以大大縮短開發(fā)周期,降低開發(fā)成本。

(6)器件的生命周期:選型時應(yīng)注意芯片的生命周期,防止選到將要停產(chǎn)或者已停產(chǎn)的芯片。

(7)功耗:根據(jù)設(shè)計的功能需求,確定FPGA需要使用的電源。

2.內(nèi)存芯片選型

內(nèi)存芯片選型需要根據(jù)系統(tǒng)的設(shè)計需求,以及確認FPGA主芯片能支持的類型和參數(shù),從SDRAM種類(例如DDR4SDRAM)、內(nèi)存容量、數(shù)據(jù)位寬、內(nèi)存速率等方面進行選擇。

3.CPLD芯片選型

CPLD芯片可以實現(xiàn)對系統(tǒng)和單元的管理,主要功能包括實現(xiàn)對FPGA的配置、電源管理、溫度監(jiān)控、鎖相環(huán)配置、單板信息和日志管理等。

4.時鐘芯片選型

時鐘芯片應(yīng)該根據(jù)系統(tǒng)需求和系統(tǒng)時鐘拓撲,選擇滿足功能需求的、低噪聲的芯片。

5.電源芯片選型

電源芯片選型也應(yīng)根據(jù)系統(tǒng)的電源分配網(wǎng)絡(luò)和功能器件的規(guī)格需求,確認電源設(shè)計的電源類型、電壓、電流、上下電時序等設(shè)計參數(shù),進而選擇適合本系統(tǒng)的電源模塊和具體型號。

5.3.4加速硬件系統(tǒng)設(shè)計

SC-OPM產(chǎn)品的設(shè)計規(guī)格如表5-3所示。

SC-OPM加速卡的系統(tǒng)框圖如圖5-3所示。該系統(tǒng)主要包括FPGA邏輯模塊、3個DDR4內(nèi)存模塊通道、1個PCIE3.08X接口、2個40?GB高速互連接口,以及存儲、時鐘、電源等模塊。

圖5-3SC-OPM加速卡的系統(tǒng)框圖

5.4FPGA在深度學(xué)習(xí)方面的發(fā)展

1.計算密集型任務(wù)計算密集型任務(wù)包含矩陣計算、圖像處理、機器學(xué)習(xí)等內(nèi)容。一般將計算密集型任務(wù)通過CPU下發(fā)到計算板卡(GPU、FPGA等)中。IntelStratixVFPGA的整數(shù)乘法運算性能與20核的CPU基本相當(dāng);浮點乘法運算性能與8核的CPU基本相當(dāng),但比GPU低一個數(shù)量級。新一代的FPGAIntelStratix10將配備更多的乘法器和硬件浮點運算部件,從而在理論上可達到與現(xiàn)在的頂級GPU計算卡旗鼓相當(dāng)?shù)挠嬎隳芰Α?/p>

2.通信密集型任務(wù)

通信密集型任務(wù)指的是需要從外部不斷交換數(shù)據(jù)的計算任務(wù)。傳統(tǒng)的通信方式是CPU中的數(shù)據(jù)包需要經(jīng)過網(wǎng)卡進行接收,然后下發(fā)到GPU上進行計算,得到計算結(jié)果后通過網(wǎng)卡發(fā)送出去。這就凸顯了FPGA任意的I/O連接的優(yōu)勢。FPGA的收發(fā)器可以直接連接網(wǎng)線,以網(wǎng)線的速度進行數(shù)據(jù)處理,而不必經(jīng)過多級的數(shù)據(jù)轉(zhuǎn)發(fā)。

以深度學(xué)習(xí)的分布式集群為例,其中包含著大量參數(shù)不斷流動,并且也有大量的數(shù)據(jù)進行傳遞。傳統(tǒng)的分布式訓(xùn)練都需要CPU與GPU的配合,使設(shè)備間的數(shù)據(jù)得以交換。FPGA的使用則給分布式集群帶來了不同設(shè)備間計算單元直接相連的優(yōu)勢,而無需CPU進行中間的調(diào)度以及協(xié)助。

現(xiàn)在國際上的主流廠家有Xilinx、Intel、Lattice和Microsemi。FPGA被廣泛運用在單設(shè)備電動控制器、視頻傳輸、無線技術(shù)和高性能計算等領(lǐng)域。FPGA在深度學(xué)習(xí)中的研究大致可以分為四個部分:對特定的應(yīng)用程序進行加速,對特定的算法進行加速,對算法的公共特性進行加速,以及帶有硬件模板的通用加速器框架。對于前兩種情況,現(xiàn)有的設(shè)計較為普遍,難度相對較?。缓髢煞N仍處于探索階段,雖未被普及,但具有巨大的發(fā)展?jié)摿?。?章FPGA神經(jīng)網(wǎng)絡(luò)計算的RTL級開發(fā)6.1搭建開發(fā)環(huán)境6.2RTL級開發(fā)的優(yōu)勢與劣勢6.3RTL級開發(fā)的基本流程6.4RTL級神經(jīng)網(wǎng)絡(luò)加速設(shè)計流程6.5RTL級神經(jīng)網(wǎng)絡(luò)加速仿真6.6RTL級神經(jīng)網(wǎng)絡(luò)加速時序優(yōu)化

6.1搭建開發(fā)環(huán)境

6.1.1開發(fā)環(huán)境的選擇FPGA開發(fā)首先需要明確開發(fā)環(huán)境,合適的開發(fā)環(huán)境不僅可以提高開發(fā)效率,在后端布局布線環(huán)節(jié)還可以提高項目實現(xiàn)的性能和質(zhì)量。FPGA神經(jīng)網(wǎng)絡(luò)算法的RTL級開發(fā)需要根據(jù)所選的FPGA芯片來確定合適的開發(fā)環(huán)境。

表6-1的綜合布局布線集成工具Quartus軟件是Intel官方提供的FPGA開發(fā)軟件。如果開發(fā)芯片是XilinxFPGA,則綜合布局布線集成工具可以選擇ISE(IntegratedSoftwareEnvironment,集成軟件環(huán)境)或者Vivado。需要注意的是,無論是Quartus還是Vivado等工具都有眾多子版本,開發(fā)者需要根據(jù)自己所選芯片的具體型號以及不同的開發(fā)方式,到官方網(wǎng)站選擇合適的版本。

6.1.2開發(fā)環(huán)境的搭建

(1)選擇版本。

根據(jù)項目使用的FPGA型號,到Intel官網(wǎng)/?edition=standard下載合適的軟件版本,如圖6-1所示。

圖6-1軟件下載

(2)安裝軟件。

EDA(ElectronicDesignAutomatic,電子設(shè)計自動化)工具的安裝和一般的軟件安裝相同,按照安裝向?qū)е鸩讲僮骷纯伞P枰⒁獾氖?,安裝路徑盡量用英文且最好不要出現(xiàn)空格或特殊字符。EDA工具通常是集成開發(fā)環(huán)境,所需的磁盤空間較大,如果磁盤空間不足,安裝時可根據(jù)需要裁剪定制軟件來節(jié)省磁盤空間,如圖6-2所示。

圖6-2安裝軟件

(3)安裝軟件授權(quán)。

EDA工具通常需要授權(quán)License才可以完全使用,如圖6-3所示。圖6-3安裝軟件授權(quán)

6.2RTL級開發(fā)的優(yōu)勢與劣勢理解了RTL級開發(fā)的層次定位,就很容易理解RTL級開發(fā)FPGA的優(yōu)勢:(1)?RTL級開發(fā)可以更清晰準(zhǔn)確地描述電路結(jié)構(gòu),提高設(shè)計穩(wěn)定性;(2)實現(xiàn)預(yù)定義邏輯功能所需的FPGA芯片內(nèi)部資源由設(shè)計者控制,通常相對于更高層級的開發(fā)方式更節(jié)省資源;(3)設(shè)計者可以在RTL級開發(fā)過程中,提前考慮芯片內(nèi)部結(jié)構(gòu)和描述電路的匹配關(guān)系,更有利于后端布局布線,提高整體設(shè)計性能。

當(dāng)然,RTL級開發(fā)也有劣勢,且其劣勢也很突出:

(1)開發(fā)難度大,不僅要求開發(fā)者自身的技能水平高、開發(fā)經(jīng)驗豐富,而且要求開發(fā)者深刻理解所開發(fā)的FPGA芯片內(nèi)部資源結(jié)構(gòu)的細節(jié),并做到開發(fā)的電路和FPGA芯片資源完美匹配;

(2)開發(fā)效率低、周期長,RTL級項目的開發(fā)通常需要數(shù)月甚至以年為單位的開發(fā)周期;

(3)修改迭代周期長、成本高,RTL級開發(fā)描述的是電路的數(shù)據(jù)流,修改功能需求就相當(dāng)于修改電路數(shù)據(jù)流結(jié)構(gòu),修改所需投入的時間和人力成本都相對較高。

6.3RTL級開發(fā)的基本流程

FPGA項目RTL級開發(fā)通常都是系統(tǒng)級工程,環(huán)節(jié)多且過程復(fù)雜,從項目需求理解、方案評估、芯片理解、詳細方案設(shè)計、RTL級代碼設(shè)計、仿真、綜合、布局布線、時序分析與優(yōu)化、測試,到最后驗收,一整套流程環(huán)環(huán)相扣,相互影響、相互依賴,每一個環(huán)節(jié)都需要高質(zhì)量完成才能確保整個項目到目標(biāo),如圖6-4所示。圖6-4RTL級FPGA開發(fā)流程示例

6.3.1需求理解

在FPGA項目開始之前,必須充分理解項目的詳細功能需求以及各功能的性能指標(biāo)。在項目需求理解階段,需要根據(jù)項目功能需求和性能指標(biāo),分析項目所需的FPGA資源數(shù)量、設(shè)計復(fù)雜度、通信帶寬、帶寬計算等關(guān)鍵技術(shù)瓶頸;同時,需要確認項目的時間要求、驗收標(biāo)準(zhǔn)、驗收環(huán)境等,并給出詳細的需求理解報告。

6.3.2方案評估

根據(jù)需求理解報告,對需求理解報告中各因素進行權(quán)衡,選擇合適的器件和設(shè)計方案,并給出方案評估報告。通常,F(xiàn)PGA設(shè)計方案評估報告包含F(xiàn)PGA芯片選型、FPGA開發(fā)環(huán)境選擇、FPGA整體功能結(jié)構(gòu)、關(guān)鍵技術(shù)瓶頸解決方法、FPGA系統(tǒng)數(shù)據(jù)流、FPGA系統(tǒng)控制流、FPGA時鐘系統(tǒng)結(jié)構(gòu)、FPGA復(fù)位系統(tǒng)結(jié)構(gòu)等信息。

根據(jù)需求理解報告,對需求理解報告中各因素進行權(quán)衡,選擇合適的器件和設(shè)計方案,并給出方案評估報告。通常,F(xiàn)PGA設(shè)計方案評估報告包含F(xiàn)PGA芯片選型、FPGA開發(fā)環(huán)境選擇、FPGA整體功能結(jié)構(gòu)、關(guān)鍵技術(shù)瓶頸解決方法、FPGA系統(tǒng)數(shù)據(jù)流、FPGA系統(tǒng)控制流、FPGA時鐘系統(tǒng)結(jié)構(gòu)、FPGA復(fù)位系統(tǒng)結(jié)構(gòu)等信息。其中,F(xiàn)PGA芯片選型需要考慮設(shè)計方案所需的FPGA內(nèi)部資源數(shù)量、FPGA芯片成本、技術(shù)熟悉度等諸多因素。FPGA芯片內(nèi)部資源又包括I/O資源、時鐘資源、邏輯資源、RAM資源、DSP資源、高速接口資源、硬核IP等。選型通常需要平衡各種資源需求,并優(yōu)先考慮關(guān)鍵資源瓶頸。

例如,在神經(jīng)網(wǎng)絡(luò)計算加速設(shè)計中,通常需要優(yōu)先考慮DSP數(shù)量、BRAM數(shù)量以及所支持的外部存儲最大帶寬(與I/O數(shù)量、I/O速度、外部存儲控制器IP個數(shù)有關(guān))。圖6-5為FPGA引腳資源評估示例。

圖6-5FPGA引腳資源評估示例

6.3.3芯片理解

在方案評估完成并通過審核后,通常并不推薦直接進行FPGA的詳細方案設(shè)計。在此之前,我們建議設(shè)計者對方案評估報告中所選擇的FPGA芯片進行充分的學(xué)習(xí)和理解,這一環(huán)節(jié)很容易被忽略,然而這一環(huán)節(jié)卻極其重要。一個好的FPGA設(shè)計一定是建立在對FPGA充分理解的基礎(chǔ)上的,只有對FPGA內(nèi)部每個資源有了充分的理解,才能正確地使用FPGA,才能使設(shè)計的電路完美地和FPGA芯片相匹配,也才能發(fā)揮FPGA最佳的性能和工作狀態(tài)。在此環(huán)節(jié),需要詳細了解FPGA內(nèi)部的基本邏輯單元、I/O資源、時鐘資源、DSP資源、RAM資源、硬核IP等各種資源的詳細內(nèi)部結(jié)構(gòu)和它們的使用方法,如圖6-6所示。圖6-6FPGA芯片內(nèi)部資源組成

首先需要了解所選FPGA內(nèi)部的基本邏輯單元結(jié)構(gòu),了解芯片內(nèi)部有多少個ALM,它們可以工作在哪幾種模式下,每個ALM內(nèi)有幾個輸入查找表、幾個觸發(fā)器、多少加法器、多少進位鏈和布線資源,以及布線資源可以走的路徑有哪些。圖6-7為IntelArria10FPGA內(nèi)一個基本邏輯單元結(jié)構(gòu)。圖6-7IntelArria10FPGA內(nèi)一個基本邏輯單元結(jié)構(gòu)

圖6-8為IntelArria10FPGA芯片內(nèi)的一個IOE(In-OutElement,輸入/輸出單元)內(nèi)部結(jié)構(gòu),其中既有輸入/輸出和三態(tài)控制用寄存器,又有I/O延遲電路,同時還有三態(tài)門控制器和上下拉電路,以及大量的布線資源。該電路可以在不同的設(shè)計場景下選擇不同的資源滿足項目的設(shè)計需求。

圖6-8IntelArria10FPGA芯片內(nèi)一個IOE內(nèi)部結(jié)構(gòu)示例

圖6-9為IntelArria10FPGA芯片內(nèi)的一個DSP內(nèi)部結(jié)構(gòu),其中含有2個乘法器、4個加法器、四組寄存器以及相應(yīng)的布線資源,在不同的設(shè)計場景下可以選擇不同的資源滿足項目的設(shè)計需求。

圖6-9IntelArria10FPGA芯片內(nèi)一個DSP內(nèi)部結(jié)構(gòu)示例

6.3.4詳細方案設(shè)計

(1)整體功能結(jié)構(gòu)設(shè)計是設(shè)計方案的概覽,是自頂向下設(shè)計中的頂層設(shè)計。

圖6-10為某項目的整體功能結(jié)構(gòu)圖,從圖中可以看出,該項目整體結(jié)構(gòu)包含一個EDK(EmbeddedDevelopmentKit,嵌入式開發(fā)套件)軟核、DDR3(一種計算機內(nèi)存規(guī)格)控制器、VbyOne(專門面向圖像傳輸開發(fā)的數(shù)字接口標(biāo)準(zhǔn))接口控制器、HDMI(HighDefinitionMultimediaInterface,高密度多芯片互連接口)控制器等模塊,同時整體結(jié)構(gòu)圖也描述了視頻數(shù)據(jù)流和控制流。圖6-10某項目整體功能結(jié)構(gòu)圖

(2)RTL階層設(shè)計是模塊化分層設(shè)計的思想體現(xiàn)。

圖6-11是某項目RTL階層設(shè)計圖,其中FPGA_TOP為該項目的頂層設(shè)計,其他模塊為項目各功能子模塊設(shè)計以及它們之間的階層歸屬關(guān)系。

圖6-11某項目RTL階層設(shè)計圖

(3)時鐘系統(tǒng)設(shè)計是FPGA方案設(shè)計的重要環(huán)節(jié)。

圖6-12為某項目的時鐘系統(tǒng)設(shè)計圖,該項目中各功能模塊設(shè)計所需的時鐘不同,不同的用戶時鐘分別接到了各自驅(qū)動的模塊端口上。

圖6-12某項目時鐘系統(tǒng)設(shè)計圖

(4)復(fù)位系統(tǒng)設(shè)計與時鐘系統(tǒng)設(shè)計同等重要,它需要將FPGA芯片內(nèi)的所有復(fù)位信號規(guī)劃清楚,并明確每個復(fù)位的輸入源、生成復(fù)位信號的拓撲結(jié)構(gòu)以及每個復(fù)位信號所驅(qū)動的模塊。FPGA復(fù)位系統(tǒng)的好壞關(guān)系到FPGA設(shè)計的穩(wěn)定性、適應(yīng)性和邏輯自恢復(fù)能力等重要指標(biāo)。

圖6-13為某項目的復(fù)位系統(tǒng)設(shè)計圖,該項目中各功能模塊設(shè)計所需復(fù)位時間和解除的復(fù)位時間不同,不同的復(fù)位信號分別接到了各自控制的模塊端口上。

圖6-13某項目復(fù)位系統(tǒng)設(shè)計圖

(5)接口定義及時序設(shè)計。詳細方案設(shè)計需要將各模塊之間的接口定義清楚,為下面的RTL輸入階段提供標(biāo)準(zhǔn),也為不同的設(shè)計者協(xié)同工作提供支撐。

圖6-14為某項目中SPI(SerialPeripheralInterface,串行外設(shè)接口)的時序設(shè)計圖,其中清楚地定義了SPI接口的信號名和各信號的時序關(guān)系。

圖6-14某項目中SPI時序設(shè)計示例

(6)各子模塊設(shè)計。詳細方案設(shè)計需要將子模塊內(nèi)部的功能實現(xiàn)電路描述清楚,為下面的RTL輸入階段提供標(biāo)準(zhǔn),也為不同的設(shè)計者協(xié)同工作提供支撐。

圖6-15為某項目中SPI子模塊設(shè)計,圖中清晰地描述了該子模塊的接口信號名,以及實現(xiàn)該SPI的電路結(jié)構(gòu)。圖6-15子模塊設(shè)計示例

(7)寄存器系統(tǒng)設(shè)計。

圖6-16是某項目的寄存器地址映射圖,分為系統(tǒng)寄存器、SPI控制寄存器、數(shù)據(jù)上傳管理寄存器、數(shù)據(jù)下載管理寄存器,并詳細列出了各寄存器名及其地址信息。

圖6-16某項目寄存器地址映射圖

圖6-17是某項目的控制寄存器詳細說明圖,其中包含寄存器的地址(0x0100)、寄存器功能(DMA控制寄存器)、寄存器每比特的含義以及寄存器的初始值(0x00000000)。圖6-17某項目控制寄存器詳細說明圖

(8)FPGA與軟件交互流程設(shè)計。

圖6-18是某項目軟件系統(tǒng)啟動PCIEDMA的軟件和FPGA交互流程圖。從圖中可以看出,計算機若要通過DMA將數(shù)據(jù)寫到FPGA,軟件需要先配置FPGA寄存器、FPGA命令緩存和數(shù)據(jù)緩存,然后配置FPGA發(fā)起DMA傳輸,DMA結(jié)束后主動發(fā)出中斷告知上位機動作結(jié)束。

圖6-18FPGA與軟件交互流程設(shè)計示例

6.3.5RTL級HDL設(shè)計輸入

RTL級設(shè)計輸入是將詳細方案書中所設(shè)計的系統(tǒng)或電路以RTL級描述形式表示出來,并輸入給EDA工具的過程,通常使用VHDL或Verilog語言來描述所設(shè)計的電路。需要注意的是,RTL級描述的目標(biāo)對象是可綜合、可映射為電路的結(jié)構(gòu),并且可直接用綜合工具生成網(wǎng)表文件的電路,并且必須可以直接映射布局布線到FPGA芯片內(nèi)。RTL設(shè)計者在描述電路的過程中需要時刻思考兩件事,一是描述的電路是否符合詳細設(shè)計方案書的功能要求,是否是最佳電路結(jié)構(gòu);二是描述的電路在FPGA芯片內(nèi)部用什么資源實現(xiàn),是否是最佳實現(xiàn)方式。

以下為加速云某項目中寄存器寫控制模塊的部分代碼示例。

6.3.6功能仿真

功能仿真也稱為前仿真,是在編譯之前對用戶所設(shè)計的電路進行邏輯功能驗證,此時的仿真沒有延遲信息,僅對初步的功能進行檢測。

FPGA的仿真通常分為如下五步來完成:

(1)分析、理解FPGA項目需求和FPGA設(shè)計方案。

(2)設(shè)計FPGA仿真方案書。通常,F(xiàn)PGA仿真方案書包含仿真環(huán)境選擇、仿真Case設(shè)計和仿真系統(tǒng)結(jié)構(gòu)設(shè)計(激勵生成系統(tǒng)、結(jié)果校驗系統(tǒng)、報告生成系統(tǒng)等)。

(3)編寫仿真系統(tǒng)結(jié)構(gòu)代碼和仿真Case代碼。

(4)按仿真Case清單逐條仿真(大規(guī)模設(shè)計中,此步驟通常用批處理自動完成)。

(5)提交仿真報告書(含仿真Case正確性報告和仿真覆蓋率報告)。

圖6-19為加速云自動化仿真系統(tǒng)的仿真平臺環(huán)境和仿真界面,其仿真過程通常通過批處理的形式自動進行,并通過log文件報告仿真結(jié)果。如果仿真發(fā)現(xiàn)設(shè)計錯誤,log中會詳細報告錯誤代碼、錯誤類型、錯誤詳細波形文件,供設(shè)計者查閱參考。

圖6-19自動化仿真平臺示例

圖6-20為加速云自動化仿真系統(tǒng)的仿真平臺給出的某設(shè)計模塊的仿真覆蓋率報告。

圖6-20仿真覆蓋率報告示例

6.3.7綜合優(yōu)化

綜合就是將較高級抽象層次的描述轉(zhuǎn)化成較低層次的描述。綜合優(yōu)化根據(jù)目標(biāo)與要求優(yōu)化所生成的邏輯連接,使層次設(shè)計平面化,供FPGA布局布線軟件進行實現(xiàn)。就目前的層次來看,綜合優(yōu)化(Synthesis)是將輸入編譯成由與門、或門、非門、RAM、觸發(fā)器等基本邏輯單元組成的邏輯連接網(wǎng)表,并非真實的門級電路。真實、具體的門級電路需要利用FPGA制造商的布局布線功能,根據(jù)綜合后生成的標(biāo)準(zhǔn)門級結(jié)構(gòu)網(wǎng)表來產(chǎn)生。

6.3.8布局布線與實現(xiàn)

布局布線可理解為利用實現(xiàn)工具把邏輯映射到目標(biāo)器件結(jié)構(gòu)的資源中,同時決定邏輯的最佳布局,選擇邏輯與輸入/輸出功能鏈接的布線通道進行連線,并產(chǎn)生相應(yīng)的文件(如配置文件與相關(guān)報告);實現(xiàn)是將綜合生成的邏輯網(wǎng)表配置到具體的FPGA芯片上,而布局布線是其中最重要的過程。布局將邏輯網(wǎng)表中的硬件原語和底層單元合理地配置到芯片內(nèi)部的固有硬件結(jié)構(gòu)上,并且在速度最優(yōu)和面積最優(yōu)之間做出選擇;布線根據(jù)布局的拓撲結(jié)構(gòu),利用芯片內(nèi)部的各種連線資源,合理正確地連接各個元件。

6.3.9靜態(tài)時序分析與優(yōu)化

靜態(tài)時序分析是指將布局布線的電路在不模擬的條件下,通過計算電路的延時來檢測有無時序違規(guī)(即不滿足時序約束條件或器件固有的時序規(guī)則,如建立時間、保持時間等)。

時序優(yōu)化是指通過合理約束、修改設(shè)計(插入寄存器、并行結(jié)構(gòu)、邏輯展開、寄存器平衡、路徑重組)、手工修改布局布線等方式反復(fù)優(yōu)化綜合布局布線,使得時序逐漸收斂,從而滿足設(shè)計要求的過程。

6.3.10芯片編程與調(diào)試

芯片編程與調(diào)試是FPGA設(shè)計的最后一步。芯片編程是指將設(shè)計生成的數(shù)據(jù)文件(BitstreamGeneration,產(chǎn)生位數(shù)據(jù)流文件)燒寫到FPGA芯片中。FPGA芯片編程需要滿足一定的條件,如編程電壓、編程時序和編程算法等;調(diào)試是指實機驗證設(shè)計功能的正確性和性能指標(biāo)。

6.4RTL級神經(jīng)網(wǎng)絡(luò)加速設(shè)計流程

在確認了用FPGA加速的算法結(jié)構(gòu)、計算精度和加速效果后,就可以按FPGA設(shè)計開發(fā)流程進行加速設(shè)計了。FPGA的設(shè)計流程通常包括設(shè)計需求理解、方案評估、芯片理解、詳細方案設(shè)計、RTL設(shè)計輸入、仿真、綜合、

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論