fpga(field-program mable gate array),即現(xiàn)場(chǎng)可編程門(mén)陣列,它是在pal、gal、cpld等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專(zhuān)用集成電路(asic)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門(mén)電路數(shù)有限的缺點(diǎn)。所以,要想玩轉(zhuǎn)fpga,就必須理解fpga內(nèi)部的工作原理,學(xué)習(xí)如何利用這些單元實(shí)現(xiàn)復(fù)雜的邏輯設(shè)計(jì)。
一、fpga的工作原理
fpga一般來(lái)說(shuō)比asic(專(zhuān)用集成芯片)的速度要慢,無(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è)類(lèi)似于asic的芯片上。
fpga采用了邏輯單元陣列l(wèi)ca(logic cell array)這樣一個(gè)概念,內(nèi)部包括可配置邏輯模塊clb(configurable logic block)、輸出輸入模塊iob(input output block)和內(nèi)部連線(xiàn)(interconnect)三個(gè)部分。 現(xiàn)場(chǎng)可編程門(mén)陣列(fpga)是可編程器件,與傳統(tǒng)邏輯電路和 門(mén)陣列(如pal,gal及cpld器件)相比,fpga具有不同的結(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í)序邏輯功能的基本邏輯單元模塊,這些模塊間利用 金屬連線(xiàn)互相連接或連接到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)的功能,fpga允許無(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的工程師,最后一般都是專(zhuān)攻算法了,這些基礎(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的配置模式
fpga有多種配置模式:并行主模式為一片fpga加一片eprom的方式;主從模式可以支持一片prom編程多片fpga;串行模式可以采用串行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不同,fpga設(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ì)中,流水線(xiàn)設(shè)計(jì)常常是必須用到的技術(shù)。在流水線(xiàn)的設(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é)果不正確或者 不理想。
在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)成的。這類(lèi)電路的任何輸出都是在某個(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),通用和專(zhuān)用ip的設(shè)計(jì)將成為一個(gè)熱門(mén)行業(yè)!搞電路設(shè)計(jì)的前提是必須要具備一 定的硬件知識(shí)。在這個(gè)層面,干重于學(xué),當(dāng)然,快速入門(mén)是很重要的,越好的位子越不等人電路開(kāi)發(fā)是黃金飯碗。
2、產(chǎn)品設(shè)計(jì)
把相對(duì)成熟的技術(shù)應(yīng)用到某些特定領(lǐng)域如通訊,視頻,信息處理等等開(kāi)發(fā)出滿(mǎn)足行業(yè)需要并能被行業(yè)客戶(hù) 接受的產(chǎn)品這方面主要是fpga技術(shù)和專(zhuān)業(yè)技術(shù)的結(jié)合問(wèn)題,另外還有就是與專(zhuān)業(yè)客戶(hù)的界面問(wèn)題產(chǎn)品設(shè)計(jì)還包括專(zhuān)業(yè)工具類(lèi)產(chǎn)品及民用產(chǎn)品,前者重點(diǎn)在性能, 后者對(duì)價(jià)格敏感產(chǎn)品設(shè)計(jì)以實(shí)現(xiàn)產(chǎn)品功能為主要目的,fpga技術(shù)是一個(gè)實(shí)現(xiàn)手段在這個(gè)領(lǐng)域,fpga因?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ì)不一定很明顯,類(lèi)似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è)但不能稱(chēng)做會(huì)編程。類(lèi)似以上是幾點(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)能力。