你的位置:首頁(yè) > 測(cè)試測(cè)量 > 正文

小白入門FPGA必備基礎(chǔ)知識(shí)

發(fā)布時(shí)間:2017-01-17 責(zé)任編輯:wenwei

【導(dǎo)讀】FPGA已成為現(xiàn)今的技術(shù)熱點(diǎn)之一,無(wú)論學(xué)生還是工程師都希望跨進(jìn)FPGA的大門。那么我們要玩轉(zhuǎn)FPGA必須具備哪些基礎(chǔ)知識(shí)呢?下面我們慢慢道來(lái),希望能夠?yàn)閷W(xué)習(xí)FPGA的人帶來(lái)幫助。
 
(一) 要了解什么是FPGA
         
既然要玩轉(zhuǎn)FPGA,那我們首先最重要的當(dāng)然是要了解什么FPGA.
         
FPGA(Field-Program mable Gate Array),即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。所以,要想玩轉(zhuǎn)FPGA,就必須理解FPGA內(nèi)部的工作原理,學(xué)習(xí)如何利用這些單元實(shí)現(xiàn)復(fù)雜的邏輯設(shè)計(jì)。
 
(二) FPGA的工作原理
         
FPGA一般來(lái)說(shuō)比ASIC(專用集成芯片)的速度要慢,無(wú)法完成復(fù)雜的設(shè)計(jì),但是功耗較低。但是 他們也有很多的優(yōu)點(diǎn)比如可以快速成品,可以被修改來(lái)改正程序中的錯(cuò)誤和更便宜的造價(jià)。廠商也可能會(huì)提供便宜的但是編輯能力差的FPGA.因?yàn)檫@些芯片有比 較差的可編輯能力,所以這些設(shè)計(jì)的開(kāi)發(fā)是在普通的FPGA上完成的,然后將設(shè)計(jì)轉(zhuǎn)移到一個(gè)類似于ASIC的芯片上。
         
FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。 現(xiàn)場(chǎng)可編程門陣列(FPGA)是可編程器件,與傳統(tǒng)邏輯電路和 門陣列(如PAL,GAL及CPLD器件)相比,F(xiàn)PGA具有不同的結(jié)構(gòu)。FPGA利用小型查找表(16×1RAM)來(lái)實(shí)現(xiàn)組合邏輯,每個(gè)查找表連接到一 個(gè)D觸發(fā)器的輸入端,觸發(fā)器再來(lái)驅(qū)動(dòng)其他邏輯電路或驅(qū)動(dòng)I/O,由此構(gòu)成了既可實(shí)現(xiàn)組合邏輯功能又可實(shí)現(xiàn)時(shí)序邏輯功能的基本邏輯單元模塊,這些模塊間利用 金屬連線互相連接或連接到I/O模塊。FPGA的邏輯是通過(guò)向內(nèi)部靜態(tài)存儲(chǔ)單元加載編程數(shù)據(jù)來(lái)實(shí)現(xiàn)的,存儲(chǔ)在存儲(chǔ)器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯(lián)接方式,并最終決定了FPGA所能實(shí)現(xiàn)的功能,F(xiàn)PGA允許無(wú)限次的編程。
 
三) FPGA設(shè)計(jì)的基礎(chǔ)問(wèn)題
         
FPGA的基礎(chǔ)就是數(shù)字電路和VHDL語(yǔ) 言,想學(xué)好FPGA的人,建議床頭都有一本數(shù)字電路的書(shū),不管是哪個(gè)版本的,這個(gè)是基礎(chǔ),多了解也有助于形成硬件設(shè)計(jì)的思想。在語(yǔ)言方面,建議初學(xué)者學(xué)習(xí) Verilog語(yǔ)言,VHDL語(yǔ)言語(yǔ)法規(guī)范嚴(yán)格,調(diào)試起來(lái)很慢,Verilog語(yǔ)言容易上手,而且,一般大型企業(yè)都是用Verilog語(yǔ)言,VHDL語(yǔ)言 規(guī)范,易讀性強(qiáng),所以一般軍工都用VHDL.
         
1、工具問(wèn)題
         
熟悉幾個(gè)常用的就可以的,開(kāi)發(fā)環(huán)境QuartusII ,或ISE 就可以了,這兩個(gè)基本是相通的,會(huì)了哪一個(gè),另外的那個(gè)也就很Easy了。功能仿真建議使用Modelsim ,如果你是做芯片的,就可以學(xué)學(xué)別的仿真工具,做FPGA的,Modelsim就足夠了。綜合工具一般用Synplify,初學(xué)先不用太關(guān)心這個(gè),用 Quartus綜合就OK了。
         
2、思想問(wèn)題
         
對(duì)于初學(xué)者,特別是從軟件轉(zhuǎn)過(guò)來(lái)的,設(shè)計(jì)的程序既費(fèi)資源又速度慢,而且很有可能綜合不了,這就要求我們熟悉一些固定模塊的寫(xiě)法,可綜合的模塊很多書(shū)上都有,語(yǔ)言介紹上都有,不要想當(dāng)然的用軟件的思想去寫(xiě)硬件。
         
3、習(xí)慣問(wèn)題
         
FPGA學(xué)習(xí)要多練習(xí),多仿真,signaltapII是很好的工具,可以看到每個(gè)信號(hào)的真實(shí)值, 建議初學(xué)者一定要自己多動(dòng)手,光看書(shū)是沒(méi)用的。關(guān)于英文文檔問(wèn)題,如果要學(xué)會(huì)Quartus II的所有功能,只要看它的handbook就可以了,很詳細(xì),對(duì)于IT行業(yè)的人,大部分知識(shí)來(lái)源都是英文文檔,一定要耐心看,會(huì)從中收獲很多的。
         
4、算法問(wèn)題
         
做FPGA的工程師,最后一般都是專攻算法了,這些基礎(chǔ)知識(shí)都是順手捏來(lái)的,如果你沒(méi)有做好搞理論 的準(zhǔn)備,學(xué)FPGA始終只能停留在初級(jí)階段上。對(duì)于初學(xué)者,數(shù)字信號(hào)處理是基礎(chǔ),應(yīng)該好好理解,往更深的方向,不用什么都學(xué),根據(jù)你以后從事的方向,比如 說(shuō)通信、圖像處理,雷達(dá)、聲納、導(dǎo)航定位等。
 
小白入門FPGA必備基礎(chǔ)知識(shí)
 
(四) FPGA的配置模式
         
FPGA有多種配置模式:并行主模式為一片F(xiàn)PGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片F(xiàn)PGA;串行模式可以采用串行PROM編程FPGA;外設(shè)模式可以將FPGA作為微處理器的外設(shè),由微處理器對(duì)其編程。
         
如何實(shí)現(xiàn)快速的時(shí)序收斂、降低功耗和成本、優(yōu)化時(shí)鐘管理并降低FPGA與PCB并行設(shè)計(jì)的復(fù)雜性等問(wèn)題,一直是采用FPGA的系統(tǒng)設(shè)計(jì)工程師需要考慮的關(guān)鍵問(wèn)題。如今,隨著FPGA向更高密度、更大容量、更低功耗和集成更多IP的方向發(fā)展,系統(tǒng)設(shè)計(jì)工 程師在從這些優(yōu)異性能獲益的同時(shí),不得不面對(duì)由于FPGA前所未有的性能和能力水平而帶來(lái)的新的設(shè)計(jì)挑戰(zhàn)。
 
(五) FPGA設(shè)計(jì)的三大法則
         
第一 面積與速度的互換
         
這里的面積指的是FPGA的芯片資源,包括邏輯資源和I/O資源等;這里的速度指的是FPGA工作 的最高頻率(和DSP或者ARM不同,F(xiàn)PGA設(shè)計(jì)的工 作頻率是不固定的,而是和設(shè)計(jì)本身的延遲緊密相連)。 在實(shí)際設(shè)計(jì)中,使用最小的面積設(shè)計(jì)出最高的速度是每一個(gè)開(kāi)發(fā)者追求的目標(biāo),但是“魚(yú)和熊掌不可兼得”,取舍之間展示了一個(gè)開(kāi)發(fā)者的智慧。
         
1.速度換面積
         
速度優(yōu)勢(shì)可以換取面積的節(jié)約。面積越小,就意味著可以用更低的成本來(lái)實(shí)現(xiàn)產(chǎn)品的功 能。速度換面積的原則在一些較復(fù)雜的算法設(shè)計(jì)中常常會(huì)用到。在這些算法設(shè)計(jì)中,流水線設(shè)計(jì)常常是必須用到的技術(shù)。在流水線的設(shè)計(jì)中,這些被重復(fù)使用但是使 用次數(shù)不同的模塊將會(huì)占用大量的FPGA資源。對(duì)FPGA的設(shè)計(jì)技術(shù)進(jìn)行改造,將被重復(fù)使用的算法模塊提煉出最小的復(fù)用單元,并利用這個(gè)最小的高速代替原 設(shè)計(jì)中被重復(fù)使用但次數(shù)不同的模塊。當(dāng)然,在改造的過(guò)程中必然會(huì)增加一些其他的資源來(lái)實(shí)現(xiàn)這個(gè)代替的過(guò)程。但是只要速度具有優(yōu)勢(shì),那么增加的這部分邏輯依 然能夠?qū)崿F(xiàn)降低面積提高速度的目的。
         
可以看到,速度換面積的關(guān)鍵是高速基本單元的復(fù)用。
         
2.面積換速度
         
在這種方法中面積的復(fù)制可以換取速度的提高。支持的速度越高,就意味著可以實(shí)現(xiàn)更高的產(chǎn)品性能。一些注重產(chǎn)品性能的應(yīng)用領(lǐng)域可以采用并行處理技術(shù),實(shí)現(xiàn)面積換速度。
         
第二 硬件可實(shí)現(xiàn)原則
         
FPGA設(shè)計(jì)通常會(huì)使用HDL語(yǔ)言,比如Verilog HDL或者VHDL.當(dāng)采用HDL語(yǔ)言來(lái)描述一個(gè)硬件電路功能的時(shí)候,一定要確保代碼描述的電路是硬件可實(shí)現(xiàn)的。
         
Verilog HDL語(yǔ)言的語(yǔ)法與C語(yǔ)言很相似,但是它們之間有著本質(zhì)的區(qū)別。C語(yǔ)言是基于過(guò)程的高級(jí)語(yǔ)言,編譯后可以在CPU上運(yùn)行。而Verilog HDL語(yǔ)言描述的本身就是硬件結(jié)構(gòu),編譯后是硬件電路。因此,有些語(yǔ)句在C語(yǔ)言的環(huán)境中應(yīng)用是沒(méi)有問(wèn)題的,但是在HDL語(yǔ)言環(huán)境下就會(huì)導(dǎo)致結(jié)果不正確或者 不理想。如:
         
for(i=0;i<16;i++)
         
DoSomething();
         
在C語(yǔ)言中運(yùn)行沒(méi)有任何問(wèn)題,但是在Verilog HDL的環(huán)境下編譯就會(huì)導(dǎo)致綜合后的資源嚴(yán)重浪費(fèi)。
         
第三 同步設(shè)計(jì)原則
         
同步電路和異步電路是FPGA設(shè)計(jì)的兩種基本電路結(jié)構(gòu)形式。
         
異步電路的最大缺點(diǎn)是會(huì)產(chǎn)生毛刺。同步設(shè)計(jì)的核心電路是由各種觸發(fā)器構(gòu)成的。這類電路的任何輸出都是在某個(gè)時(shí)鐘的邊沿驅(qū)動(dòng)觸發(fā)器產(chǎn)生的。所以,同步設(shè)計(jì)可以很好地避免毛刺的產(chǎn)生。
 
(六) FPGA設(shè)計(jì)的主要應(yīng)用
         
1、電路設(shè)計(jì)
         
連接邏輯,控制邏輯是FPGA早期發(fā)揮作用比較大的領(lǐng)域也是FPGA應(yīng)用的基石。事實(shí)上在電路設(shè)計(jì) 中應(yīng)用FPGA的難度還是比較大的這要求開(kāi)發(fā)者要具備相應(yīng)的硬件知識(shí)(電路知識(shí))和軟件應(yīng)用能力(開(kāi)發(fā)工具)這方面的人才總是緊缺的,往往都從事新技術(shù), 新產(chǎn)品的開(kāi)發(fā)成功的產(chǎn)品將變成市場(chǎng)主流基礎(chǔ)產(chǎn)品供產(chǎn)品設(shè)計(jì)者應(yīng)用在不遠(yuǎn)的將來(lái),通用和專用IP的設(shè)計(jì)將成為一個(gè)熱門行業(yè)!搞電路設(shè)計(jì)的前提是必須要具備一 定的硬件知識(shí)。在這個(gè)層面,干重于學(xué),當(dāng)然,快速入門是很重要的,越好的位子越不等人電路開(kāi)發(fā)是黃金飯碗。
   
2、產(chǎn)品設(shè)計(jì)
         
把相對(duì)成熟的技術(shù)應(yīng)用到某些特定領(lǐng)域如通訊,視頻,信息處理等等開(kāi)發(fā)出滿足行業(yè)需要并能被行業(yè)客戶 接受的產(chǎn)品這方面主要是FPGA技術(shù)和專業(yè)技術(shù)的結(jié)合問(wèn)題,另外還有就是與專業(yè)客戶的界面問(wèn)題產(chǎn)品設(shè)計(jì)還包括專業(yè)工具類產(chǎn)品及民用產(chǎn)品,前者重點(diǎn)在性能, 后者對(duì)價(jià)格敏感產(chǎn)品設(shè)計(jì)以實(shí)現(xiàn)產(chǎn)品功能為主要目的,F(xiàn)PGA技術(shù)是一個(gè)實(shí)現(xiàn)手段在這個(gè)領(lǐng)域,F(xiàn)PGA因?yàn)榫邆浣涌?,控制,功能IP,內(nèi)嵌CPU等特點(diǎn)有條 件實(shí)現(xiàn)一個(gè)構(gòu)造簡(jiǎn)單,固化程度高,功能全面的系統(tǒng)產(chǎn)品設(shè)計(jì)將是FPGA技術(shù)應(yīng)用最廣大的市場(chǎng),具有極大的爆發(fā)性的需求空間產(chǎn)品設(shè)計(jì)對(duì)技術(shù)人員的要求比較 高,路途也比較漫長(zhǎng)不過(guò)現(xiàn)在整個(gè)行業(yè)正處在組建“首發(fā)團(tuán)隊(duì)”的狀態(tài),只要加入,前途光明產(chǎn)品設(shè)計(jì)是一種職業(yè)發(fā)展方向定位,不是簡(jiǎn)單的愛(ài)好就能做到的!產(chǎn)品 設(shè)計(jì)領(lǐng)域會(huì)造就大量的企業(yè)和企業(yè)家,是一個(gè)發(fā)展熱點(diǎn)和機(jī)遇。
         
3、系統(tǒng)級(jí)
         
系統(tǒng)級(jí)的應(yīng)用是FPGA與傳統(tǒng)的計(jì)算機(jī)技術(shù)結(jié)合,實(shí)現(xiàn)一種FPGA版的計(jì)算機(jī)系統(tǒng),實(shí)現(xiàn)一個(gè)基本環(huán)境,在這個(gè)平臺(tái)上跑LINUX等系統(tǒng),這個(gè)系統(tǒng)也就支持各種標(biāo)準(zhǔn)外設(shè)和功能接口(如圖象接口)了這對(duì)于快速構(gòu)成FPGA大型系統(tǒng)來(lái)講是很有幫助的。這種“山寨”味很濃的系統(tǒng)早期優(yōu)勢(shì)不一定很明顯,類似ARM系統(tǒng)的境況但若能慢慢發(fā)揮出FPGA的優(yōu)勢(shì),逐漸實(shí)現(xiàn)一些特色系統(tǒng)也是一種發(fā)展方向。若在系統(tǒng)級(jí)應(yīng)用中,開(kāi)發(fā)人員不具備系統(tǒng)的擴(kuò)充開(kāi)發(fā)能力,只是搞搞編程是沒(méi)什么意義的,當(dāng)然設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)是另一種情況,搞系統(tǒng)級(jí)應(yīng)用看似起點(diǎn)高,但不具備深層開(kāi)發(fā)能力,很可能會(huì)變成愛(ài)好者,就如很多人會(huì)做網(wǎng)頁(yè)但不能稱做會(huì)編程。類似以上是幾點(diǎn)個(gè)人觀點(diǎn),希望能幫助想學(xué)FPGA但很茫然無(wú)措的人理一理思路。這是一個(gè)不錯(cuò)的行業(yè),有很好的個(gè)人成功機(jī)會(huì)。但也肯定是一個(gè)競(jìng)爭(zhēng)很激烈的行業(yè),關(guān)鍵看的就是速度和深度當(dāng)然還有市場(chǎng)適應(yīng)能力。
          
以上,我們了解到了FPGA基礎(chǔ)知識(shí),雖然FPGA入門簡(jiǎn)單精通難,但是若要想入門,買一塊開(kāi)發(fā)板跟著例程走一遍,很多人都能在很短的時(shí)間內(nèi)熟悉開(kāi)發(fā)軟件的操作方法并且點(diǎn)亮開(kāi)發(fā)板上的LED或者再實(shí)現(xiàn)個(gè)跑馬燈什么的。但是再往后進(jìn)步往往就進(jìn)展很慢。上面提到的六方面是FPGA入門的基礎(chǔ)知識(shí),希望能夠?yàn)閷W(xué)習(xí)FPGA的人帶來(lái)幫助。
 
 
 
 
 
推薦閱讀:


非常靈活的系統(tǒng)故障保護(hù)電路設(shè)計(jì)方案
如何通過(guò)元件擺放來(lái)改善電路板的EMI?
多層陶瓷電容器的動(dòng)態(tài)模型和演變的電路模擬
智能手機(jī)上都有哪些傳感器應(yīng)用?
超級(jí)電容技術(shù)未來(lái)讓智能手機(jī)續(xù)航徹底變樣

 
 
要采購(gòu)工具么,點(diǎn)這里了解一下價(jià)格!
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書(shū)下載更多>>
熱門搜索
?

關(guān)閉

?

關(guān)閉