1. 程式人生 > >FPGA之初認識

FPGA之初認識

而已 nbsp lte 內部 ron 受限 ram 我們 特定

什麽是FPGA

FPGA(Field-Programmable Gate Array),即現場可編程門陣列 。看到編程兩個字碼農就笑了,不就是編程嘛,那可是我們的強項 。且慢,此編程非彼編程 。一定要把 FPGA 的編程和軟件編程區分開來 。軟件的編程,處理器會逐條的把語言翻譯成各種控制信號,去控制內部電路完成一個個運算或操作 。那麽FPGA的編程是怎麽實現的呢?無論 Altera 家還是 Xlinix 家的 FPGA,叫法有什麽差異,基本單元都相似,都是由真值表和 D 觸發器構成 。改變真值表的值就改變了邏輯功能,再通過和D觸發器組合來實現任何時序邏輯 。所以我們對 FPGA 的編程,實際上就是去修改這些真值表和連接關系,使他們組成一張專門的真值表,去實現特定的功能 。這和軟件編程一步步運行程序有本質的區別 。要想玩轉 FPGA,就必須理解 FPGA 內部的工作原理,學習如何利用這些單元實現復雜的邏輯設計 。

誰用FPGA?

FPGA是給設計電子系統的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個電子設備,如基站、機頂盒、視頻監控設備等。當現有芯片無法滿足系統的需求時,就需要用FPGA來快速的定義一個能用的芯片。前面說了,FPGA裏面無法就是一些“真值表”、觸發器、各種連線以及一些硬件資源,電子系統工程師使用FPGA進行設計時無非就是考慮如何將這些資源組合起來實現一定的邏輯功能而已。

FPGA的結構

FPGA內部主要三塊:可編程的邏輯單元、可編程的連線和 可編程的IO模塊。

可編程的邏輯單元是什麽?其基本結構是某種存儲器(SRAM、 FLASH等)制成的4輸入或6輸入1輸出地“真值表”加上一個D觸發器構成。任何一個4、1組合邏輯電路,都有一張對應的“真值表”,若用存儲器制成的4、1“真值表”,只需要修改其“真值表”內部值就可以輸出任意4、1組合邏輯。這些“真值表”內部值是什麽?就是那些01編碼而已。如果要實現時序邏輯電路怎麽辦?這不又是D觸發器嘛,任何的時序邏輯都可以轉換為組合邏輯+D觸發器來完成。

但這畢竟只實現了4輸入1輸出的邏輯電路而已,通常邏輯電路的規模那是相當的大哦。那怎麽辦呢?這個時候就需要用到可編程連線了。在這些連線上有很多用存儲器控制的鏈接點,通過改寫對應存儲器的值就可以確定哪些線是連上的而哪些線是斷開的。這就可以把很多可編程邏輯單元組合起來形成大型的邏輯電路。

最後就是可編程的IO,這其實是FPGA作為芯片級使用必須要註意的。任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個非專用引腳(FPGA中有專門的非用戶可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標準進行設置。

總歸一句話,FPGA之所以可編程是因為可以通過特殊的01代碼制作成一張張 “真值表”,並將這些“真值表”組合起來以實現大規模的邏輯功能。現在的FPGA,不單單是有前面講的那三塊,還有很多專用的硬件功能單元,如何利用好這些單元實現復雜的邏輯電路設計,是從菜鳥邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內部邏輯及其工作原理做起。

HDL語言

HDL語言的英語全稱是:Hardware Description Language,註意這個單詞Description,而不是Design。老外為什麽要用Description這個詞而不是Design呢?因為HDL確實不是用用來設計硬件的,而僅僅是用來描述硬件的。描述這個詞精確地反映了HDL語言的本質,HDL語言不過是已知硬件電路的文本表現形式而已,只是將電路用文本的形式描述出來而已。

在編寫語言之前,硬件電路應該已經被設計出來了。但是很多人就不理解了,既然硬件都已經被設計出來了,直接拿去制作部就完了,為什麽還要轉化為文字表達形式再通過EDA工具這些麻煩的流程呢?硬件設計也是有不同的抽象層次,每一個層次都需要設計。最高的抽象層次為算法級、然後依次是體系結構級、寄存器傳輸級、門級、物理版圖級。使用HDL的好處在於我們已經設計好了一個寄存器傳輸級的電路,那麽用HDL描述以後轉化為文本的形式,剩下的向更低層次的轉換就可以讓EDA工具(註)去做了,這就大大的降低了工作量。也就是說在對這一抽象層次上硬件單元進行描述可以被EDA工具(FPGA開發軟件)理解轉化為底層的門級電路或其他結構的電路(即FPGA內部邏輯功能實現形式)。

HDL也可以描述更高的抽象層級如算法級或者是體系結構級,但目前受限於EDA軟件的發展,EDA軟件還無法理解這麽高的抽象層次,所以 HDL描述這樣抽象層級是無法被轉化為較低的抽象層級的。所以在閱讀或編寫HDL語言,尤其是可綜合的HDL,不應該看到的是語言本身,而是要看到語言背後所對應的硬件電路結構。這種硬件描述語言看到的不應是一行行的代碼而是一塊一塊的硬件模塊。

數字電路基礎

說到底,FPGA 就是一堆數字邏輯組合在一起實現特定功能而已 。所以數字電路基礎知識是根本 。如果你連觸發器,組合電路,時序電路,競爭,毛刺等等基本概念還莫能兩可不清不楚的話,那玩轉 FPGA 只能是癡人說夢的幻想了 。我們必須要好好的學好數字電路基礎這門課,基本的數字電路爛熟於心 。把這些基礎打牢固,再往更深的方向發展 。什麽時候能夠從抽象的算法中提煉算法的結構,再分解成具體的模塊並通過硬件電路實現出來,這時候就算從菜鳥級別步入老鳥級別了 。

/*註釋*/

*EDA技術就是以計算機為工具,設計者在EDA軟件平臺上,用硬件描述語言VHDL完成設計文件,然後由計算機自動地完成邏輯編譯、化簡、分割、綜合、優化、布局、布線和仿真,直至對於特定目標芯片的適配編譯、邏輯映射和編程下載等工作。

*數字邏輯知識是根本,FPGA說白了是一種實現數字邏輯的方式而已。

FPGA之初認識