《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 解決方案 > 高人詳解FPGA學(xué)習的四大要點,!

高人詳解FPGA學(xué)習的四大要點,!

2016-09-02
關(guān)鍵詞: FPGA VHDL Verilog

1,、不熟悉FPGA的內(nèi)部結(jié)構(gòu),不了解可編程邏輯器件的基本原理,。
       FPGA為什么是可以編程的?恐怕很多菜鳥不知道,,他們也不想知道,。因為他們覺得這是無關(guān)緊要的。他們潛意識的認為可編程嘛,,肯定就是像寫軟件一樣啦,。軟 件編程的思想根深蒂固,,看到Verilog或者VHDL就像看到C語言或者其它軟件編程語言一樣。一條條的讀,,一條條的分析,。如果這些菜鳥們始終拒絕去了 解為什么FPGA是可以編程的,不去了解FPGA的內(nèi)部結(jié)構(gòu),,要想學(xué)會FPGA恐怕是天方夜譚,。雖然現(xiàn)在EDA軟件已經(jīng)非常先進,像寫軟件那樣照貓畫虎也 能綜合出點東西,,但也許只有天知道EDA軟件最后綜合出來的到底是什么,。也許點個燈,跑個馬還行,。這樣就是為什么很多菜鳥學(xué)了N久以后依然是一個菜鳥的原 因,。那么FPGA為什么是可以“編程”的呢?首先來了解一下什么叫“程”,。其實“程”只不過是一堆具有一定含義的01編碼而已,。編程,其實就是編寫這些 01編碼,。只不過我們現(xiàn)在有了很多開發(fā)工具,,通常都不是直接編寫這些01編碼,而是以高級語言的形式來編寫,,最后由開發(fā)工具轉(zhuǎn)換為這種01編碼而已,。對于 軟件編程而言,處理器會有一個專門的譯碼電路逐條把這些01編碼翻譯為各種控制信號,,然后控制其內(nèi)部的電路完成一個個的運算或者是其它操作,。所以軟件是一 條一條的讀,因為軟件的操作是一步一步完成的,。而FPGA的可編程,,本質(zhì)也是依靠這些01編碼實現(xiàn)其功能的改變,但不同的是FPGA之所以可以完成不同的 功能,,不是依靠像軟件那樣將01編碼翻譯出來再去控制一個運算電路,,F(xiàn)PGA里面沒有這些東西。FPGA內(nèi)部主要三塊:可編程的邏輯單元,、可編程的連線和 可編程的IO模塊,。可編程的邏輯單元是什么,?其基本結(jié)構(gòu)某種存儲器(SRAM,、FLASH等)制成的4輸入或6輸入1輸出地“真值表”加上一個D觸發(fā)器構(gòu) 成。任何一個4輸入1輸出組合邏輯電路,,都有一張對應(yīng)的“真值表”,,同樣的如果用這么一個存儲器制成的4輸入1輸出地“真值表”,,只需要修改其“真值表” 內(nèi)部值就可以等效出任意4輸入1輸出的組合邏輯。這些“真值表”內(nèi)部值是什么,?就是那些01編碼而已,。如果要實現(xiàn)時序邏輯電路怎么辦?這不又D觸發(fā)器嘛,, 任何的時序邏輯都可以轉(zhuǎn)換為組合邏輯+D觸發(fā)器來完成,。但這畢竟只實現(xiàn)了4輸入1輸出的邏輯電路而已,通常邏輯電路的規(guī)模那是相當?shù)拇笈?。那怎么辦呢,?這 個時候就需要用到可編程連線了。在這些連線上有很多用存儲器控制的鏈接點,,通過改寫對應(yīng)存儲器的值就可以確定哪些線是連上的而哪些線是斷開的,。這就可以把 很多可編程邏輯單元組合起來形成大型的邏輯電路。最后就是可編程的IO,,這其實是FPGA作為芯片級使用必須要注意的,。任何芯片都必然有輸入引腳和輸出引 腳。有可編程的IO可以任意的定義某個非專用引腳(FPGA中有專門的非用戶可使用的測試,、下載用引腳)為輸入還是輸出,,還可以對IO的電平標準進行設(shè) 置??倸w一句話,,F(xiàn)PGA之所以可編程是因為可以通過特殊的01代碼制作成一張張“真值表”,并將這些“真值表”組合起來以實現(xiàn)大規(guī)模的邏輯功能,。不了解 FPGA內(nèi)部結(jié)構(gòu),,就不能明白最終代碼如何變到FPGA里面去的,。也就無法深入的了解如何能夠充分運用FPGA?,F(xiàn)在的FPGA,不單單是有前面講的那三 塊,,還有很多專用的硬件功能單元,,如何利用好這些單元實現(xiàn)復(fù)雜的邏輯電路設(shè)計,是從菜鳥邁向高手的路上必須要克服的障礙,。而這一切,,還是必須先從了解 FPGA內(nèi)部邏輯及其工作原理做起。

2,、錯誤理解HDL語言,,怎么看都看不出硬件結(jié)構(gòu)。
       HDL語言的英語全稱是:Hardware Description Language,,注意這個單詞Description,,而不是Design,。老外為什么要用Description這個詞而不是Design呢?因為 HDL確實不是用用來設(shè)計硬件的,,而僅僅是用來描述硬件的,。描述這個詞精確地反映了HDL語言的本質(zhì),HDL語言不過是已知硬件電路的文本表現(xiàn)形式而已,, 只是將以后的電路用文本的形式描述出來而已,。而在編寫語言之前,硬件電路應(yīng)該已經(jīng)被設(shè)計出來了,。語言只不過是將這種設(shè)計轉(zhuǎn)化為文字表達形式而已,。但是很多 人就不理解了,既然硬件都已經(jīng)被設(shè)計出來了,,直接拿去制作部就完了,,為什么還要轉(zhuǎn)化為文字表達形式再通過EDA工具這些麻煩的流程呢?其實這就是很多菜鳥 沒有了解設(shè)計的抽象層次的問題,,任何設(shè)計包括什么服裝,、機械、廣告設(shè)計都有一個抽象層次的問題,。就拿廣告設(shè)計來說吧,,最初的設(shè)計也許就是一個概念,設(shè)計出 這個概念也是就是一個點子而已,,離最終拍成廣告還差得很遠,。硬件設(shè)計也是有不同的抽象層次,每一個層次都需要設(shè)計,。最高的抽象層次為算法級,、然后依次是體 系結(jié)構(gòu)級、寄存器傳輸級,、門級,、物理版圖級。使用HDL的好處在于我們已經(jīng)設(shè)計好了一個寄存器傳輸級的電路,,那么用HDL描述以后轉(zhuǎn)化為文本的形式,,剩下 的向更低層次的轉(zhuǎn)換就可以讓EDA工具去做了,這就大大的降低了工作量,。這就是可綜合的概念,,也就是說在對這一抽象層次上硬件單元進行描述可以被EDA工 具理解并轉(zhuǎn)化為底層的門級電路或其他結(jié)構(gòu)的電路。在FPGA設(shè)計中,,就是在將這以抽象層級的意見描述成HDL語言,,就可以通過FPGA開發(fā)軟件轉(zhuǎn)化為問題 1中所述的FPGA內(nèi)部邏輯功能實現(xiàn)形式。HDL也可以描述更高的抽象層級如算法級或者是體系結(jié)構(gòu)級,但目前受限于EDA軟件的發(fā)展,,EDA軟件還無法理 解這么高的抽象層次,,所以HDL描述這樣抽象層級是無法被轉(zhuǎn)化為較低的抽象層級的,這也就是所謂的不可綜合,。所以在閱讀或編寫HDL語言,,尤其是可綜合的 HDL,不應(yīng)該看到的是語言本身,,而是要看到語言背后所對應(yīng)的硬件電路結(jié)構(gòu),。如果看到的HDL始終是一條條的代碼,那么這種人永遠擺脫不了菜鳥的宿命,。假 如哪一天看到的代碼不再是一行行的代碼而是一塊一塊的硬件模塊,,那么恭喜脫離了菜鳥的級別,進入不那么菜的鳥級別,。

3,、FPGA本身不算什么,一切皆在FPGA之外這一點恐怕也是很多學(xué)FPGA的菜鳥最難理解的地方,。
       FPGA是給誰用的,?很多學(xué)校解釋為給學(xué)微電子專業(yè)或者集成電路設(shè)計專業(yè)的學(xué)生用的,其實這不過是很多學(xué)校受資金限制,,賣不起專業(yè)的集成電路設(shè)計工具而用 FPGA工具替代而已,。其實FPGA是給設(shè)計電子系統(tǒng)的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個電子設(shè)備,,如基站,、機頂盒、視頻 監(jiān)控設(shè)備等,。當現(xiàn)有芯片無法滿足系統(tǒng)的需求時,,就需要用FPGA來快速的定義一個能用的芯片。前面說了,,F(xiàn)PGA里面無法就是一些“真值表”,、觸發(fā)器、各 種連線以及一些硬件資源,,電子系統(tǒng)工程師使用FPGA進行設(shè)計時無非就是考慮如何將這些以后資源組合起來實現(xiàn)一定的邏輯功能而已,,而不必像IC設(shè)計工程師 那樣一直要關(guān)注到最后芯片是不是能夠被制造出來。本質(zhì)上和利用現(xiàn)有芯片組合成不同的電子系統(tǒng)沒有區(qū)別,,只是需要關(guān)注更底層的資源而已。要想把FPGA用起 來還是簡單的,,因為無非就是那些資源,,在理解了前面兩點再搞個實驗板,跑跑實驗,做點簡單的東西是可以的,。而真正要把FPGA用好,,那光懂點FPGA知識 就遠遠不夠了。因為最終要讓FPGA里面的資源如何組合,,實現(xiàn)何種功能才能滿足系統(tǒng)的需要,,那就需要懂得更多更廣泛的知識。目前FPGA的應(yīng)用主要是三個 方向:第一個方向,,也是傳統(tǒng)方向主要用于通信設(shè)備的高速接口電路設(shè)計,,這一方向主要是用FPGA處理高速接口的協(xié)議,并完成高速的數(shù)據(jù)收發(fā)和交換,。這類應(yīng) 用通常要求采用具備高速收發(fā)接口的FPGA,,同時要求設(shè)計者懂得高速接口電路設(shè)計和高速數(shù)字電路板級設(shè)計,具備EMCEMI設(shè)計知識,,以及較好的模擬電路 基礎(chǔ),,需要解決在高速收發(fā)過程中產(chǎn)生的信號完整性問題。FPGA最初以及到目前最廣的應(yīng)用就是在通信領(lǐng)域,,一方面通信領(lǐng)域需要高速的通信協(xié)議處理方式,,另 一方面通信協(xié)議隨時在修改,非常不適合做成專門的芯片,。因此能夠靈活改變功能的FPGA就成為首選,。到目前為止FPGA的一半以上的應(yīng)用也是在通信行業(yè)。 第二個方向,,可以稱為數(shù)字信號處理方向或者數(shù)學(xué)計算方向,,因為很大程度上這一方向已經(jīng)大大超出了信號處理的范疇。例如早就在2006年就聽說老美將 FPGA用于金融數(shù)據(jù)分析,,后來又見到有將FPGA用于醫(yī)學(xué)數(shù)據(jù)分析的案例,。在這一方向要求FPGA設(shè)計者有一定的數(shù)學(xué)功底,能夠理解并改進較為復(fù)雜的數(shù) 學(xué)算法,,并利用FPGA內(nèi)部的各種資源使之能夠變?yōu)閷嶋H的運算電路,。目前真正投入實用的還是在通信領(lǐng)域的無線信號處理、信道編解碼以及圖像信號處理等領(lǐng) 域,,其它領(lǐng)域的研究正在開展中,,之所以沒有大量實用的主要原因還是因為學(xué)金融的、學(xué)醫(yī)學(xué)的不了解這玩意,。不過最近發(fā)現(xiàn)歐美有很多電子工程,、計算機類的博士 轉(zhuǎn)入到金融行業(yè),開展金融信號處理,,相信隨著轉(zhuǎn)入的人增加,,F(xiàn)PGA在其它領(lǐng)域的數(shù)學(xué)計算功能會更好的發(fā)揮出來,而我也有意做一些這些方面的研究。不過國 內(nèi)學(xué)金融的,、學(xué)醫(yī)的恐怕連數(shù)學(xué)都很少用到,,就不用說用FPGA來幫助他們完成數(shù)學(xué)_運算了,這個問題只有再議了,。第三個方向就是所謂的SOPC方向,,其實 嚴格意義上來說這個已經(jīng)在FPGA設(shè)計的范疇之內(nèi),只不過是利用FPGA這個平臺搭建的一個嵌入式系統(tǒng)的底層硬件環(huán)境,,然后設(shè)計者主要是在上面進行嵌入式 軟件開發(fā)而已,。設(shè)計對于FPGA本身的設(shè)計時相當少的。但如果涉及到需要在FPGA做專門的算法加速,,實際上需要用到第二個方向的知識,,而如果需要設(shè)計專 用的接口電路則需要用到第一個方向的知識。就目前SOPC方向發(fā)展其實遠不如第一和第二個方向,,其主要原因是因為SOPC以FPGA為主,,或者是在 FPGA內(nèi)部的資源實現(xiàn)一個“軟”的處理器,或者是在FPGA內(nèi)部嵌入一個處理器核,。但大多數(shù)的嵌入式設(shè)計卻是以軟件為核心,,以現(xiàn)有的硬件發(fā)展情況來看, 多數(shù)情況下的接口都已經(jīng)標準化,,并不需要那么大的FPGA邏輯資源去設(shè)計太過復(fù)雜的接口,。而且就目前看來SOPC相關(guān)的開發(fā)工具還非常的不完善,以ARM 為代表的各類嵌入式處理器開發(fā)工具卻早已深入人心,,大多數(shù)以ARM為核心的SOC芯片提供了大多數(shù)標準的接口,,大量成系列的單片機嵌入式處理器提供了相關(guān) 行業(yè)所需要的硬件加速電路,需要專門定制硬件場合確實很少,。通常是在一些特種行業(yè)才會在這方面有非常迫切的需求,。即使目前Xilinx將ARM的硬核加入 到FPGA里面,相信目前的情況不會有太大改觀,,不要忘了很多老掉牙的8位單片機還在嵌入式領(lǐng)域混呢,,嵌入式主要不是靠硬件的差異而更多的是靠軟件的差異 來體現(xiàn)價值的。我曾經(jīng)看好的是cypress的Psoc這一想法,。和SOPC系列不同,,Psoc的思想史載SOC芯片里面去嵌入那么一小塊FPGA,那這 樣其實可以滿足嵌入式的那些微小的硬件接口差異,,比如某個運用需要4個USB,,而通常的處理器不會提供那么多,就可以用這么一塊FPGA來提供多的USB 接口,。而另一種運用需要6個UART,,也可以用同樣的方法完成,。對于嵌入式設(shè)計公司來說他們只需要備貨一種芯片,,就可以滿足這些設(shè)計中各種微小的差異變化 要的差異化仍然是通過軟件來完成,。但目前cypress過于封閉,如果其采用ARM作為處理器內(nèi)核,,借助其完整的工具鏈,。同時開放IP合作,讓大量的第三 方為它提供IP設(shè)計,,其實是很有希望的,。但目前cypress的日子怕不太好過,Psoc的思想也不知道何時能夠發(fā)光,。

4,、數(shù)字邏輯知識是根本。
       無論是FPGA的哪個方向,,都離不開數(shù)字邏輯知識的支撐,。FPGA說白了是一種實現(xiàn)數(shù)字邏輯的方式而已。如果連最基本的數(shù)字邏輯的知識都有問題,,學(xué)習 FPGA的愿望只是空中樓閣而已,。而這,恰恰是很多菜鳥最不愿意去面對的問題,。數(shù)字邏輯是任何電子電氣類專業(yè)的專業(yè)基礎(chǔ)知識,,也是必須要學(xué)好的一門課。很 多人無非是學(xué)習了,,考個試,,完了。如果不能將數(shù)字邏輯知識爛熟于心,,養(yǎng)成良好的設(shè)計習慣,,學(xué)FPGA到最后仍然是霧里看花水中望月,始終是一場空的,。以上 四條只是我目前總結(jié)菜鳥們在學(xué)習FPGA時所最容易跑偏的地方,,F(xiàn)PGA的學(xué)習其實就像學(xué)習圍棋一樣,學(xué)會如何在棋盤上落子很容易,,成為一位高手卻是難上 加難,。要真成為李昌鎬那樣的神一般的選手,除了靠刻苦專研,,恐怕還確實得要一點天賦,。

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點,。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]