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