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