菜鳥必看!學習FPGA常見的四大誤區
發布時間:2013-10-10 責任編輯:eliane
【導讀】許多菜鳥或許認為去了解“為什麼FPGA是可以編程的”無關緊要,這樣想學好FPGA幾乎是不可能的。FPGA的學習入門或許簡單,但要成為高手卻是難上加難。本文總結了菜鳥們在學習FPGA時所最容易跑偏的幾個地方,希望前輩們的建議能幫助大家更好地學習FPGA。
1、不熟悉FPGA的內部結構,不了解可編程邏輯器件的基本原理。
FPGAweishenmeshikeyibianchengde?kongpahenduocainiaobuzhidao,tamenyebuxiangzhidao。yinweitamenjiaodezheshiwuguanjinyaode。tamenqianyishiderenweikebianchengma,kendingjiushixiangxieruanjianyiyangla。ruanjianbianchengdesixianggenshendigu,kandaoVerilog或者VHDL就像看到C語言或者其它軟件編程語言一樣。一條條的讀,一條條的分析。如果這些菜鳥們始終拒絕去了解為什麼FPGA是可以編程的,不去了解FPGA的內部結構,要想學會FPGA恐怕是天方夜譚。雖然現在EDA軟件已經非常先進,像寫軟件那樣照貓畫虎也能綜合出點東西,但也許隻有天知道EDA軟件最後綜合出來的到底是什麼。也許點個燈,跑個馬還行。這樣就是為什麼很多菜鳥學了N久以後依然是一個菜鳥的原因。

那麼FPGA為什麼是可以“編程”的呢?首先來了解一下什麼叫“程”。其實“程”隻不過是一堆具有一定含義的01編碼而已。編程,其實就是編寫這些01編碼。隻不過我們現在有了很多開發工具,通常都不是直接編寫這些01編碼,而是以高級語言的形式來編寫,最後由開發工具轉換為這種01編碼而已。對於軟件編程而言,處理器會有一個專門的譯碼電路逐條把這些01bianmafanyiweigezhongkongzhixinhao,ranhoukongzhiqineibudedianluwanchengyigegedeyunsuanhuozheshiqitacaozuo。suoyiruanjianshiyitiaoyitiaodedu,yinweiruanjiandecaozuoshiyibuyibuwanchengde。erFPGA的可編程,本質也是依靠這些01編碼實現其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來再去控製一個運算電路,FPGA裏麵沒有這些東西。
FPGA內部主要三塊:可編程的邏輯單元、可編程的連線和可編程的IO模塊。
可編程的邏輯單元是什麼?其基本結構某種存儲器(SRAM、FLASH等)製成的4輸入或6輸入1輸出地“真值表”加上一個D觸發器構成。任何一個4輸入1輸出組合邏輯電路,都有一張對應的“真值表”,同樣的如果用這麼一個存儲器製成的4輸入1輸出地“真值表”,隻需要修改其“真值表”內部值就可以等效出任意4輸入1輸出的組合邏輯。這些“真值表”內部值是什麼?就是那些01編碼而已。如果要實現時序邏輯電路怎麼辦?這不又D觸發器嘛,任何的時序邏輯都可以轉換為組合邏輯+D觸發器來完成。但這畢竟隻實現了4輸入1輸(shu)出(chu)的(de)邏(luo)輯(ji)電(dian)路(lu)而(er)已(yi),通(tong)常(chang)邏(luo)輯(ji)電(dian)路(lu)的(de)規(gui)模(mo)那(na)是(shi)相(xiang)當(dang)的(de)大(da)哦(o)。那(na)怎(zen)麼(me)辦(ban)呢(ne)?這(zhe)個(ge)時(shi)候(hou)就(jiu)需(xu)要(yao)用(yong)到(dao)可(ke)編(bian)程(cheng)連(lian)線(xian)了(le)。在(zai)這(zhe)些(xie)連(lian)線(xian)上(shang)有(you)很(hen)多(duo)用(yong)存(cun)儲(chu)器(qi)控(kong)製(zhi)的(de)鏈(lian)接(jie)點(dian),通(tong)過(guo)改(gai)寫(xie)對(dui)應(ying)存(cun)儲(chu)器(qi)的(de)值(zhi)就(jiu)可(ke)以(yi)確(que)定(ding)哪(na)些(xie)線(xian)是(shi)連(lian)上(shang)的(de)而(er)哪(na)些(xie)線(xian)是(shi)斷(duan)開(kai)的(de)。這(zhe)就(jiu)可(ke)以(yi)把(ba)很(hen)多(duo)可(ke)編(bian)程(cheng)邏(luo)輯(ji)單(dan)元(yuan)組(zu)合(he)起(qi)來(lai)形(xing)成(cheng)大(da)型(xing)的(de)邏(luo)輯(ji)電(dian)路(lu)。最(zui)後(hou)就(jiu)是(shi)可(ke)編(bian)程(cheng)的(de)IO,這其實是FPGA作為芯片級使用必須要注意的。任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個非專用引腳(FPGA中有專門的非用戶可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標準進行設置。
總歸一句話,FPGA之所以可編程是因為可以通過特殊的01代碼製作成一張張“真值表”,並將這些“真值表”組合起來以實現大規模的邏輯功能。不了解FPGA內部結構,就不能明白最終代碼如何變到FPGA裏麵去的。也就無法深入的了解如何能夠充分運用FPGA。現在的FPGA,不(bu)單(dan)單(dan)是(shi)有(you)前(qian)麵(mian)講(jiang)的(de)那(na)三(san)塊(kuai),還(hai)有(you)很(hen)多(duo)專(zhuan)用(yong)的(de)硬(ying)件(jian)功(gong)能(neng)單(dan)元(yuan),如(ru)何(he)利(li)用(yong)好(hao)這(zhe)些(xie)單(dan)元(yuan)實(shi)現(xian)複(fu)雜(za)的(de)邏(luo)輯(ji)電(dian)路(lu)設(she)計(ji),是(shi)從(cong)菜(cai)鳥(niao)邁(mai)向(xiang)高(gao)手(shou)的(de)路(lu)上(shang)必(bi)須(xu)要(yao)克(ke)服(fu)的(de)障(zhang)礙(ai)。而(er)這(zhe)一(yi)切(qie),還(hai)是(shi)必(bi)須(xu)先(xian)從(cong)了(le)解(jie)FPGA內部邏輯及其工作原理做起。
[page]
2、錯誤理解HDL語言,怎麼看都看不出硬件結構。
HDL語言的英語全稱是:HardwareDescriptionLanguage,注意這個單詞Description,而不是Design。老外為什麼要用Description這個詞而不是Design呢?因為HDL確實不是用來設計硬件,而僅僅是用來描述硬件的。
描述這個詞精確地反映了HDL語言的本質,HDL語(yu)言(yan)不(bu)過(guo)是(shi)已(yi)知(zhi)硬(ying)件(jian)電(dian)路(lu)的(de)文(wen)本(ben)表(biao)現(xian)形(xing)式(shi)而(er)已(yi),隻(zhi)是(shi)將(jiang)以(yi)後(hou)的(de)電(dian)路(lu)用(yong)文(wen)本(ben)的(de)形(xing)式(shi)描(miao)述(shu)出(chu)來(lai)而(er)已(yi)。而(er)在(zai)編(bian)寫(xie)語(yu)言(yan)之(zhi)前(qian),硬(ying)件(jian)電(dian)路(lu)應(ying)該(gai)已(yi)經(jing)被(bei)設(she)計(ji)出(chu)來(lai)了(le)。語(yu)言(yan)隻(zhi)不(bu)過(guo)是(shi)將(jiang)這(zhe)種(zhong)設(she)計(ji)轉(zhuan)化(hua)為(wei)文(wen)字(zi)表(biao)達(da)形(xing)式(shi)而(er)已(yi)。但(dan)是(shi)很(hen)多(duo)人(ren)就(jiu)不(bu)理(li)解(jie)了(le),既(ji)然(ran)硬(ying)件(jian)都(dou)已(yi)經(jing)被(bei)設(she)計(ji)出(chu)來(lai)了(le),直(zhi)接(jie)拿(na)去(qu)製(zhi)作(zuo)部(bu)就(jiu)完(wan)了(le),為(wei)什(shen)麼(me)還(hai)要(yao)轉(zhuan)化(hua)為(wei)文(wen)字(zi)表(biao)達(da)形(xing)式(shi)再(zai)通(tong)過(guo)EDA工具這些麻煩的流程呢?其實這就是很多菜鳥沒有了解設計的抽象層次的問題,任何設計包括什麼服裝、機械、guanggaoshejidouyouyigechouxiangcengcidewenti。jiunaguanggaoshejilaishuoba,zuichudeshejiyexujiushiyigegainian,shejichuzhegegainianyeshijiushiyigedianzieryi,lizuizhongpaichengguanggaohaichadehenyuan。yingjianshejiyeshiyoubutongdechouxiangcengci,meiyigecengcidouxuyaosheji。zuigaodechouxiangcengciweisuanfaji、然後依次是體係結構級、寄存器傳輸級、門級、物理版圖級。
使用HDL的好處在於我們已經設計好了一個寄存器傳輸級的電路,那麼用HDL描述以後轉化為文本的形式,剩下的向更低層次的轉換就可以讓EDA工具去做了,這就大大的降低了工作量。這就是可綜合的概念,也就是說在對這一抽象層次上硬件單元進行描述可以被EDA工具理解並轉化為底層的門級電路或其他結構的電路。在FPGA設計中,就是在將這以抽象層級的意見描述成HDL語言,就可以通過FPGA開發軟件轉化為問題1中所述的FPGA內部邏輯功能實現形式。HDL也可以描述更高的抽象層級如算法級或者是體係結構級,但目前受限於EDA軟件的發展,EDA軟件還無法理解這麼高的抽象層次,所以HDL描述這樣抽象層級是無法被轉化為較低的抽象層級的,這也就是所謂的不可綜合。所以在閱讀或編寫HDL語言,尤其是可綜合的HDL,不應該看到的是語言本身,而是要看到語言背後所對應的硬件電路結構。
如果看到的HDL始(shi)終(zhong)是(shi)一(yi)條(tiao)條(tiao)的(de)代(dai)碼(ma),那(na)麼(me)這(zhe)種(zhong)人(ren)永(yong)遠(yuan)擺(bai)脫(tuo)不(bu)了(le)菜(cai)鳥(niao)的(de)宿(xiu)命(ming)。假(jia)如(ru)哪(na)一(yi)天(tian)看(kan)到(dao)的(de)代(dai)碼(ma)不(bu)再(zai)是(shi)一(yi)行(xing)行(xing)的(de)代(dai)碼(ma)而(er)是(shi)一(yi)塊(kuai)一(yi)塊(kuai)的(de)硬(ying)件(jian)模(mo)塊(kuai),那(na)麼(me)恭(gong)喜(xi)脫(tuo)離(li)了(le)菜(cai)鳥(niao)的(de)級(ji)別(bie),進(jin)入(ru)不(bu)那(na)麼(me)菜(cai)的(de)鳥(niao)級(ji)別(bie)。
3、FPGA本身不算什麼,一切皆在FPGA之外。

這一點恐怕也是很多學FPGA的菜鳥最難理解的地方。FPGA是(shi)給(gei)誰(shui)用(yong)的(de)?很(hen)多(duo)學(xue)校(xiao)解(jie)釋(shi)為(wei)給(gei)學(xue)微(wei)電(dian)子(zi)專(zhuan)業(ye)或(huo)者(zhe)集(ji)成(cheng)電(dian)路(lu)設(she)計(ji)專(zhuan)業(ye)的(de)學(xue)生(sheng)用(yong)的(de),其(qi)實(shi)這(zhe)不(bu)過(guo)是(shi)很(hen)多(duo)學(xue)校(xiao)受(shou)資(zi)金(jin)限(xian)製(zhi),賣(mai)不(bu)起(qi)專(zhuan)業(ye)的(de)集(ji)成(cheng)電(dian)路(lu)設(she)計(ji)工(gong)具(ju)而(er)用(yong)FPGA工具替代而已。其實FPGA是給設計電子係統的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個電子設備,如基站、機頂盒、視頻監控設備等。當現有芯片無法滿足係統的需求時,就需要用FPGA來快速的定義一個能用的芯片。
前麵說了,FPGA裏麵無非就是一些“真值表”、觸發器、各種連線以及一些硬件資源,電子係統工程師使用FPGA進行設計時無非就是考慮如何將這些以後資源組合起來實現一定的邏輯功能而已,而不必像IC設she計ji工gong程cheng師shi那na樣yang一yi直zhi要yao關guan注zhu到dao最zui後hou芯xin片pian是shi不bu是shi能neng夠gou被bei製zhi造zao出chu來lai。本ben質zhi上shang和he利li用yong現xian有you芯xin片pian組zu合he成cheng不bu同tong的de電dian子zi係xi統tong沒mei有you區qu別bie,隻zhi是shi要yao關guan注zhu更geng底di層ceng的de資zi源yuan而er已yi。要yao想xiang把baFPGA用起來還是簡單的,因為無非就是那些資源,理解了前麵兩點再搞個實驗板,跑跑實驗,做點簡單的東西是可以的。而真正要把FPGA用好,那光懂點FPGA知識就遠遠不夠了。因為最終要讓FPGA裏麵的資源如何組合,實現何種功能才能滿足係統的需要,就需要懂得更多更廣泛的知識。
[page]
目前FPGA的應用主要是三個方向:
第一個方向,也是傳統方向主要用於通信設備的高速接口電路設計,這一方向主要是用FPGA處理高速接口的協議,並完成高速的數據收發和交換。這類應用通常要求采用具備高速收發接口的FPGA,同時要求設計者懂得高速接口電路設計和高速數字電路板級設計,具備EMCEMI設計知識,以及較好的模擬電路基礎,需要解決在高速收發過程中產生的信號完整性問題。FPGAzuichuyijidaomuqianzuiguangdeyingyongjiushizaitongxinlingyu,yifangmiantongxinlingyuxuyaogaosudetongxinxieyichulifangshi,lingyifangmiantongxinxieyisuishizaixiugai,feichangbushihezuochengzhuanmendexinpian。yincinenggoulinghuogaibiangongnengdeFPGA就成為首選。到目前為止FPGA的一半以上的應用也是在通信行業。
第二個方向,可以稱為數字信號處理方向或者數學計算方向,因為很大程度上這一方向已經大大超出了信號處理的範疇。例如早就在2006年就聽說老美將FPGA用於金融數據分析,後來又見到有將FPGA用於醫學數據分析的案例。在這一方向要求FPGA設計者有一定的數學功底,能夠理解並改進較為複雜的數學算法,並利用FPGA內部的各種資源使之能夠變為實際的運算電路。目前真正投入實用的還是在通信領域的無線信號處理、信道編解碼以及圖像信號處理等領域,其它領域的研究正在開展中,之所以沒有大量實用的主要原因還是因為學金融的、學醫學的不了解這玩意。不過最近發現歐美有很多電子工程、計算機類的博士轉入到金融行業,開展金融信號處理,相信隨著轉入的人增加,FPGA在其它領域的數學計算功能會更好的發揮出來,而我也有意做一些這些方麵的研究。不過國內學金融的、學醫的恐怕連數學都很少用到,就不用說用FPGA來幫助他們完成數學運算了,這個問題隻有再議了。
第三個方向就是所謂的SOPC方向,其實嚴格意義上來說這個已經在FPGA設計的範疇之內,隻不過是利用FPGA這個平台搭建的一個嵌入式係統的底層硬件環境,然後設計者主要是在上麵進行嵌入式軟件開發而已。設計對於FPGA本身的設計時相當少的。但如果涉及到需要在FPGA做專門的算法加速,實際上需要用到第二個方向的知識,而如果需要設計專用的接口電路則需要用到第一個方向的知識。就目前SOPC方向發展其實遠不如第一和第二個方向,其主要原因是因為SOPC以FPGA為主,或者是在FPGA內部的資源實現一個“軟”的處理器,或者是在FPGA內nei部bu嵌qian入ru一yi個ge處chu理li器qi核he。但dan大da多duo數shu的de嵌qian入ru式shi設she計ji卻que是shi以yi軟ruan件jian為wei核he心xin,以yi現xian有you的de硬ying件jian發fa展zhan情qing況kuang來lai看kan,多duo數shu情qing況kuang下xia的de接jie口kou都dou已yi經jing標biao準zhun化hua,並bing不bu需xu要yao那na麼me大da的deFPGA邏輯資源去設計太過複雜的接口。而且就目前看來SOPC相關的開發工具還非常的不完善,以ARM為代表的各類嵌入式處理器開發工具卻早已深入人心,大多數以ARM為核心的SOC芯xin片pian提ti供gong了le大da多duo數shu標biao準zhun的de接jie口kou,大da量liang成cheng係xi列lie的de單dan片pian機ji嵌qian入ru式shi處chu理li器qi提ti供gong了le相xiang關guan行xing業ye所suo需xu要yao的de硬ying件jian加jia速su電dian路lu,需xu要yao專zhuan門men定ding製zhi硬ying件jian場chang合he確que實shi很hen少shao。通tong常chang是shi在zai一yi些xie特te種zhong行xing業ye才cai會hui在zai這zhe方fang麵mian有you非fei常chang迫po切qie的de需xu求qiu。即ji使shi目mu前qianXilinx將ARM的硬核加入到FPGA裏麵,相信目前的情況不會有太大改觀,不要忘了很多老掉牙的8位單片機還在嵌入式領域混呢,嵌入式主要不是靠硬件的差異而更多的是靠軟件的差異來體現價值的。
我曾經看好的是cypress的Psoc這一想法。和SOPC係列不同,Psoc的思想史載SOC芯片裏麵去嵌入那麼一小塊FPGA,那這樣其實可以滿足嵌入式的那些微小的硬件接口差異,比如某個運用需要4個USB,而通常的處理器不會提供那麼多,就可以用這麼一塊FPGA來提供多的USB接口。而另一種運用需要6個UART,也ye可ke以yi用yong同tong樣yang的de方fang法fa完wan成cheng。對dui於yu嵌qian入ru式shi設she計ji公gong司si來lai說shuo他ta們men隻zhi需xu要yao備bei貨huo一yi種zhong芯xin片pian,就jiu可ke以yi滿man足zu這zhe些xie設she計ji中zhong各ge種zhong微wei小xiao的de差cha異yi變bian化hua要yao的de差cha異yi化hua仍reng然ran是shi通tong過guo軟ruan件jian來lai完wan成cheng。但dan目mu前qiancypress過於封閉,如果其采用ARM作為處理器內核,借助其完整的工具鏈。同時開放IP合作,讓大量的第三方為它提供IP設計,其實是很有希望的。但目前cypress的日子怕不太好過,Psoc的思想也不知道何時能夠發光。
4、數字邏輯知識是根本。
無論是FPGA的哪個方向,都離不開數字邏輯知識的支撐。FPGA說白了是一種實現數字邏輯的方式而已。如果連最基本的數字邏輯的知識都有問題,學習FPGA的(de)願(yuan)望(wang)隻(zhi)是(shi)空(kong)中(zhong)樓(lou)閣(ge)而(er)已(yi)。而(er)這(zhe),恰(qia)恰(qia)是(shi)很(hen)多(duo)菜(cai)鳥(niao)最(zui)不(bu)願(yuan)意(yi)去(qu)麵(mian)對(dui)的(de)問(wen)題(ti)。數(shu)字(zi)邏(luo)輯(ji)是(shi)任(ren)何(he)電(dian)子(zi)電(dian)氣(qi)類(lei)專(zhuan)業(ye)的(de)專(zhuan)業(ye)基(ji)礎(chu)知(zhi)識(shi),也(ye)是(shi)必(bi)須(xu)要(yao)學(xue)好(hao)的(de)一(yi)門(men)課(ke)。很(hen)多(duo)人(ren)無(wu)非(fei)是(shi)學(xue)習(xi)了(le),考(kao)個(ge)試(shi),完(wan)了(le)。如(ru)果(guo)不(bu)能(neng)將(jiang)數(shu)字(zi)邏(luo)輯(ji)知(zhi)識(shi)爛(lan)熟(shu)於(yu)心(xin),養(yang)成(cheng)良(liang)好(hao)的(de)設(she)計(ji)習(xi)慣(guan),學(xue)FPGA到最後仍然是霧裏看花水中望月,始終是一場空的。
以上四條隻是我目前總結菜鳥們在學習FPGA時所最容易跑偏的地方,FPGA的(de)學(xue)習(xi)其(qi)實(shi)就(jiu)像(xiang)學(xue)習(xi)圍(wei)棋(qi)一(yi)樣(yang),學(xue)會(hui)如(ru)何(he)在(zai)棋(qi)盤(pan)上(shang)落(luo)子(zi)很(hen)容(rong)易(yi),成(cheng)為(wei)一(yi)位(wei)高(gao)手(shou)卻(que)是(shi)難(nan)上(shang)加(jia)難(nan)。要(yao)真(zhen)成(cheng)為(wei)李(li)昌(chang)鎬(hao)那(na)樣(yang)的(de)神(shen)一(yi)般(ban)的(de)選(xuan)手(shou),除(chu)了(le)靠(kao)刻(ke)苦(ku)專(zhuan)研(yan),恐(kong)怕(pa)還(hai)確(que)實(shi)得(de)要(yao)一(yi)點(dian)天(tian)賦(fu)。
相關閱讀:
使用FPGA進行工業設計的五大優勢
http://0-fzl.cn/gptech-art/80021010
本土FPGA供應商京微雅格的生存之道
http://0-fzl.cn/gptech-art/80021090
京微雅格:基於SoC FPGA的異步全彩LED顯示設計
http://0-fzl.cn/opto-art/80021166
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- e絡盟與Same Sky簽署全球分銷協議,拓展高性能元器件版圖
- 告別“偏色”煩惱:光譜傳感器如何重塑手機攝影的真實色彩
- 從“掃描”到“洞察”:Hyperlux ID iToF技術如何攻克30米測距極限
- 解鎖算力芯片的“速度密碼”:SmartDV全棧IP方案深度解析
- 發燒友福音!XMOS推出32段EQ調節與一鍵升頻功能
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
開關三極管
科通
可變電容
可調電感
可控矽
空心線圈
控製變壓器
控製模塊
藍牙
藍牙4.0
藍牙模塊
浪湧保護器
雷度電子
鋰電池
利爾達
連接器
流量單位
漏電保護器
濾波電感
濾波器
路由器設置
鋁電解電容
鋁殼電阻
邏輯IC
馬達控製
麥克風
脈衝變壓器
鉚接設備
夢想電子
模擬鎖相環



