菜鳥必看!學習FPGA常見的四大誤區
發布時間:2013-10-10 責任編輯:eliane
【導讀】許多菜鳥或許認為去了解“為什麼FPGA是可以編程的”無關緊要,這樣想學好FPGA幾乎是不可能的。FPGA的學習入門或許簡單,但要成為高手卻是難上加難。本文總結了菜鳥們在學習FPGA時所最容易跑偏的幾個地方,希望前輩們的建議能幫助大家更好地學習FPGA。
1、不熟悉FPGA的內部結構,不了解可編程邏輯器件的基本原理。
FPGA為(wei)什(shen)麼(me)是(shi)可(ke)以(yi)編(bian)程(cheng)的(de)?恐(kong)怕(pa)很(hen)多(duo)菜(cai)鳥(niao)不(bu)知(zhi)道(dao),他(ta)們(men)也(ye)不(bu)想(xiang)知(zhi)道(dao)。因(yin)為(wei)他(ta)們(men)覺(jiao)得(de)這(zhe)是(shi)無(wu)關(guan)緊(jin)要(yao)的(de)。他(ta)們(men)潛(qian)意(yi)識(shi)的(de)認(ren)為(wei)可(ke)編(bian)程(cheng)嘛(ma),肯(ken)定(ding)就(jiu)是(shi)像(xiang)寫(xie)軟(ruan)件(jian)一(yi)樣(yang)啦(la)。軟(ruan)件(jian)編(bian)程(cheng)的(de)思(si)想(xiang)根(gen)深(shen)蒂(di)固(gu),看(kan)到(dao)Verilog或者VHDL就像看到C語言或者其它軟件編程語言一樣。一條條的讀,一條條的分析。如果這些菜鳥們始終拒絕去了解為什麼FPGA是可以編程的,不去了解FPGA的內部結構,要想學會FPGA恐怕是天方夜譚。雖然現在EDA軟件已經非常先進,像寫軟件那樣照貓畫虎也能綜合出點東西,但也許隻有天知道EDA軟件最後綜合出來的到底是什麼。也許點個燈,跑個馬還行。這樣就是為什麼很多菜鳥學了N久以後依然是一個菜鳥的原因。

那麼FPGA為什麼是可以“編程”的呢?首先來了解一下什麼叫“程”。其實“程”隻不過是一堆具有一定含義的01編碼而已。編程,其實就是編寫這些01編碼。隻不過我們現在有了很多開發工具,通常都不是直接編寫這些01編碼,而是以高級語言的形式來編寫,最後由開發工具轉換為這種01編碼而已。對於軟件編程而言,處理器會有一個專門的譯碼電路逐條把這些01編bian碼ma翻fan譯yi為wei各ge種zhong控kong製zhi信xin號hao,然ran後hou控kong製zhi其qi內nei部bu的de電dian路lu完wan成cheng一yi個ge個ge的de運yun算suan或huo者zhe是shi其qi它ta操cao作zuo。所suo以yi軟ruan件jian是shi一yi條tiao一yi條tiao的de讀du,因yin為wei軟ruan件jian的de操cao作zuo是shi一yi步bu一yi步bu完wan成cheng的de。而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的deIO,這其實是FPGA作為芯片級使用必須要注意的。任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個非專用引腳(FPGA中有專門的非用戶可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標準進行設置。
總歸一句話,FPGA之所以可編程是因為可以通過特殊的01代碼製作成一張張“真值表”,並將這些“真值表”組合起來以實現大規模的邏輯功能。不了解FPGA內部結構,就不能明白最終代碼如何變到FPGA裏麵去的。也就無法深入的了解如何能夠充分運用FPGA。現在的FPGA,budandanshiyouqianmianjiangdenasankuai,haiyouhenduozhuanyongdeyingjiangongnengdanyuan,ruheliyonghaozhexiedanyuanshixianfuzadeluojidianlusheji,shicongcainiaomaixianggaoshoudelushangbixuyaokefudezhangai。erzheyiqie,haishibixuxianconglejieFPGA內部邏輯及其工作原理做起。
[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,不應該看到的是語言本身,而是要看到語言背後所對應的硬件電路結構。
如果看到的HDLshizhongshiyitiaotiaodedaima,namezhezhongrenyongyuanbaituobulecainiaodexiuming。jiarunayitiankandaodedaimabuzaishiyixingxingdedaimaershiyikuaiyikuaideyingjianmokuai,namegongxituolilecainiaodejibie,jinrubunamecaideniaojibie。
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用yongFPGA工具替代而已。其實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為核心的SOCxinpiantigongledaduoshubiaozhundejiekou,daliangchengxiliededanpianjiqianrushichuliqitigonglexiangguanxingyesuoxuyaodeyingjianjiasudianlu,xuyaozhuanmendingzhiyingjianchanghequeshihenshao。tongchangshizaiyixietezhongxingyecaihuizaizhefangmianyoufeichangpoqiedexuqiu。jishimuqianXilinx將ARM的硬核加入到FPGA裏麵,相信目前的情況不會有太大改觀,不要忘了很多老掉牙的8位單片機還在嵌入式領域混呢,嵌入式主要不是靠硬件的差異而更多的是靠軟件的差異來體現價值的。
我曾經看好的是cypress的Psoc這一想法。和SOPC係列不同,Psoc的思想史載SOC芯片裏麵去嵌入那麼一小塊FPGA,那這樣其實可以滿足嵌入式的那些微小的硬件接口差異,比如某個運用需要4個USB,而通常的處理器不會提供那麼多,就可以用這麼一塊FPGA來提供多的USB接口。而另一種運用需要6個UART,yekeyiyongtongyangdefangfawancheng。duiyuqianrushishejigongsilaishuotamenzhixuyaobeihuoyizhongxinpian,jiukeyimanzuzhexieshejizhonggezhongweixiaodechayibianhuayaodechayihuarengranshitongguoruanjianlaiwancheng。danmuqiancypress過於封閉,如果其采用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時所最容易跑偏的地方,FPGAdexuexiqishijiuxiangxuexiweiqiyiyang,xuehuiruhezaiqipanshangluozihenrongyi,chengweiyiweigaoshouqueshinanshangjianan。yaozhenchengweilichanghaonayangdeshenyibandexuanshou,chulekaokekuzhuanyan,kongpahaiqueshideyaoyidiantianfu。
相關閱讀:
使用FPGA進行工業設計的五大優勢
http://www.0-fzl.cn/gptech-art/80021010
本土FPGA供應商京微雅格的生存之道
http://www.0-fzl.cn/gptech-art/80021090
京微雅格:基於SoC FPGA的異步全彩LED顯示設計
http://www.0-fzl.cn/opto-art/80021166
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 築基AI4S:摩爾線程全功能GPU加速中國生命科學自主生態
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
微波功率管
微波開關
微波連接器
微波器件
微波三極管
微波振蕩器
微電機
微調電容
微動開關
微蜂窩
位置傳感器
溫度保險絲
溫度傳感器
溫控開關
溫控可控矽
聞泰
穩壓電源
穩壓二極管
穩壓管
無焊端子
無線充電
無線監控
無源濾波器
五金工具
物聯網
顯示模塊
顯微鏡結構
線圈
線繞電位器
線繞電阻


