版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)傳統(tǒng)FPGA開(kāi)發(fā)方式講解簡(jiǎn)介
對(duì)于一個(gè)軟件開(kāi)發(fā)人員,可能聽(tīng)說(shuō)過(guò)(FPGA),甚至在大學(xué)課程設(shè)計(jì)中,可能拿FPGA做過(guò)計(jì)算機(jī)體系架構(gòu)相關(guān)的驗(yàn)證,但是對(duì)于它的第一印象可能覺(jué)得這是(硬件)(工程師)干的事兒。
目前,隨著(人工智能)的興起,(GPU)借助(深度學(xué)習(xí)),走上了歷史的舞臺(tái),并且正如火如荼的跑者各種各樣的業(yè)務(wù),從tr(ai)ning到inference都有它的身影。FPGA也借著這股浪潮,慢慢地走向數(shù)據(jù)中心,發(fā)揮著它的優(yōu)勢(shì)。所以接下來(lái)就講講FPGA如何能讓?zhuān)ǔ绦騿T)們更好友好的開(kāi)發(fā),而不需要寫(xiě)那些煩人的RTL代碼,不需要使用VCS,Model(sim)這樣的(仿真)軟件,就能輕輕松松實(shí)現(xiàn)unit(te)st。
實(shí)現(xiàn)這一(編程)思想的轉(zhuǎn)變,是因?yàn)镕PGA借助OpenCL實(shí)現(xiàn)了編程,程序員只需要通過(guò)C/(C++)添加適當(dāng)?shù)膒ragma就能實(shí)現(xiàn)FPGA編程。為了讓您用OpenCL實(shí)現(xiàn)的FPGA應(yīng)用能夠有更高的性能,您需要熟悉如下介紹的硬件。另外,將會(huì)介紹編譯優(yōu)化選項(xiàng),有助于將您的OpenCL應(yīng)用更好的實(shí)現(xiàn)RTL的轉(zhuǎn)換和映射,并部署到FPGA上執(zhí)行。
FPGA概覽
FPGA是高規(guī)格的(集成電路),可以實(shí)現(xiàn)通過(guò)不斷的配置和拼接,達(dá)到無(wú)限精度的函數(shù)功能,因?yàn)樗幌瘢–PU)或者GPU那樣,基本數(shù)據(jù)類(lèi)型的位寬都是固定的,相反FPGA能夠做的非常靈活。在使用FPGA的過(guò)程中,特別適合一些low-level的操作,比如像bitmasking、shif(ti)ng、(ad)dition這樣的操作都可以非常容易的實(shí)現(xiàn)。
為了達(dá)到并行化計(jì)算,F(xiàn)PGA內(nèi)部包含了查找表(LUTs),(寄存器)(register),片上存儲(chǔ)(on-chipmem(or)y)以及算術(shù)運(yùn)算硬核(比如(數(shù)字信號(hào))(處理器)((DSP))塊)。這些FPGA內(nèi)部的模塊通過(guò)(網(wǎng)絡(luò))連接在一起,通過(guò)編程的手段,可以對(duì)連接進(jìn)行配置,從而實(shí)現(xiàn)特定的邏輯功能。這種網(wǎng)絡(luò)連接可重配的特性為FPGA提供了高層次可編程的能力。(FPGA的可編程性就體現(xiàn)在改變各個(gè)模塊和邏輯資源之間的連接方式)
舉個(gè)例子,查找表(LUTs)體現(xiàn)的FPGA可編程能力,對(duì)于程序猿來(lái)說(shuō),可以等價(jià)理解為一個(gè)存儲(chǔ)器((RAM))。對(duì)于3-bits輸入的LUT可以等價(jià)理解為一個(gè)擁有3位地址線(xiàn)并且8個(gè)1-bit存儲(chǔ)單元的存儲(chǔ)器(一個(gè)8長(zhǎng)度的數(shù)組,數(shù)組內(nèi)每個(gè)元素是1bit)。那么當(dāng)需要實(shí)現(xiàn)3-bits數(shù)字按位與操作的時(shí)候,8長(zhǎng)度數(shù)組存的是3-bits輸入數(shù)字的按位與結(jié)果,一共是8種可能性。當(dāng)需要實(shí)現(xiàn)3-bits按位異或的時(shí)候,8長(zhǎng)度數(shù)組存的是3-bits輸入數(shù)字的按位異或結(jié)果,一共也是8種可能性。這樣,在一個(gè)(時(shí)鐘)周期內(nèi),3-bits的按位運(yùn)算就能夠獲取到,并且實(shí)現(xiàn)不同功能的按位運(yùn)算,完全是可編程的(等價(jià)于修改RAM內(nèi)的數(shù)值)。
3-bits輸入LUT實(shí)現(xiàn)按位與(bit-wiseAND)示例:
注:3-bits輸入LUT查找表
我們看到的三輸入的按位與操作,如下所示,在FPGA內(nèi)部,可通過(guò)LUT實(shí)現(xiàn)。
如上展示了3輸入,1輸出的LUT實(shí)現(xiàn)。當(dāng)將LUT并聯(lián),串聯(lián)等方式結(jié)合起來(lái)后就可以實(shí)現(xiàn)更加復(fù)雜的邏輯運(yùn)算了。
傳統(tǒng)FPGA開(kāi)發(fā)
傳統(tǒng)FPGA與軟件開(kāi)發(fā)對(duì)比
對(duì)于傳統(tǒng)的FPGA開(kāi)發(fā)與軟件開(kāi)發(fā),工具鏈可以通過(guò)下表簡(jiǎn)單對(duì)比:
注:傳統(tǒng)FPGA與軟件開(kāi)發(fā)對(duì)比表
重點(diǎn)介紹一下,編譯階段的Synthesis(綜合),這部分與軟件開(kāi)發(fā)的編譯有較大的不同。一般的處理器CPU、GPU等,都是已經(jīng)生產(chǎn)出來(lái)的(ASIC),有各自的指令集可以使用。但是對(duì)于FPGA,一切都是空白,有的只是零部件,什么都沒(méi)有,但是可以自己創(chuàng)造任何結(jié)構(gòu)形式的電路,自由度非常的高。這種自由度是FPGA的優(yōu)勢(shì),也是開(kāi)發(fā)過(guò)程中的劣勢(shì)。
傳統(tǒng)的FPGA開(kāi)發(fā)就像10歲時(shí)候的(Linux),想吃一個(gè)蛋糕,需要自己從原材料開(kāi)始加工。FPGA正是這種狀態(tài),想要實(shí)現(xiàn)一個(gè)(算法),需要寫(xiě)RTL,需要設(shè)計(jì)狀態(tài)機(jī),需要仿真正確性。
傳統(tǒng)FPGA開(kāi)發(fā)方式
復(fù)雜系統(tǒng),需要使用有限狀態(tài)機(jī)(FSM),一般就需要設(shè)計(jì)下圖包含的三部分邏輯:組合電路,時(shí)序電路,輸出邏輯。通過(guò)組合邏輯獲取下一個(gè)狀態(tài)是什么,時(shí)序邏輯用于存儲(chǔ)當(dāng)前狀態(tài),輸出邏輯混合組合、時(shí)序電路,得到最終輸出結(jié)果。
然后,針對(duì)具體算法,設(shè)計(jì)邏輯在狀態(tài)機(jī)中的流轉(zhuǎn)過(guò)程:
實(shí)現(xiàn)的RTL是這樣的:
modulefsm_using_single_always(
clock
,//clockreset
,//(Ac)tivehigh,synresetreq_0
,//Request0req_1
,//Request1gnt_0
,//Grant0gnt_1
);//=============InputPorts=============================input
clock,reset,req_0,req_1;//=============OutputPorts===========================output
gnt_0,gnt_1;//=============InputportsDataType===================wire
clock,reset,req_0,req_1;//=============OutputPortsDataType==================reg
gnt_0,gnt_1;//=============InternalConstants======================parameterSIZE=3
;
parameterIDLE
=3'b001,GNT0=3'b010,GNT1=3'b100;//=============InternalVariables======================reg
[SIZE-1:0]
state
;//SeqpartoftheFSMreg
[SIZE-1:0]
next_state
;//combopartofFSM//==========CodestartesHere==========================always@(posedgeclock)begin:FSMif(reset==1'b1)begin
state#GenerateHostexe.$make#Toruntheapplication$envCL_CONTEXT_EMULATOR_DEVICE_ALTERA=8./bin/host-ah=512-aw=512-bw=512
上述腳本中,通過(guò)
-march=emulator設(shè)置創(chuàng)建一個(gè)可用于CPUdebug的設(shè)備可執(zhí)行文件。-g添加調(diào)試flag?!猙oard用于創(chuàng)建適配該設(shè)備的debugging文件。CL_CONTEXT_EMULATOR_DEVICE_ALTERA為用于CPU仿真的設(shè)備數(shù)量。
當(dāng)執(zhí)行上述腳本后,輸出如下:
$envCL_CONTEXT_EMULATOR_DEVICE_ALTERA=8./bin/host-ah=512-aw=512-bw=512Matrixsizes:
A:512x512
B:512x512
C:512x512InitializingOpenCL
Platform:AlteraSDKforOpenCL
Using8device(s)
EmulatorDevice:EmulatedDevice
...
EmulatorDevice:EmulatedDevice
UsingAOCX:matrix_mult.aocx
Generatinginputmatrices
Launchingfordevice0(globalsize:512,64)
...
Launchingfordevice7(globalsize:512,64)
Time:5596.620ms
Kerneltime(device0):5500.896ms
...
Kerneltime(device7):5137.931ms
Throughput:0.05GFLOPS
Computingreferenceoutput
Verifying
Verification:PASS
通過(guò)仿真時(shí)候設(shè)置Device=8,模擬8個(gè)設(shè)備運(yùn)行(512,512)*(512,512)規(guī)模的矩陣,最終驗(yàn)證正確。接下來(lái)就可以將其真正編譯到FPGA設(shè)備上后運(yùn)行。
FPGA設(shè)備上運(yùn)行矩陣乘
這個(gè)時(shí)候,真正要將代碼下載到FPGA上執(zhí)行了,這時(shí)候,只需要做一件事,那就是用OpenCLSDK提供的編譯器,將
*.cl代碼適配到FPGA上,執(zhí)行編譯命令如下:
$aocdevice/matrix_mult.cl-obin/matrix_mult.aocx--fp-relaxed--fpc--no-interleavingdefault
--board
這個(gè)過(guò)程比較慢,一般需要幾個(gè)小時(shí)到10幾個(gè)小時(shí),視FPGA上資源大小而定。(目前這部分時(shí)間太長(zhǎng)暫時(shí)無(wú)法解決,因?yàn)檫@里的編譯,其實(shí)是在行程一個(gè)能夠正常工作的電路,軟件會(huì)進(jìn)行布局布線(xiàn)等工作)
等待編譯完成后,將生成的matrix_mult.aocx文件燒寫(xiě)到FPGA上就ok啦。
燒寫(xiě)的命令如下:
$aoclprogrammatrix_mult.aocx
這時(shí)候,大功告成,可以運(yùn)行host端程序了:
$./host-ah=512-aw=512-bw=512Matrixsizes:
A:512x512
B:512x512
C:512x512InitializingOpenCL
Platform:AlteraSDKforOpenCL
Using1device(s)
:AlteraOpenCLQPIFPGA
UsingAOCX:matrix_mult.aocx
Generatinginputmatrices
Launchingfordevice0(globalsize:512,512)
Time:2.253ms
Kerneltime(device0):2.191ms
Throughput:119.13GFLOPS
Computingreferenc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度汽車(chē)租賃及道路救援服務(wù)合同4篇
- 疫情期間便攜施工方案
- 建筑工程采購(gòu)分包合同(2篇)
- 2025年度個(gè)人門(mén)面出租合同及裝修設(shè)計(jì)服務(wù)4篇
- 2025年度個(gè)人醫(yī)療貸款債權(quán)轉(zhuǎn)讓與健康管理服務(wù)合同3篇
- 2025年度個(gè)人住宅門(mén)窗安全性能提升合同4篇
- 鋼塔施工方案
- 預(yù)制樁課程設(shè)計(jì)講解
- 鋼結(jié)構(gòu)課程設(shè)計(jì)加圖紙
- 銀杏主題課程設(shè)計(jì)
- 我的家鄉(xiāng)瓊海
- (2025)專(zhuān)業(yè)技術(shù)人員繼續(xù)教育公需課題庫(kù)(附含答案)
- 《互聯(lián)網(wǎng)現(xiàn)狀和發(fā)展》課件
- 【MOOC】計(jì)算機(jī)組成原理-電子科技大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2024年上海健康醫(yī)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案解析
- 2024年湖北省武漢市中考語(yǔ)文適應(yīng)性試卷
- 品質(zhì)部組織架構(gòu)圖構(gòu)
- 汽車(chē)租賃行業(yè)利潤(rùn)分析
- 春節(jié)拜年的由來(lái)習(xí)俗來(lái)歷故事
- 通信電子線(xiàn)路(哈爾濱工程大學(xué))智慧樹(shù)知到課后章節(jié)答案2023年下哈爾濱工程大學(xué)
- 皮膚惡性黑色素瘤-疾病研究白皮書(shū)
評(píng)論
0/150
提交評(píng)論