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