《FPGA全程进阶---实战演练》第一章之如何学习FPGA
?????? 對(duì)于很多初學(xué)者,大部分都是急于求成,熟不知越是急于求成,最終越是學(xué)無所成,到頭來兩手空空,要學(xué)好FPGA,必須弄懂FPGA本質(zhì)的一些內(nèi)容。
1.FPGA內(nèi)部結(jié)構(gòu)及基本原理
????? FPGA是可以編程的,必須通過了解FPGA內(nèi)部結(jié)構(gòu)才能很好地理解為什么FPGA是可以編程的。學(xué)習(xí)FPGA不能像學(xué)習(xí)其他CPU芯片一樣,看到Verilog或者VHDL就像看到C語言或者其它軟件編程語言一樣。一條條的讀,一條條的分析。要沖破軟件編程的思想。
????? 那么FPGA為什么是可以“編程”的呢?首先來了解一下什么叫“程”。啟示“程”只不過是一堆具有一定含義的01編碼而已。編程,其實(shí)就是編寫這些01編碼。只不過我們現(xiàn)在有了很多開發(fā)工具,通常都不是直接編寫這些01編碼,而是以高級(jí)語言的形式來編寫,最后由開發(fā)工具轉(zhuǎn)換為這種01編碼而已。對(duì)于軟件編程而言,處理器會(huì)有一個(gè)專門的譯碼電路逐條把這些01編碼翻譯為各種控制信號(hào),然后控制其內(nèi)部的電路完成一個(gè)個(gè)的運(yùn)算或者是其它操作。所以軟件是一條一條的讀,因?yàn)檐浖牟僮魇且徊揭徊酵瓿傻摹6鳩PGA的可編程,本質(zhì)也是依靠這些01編碼實(shí)現(xiàn)其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來再去控制一個(gè)運(yùn)算電路,FPGA里面沒有這些東西。圖1.5是Cyclone IV代芯片內(nèi)部結(jié)構(gòu)。
圖1.5 Cyclone IV內(nèi)部結(jié)構(gòu)
?????? FPGA內(nèi)部主要三塊:可編程的邏輯單元、可編程的連線和可編程的IO模塊。可編程的邏輯單元是什么?其基本結(jié)構(gòu)某種存儲(chǔ)器(SRAM、FLASH等)制成的4輸入或6輸入1輸出地“真值表”加上一個(gè)D觸發(fā)器構(gòu)成。任何一個(gè)4輸入1輸出組合邏輯電路,都有一張對(duì)應(yīng)的“真值表”,同樣的如果用這么一個(gè)存儲(chǔ)器制成的4輸入1輸出地“真值表”,只需要修改其“真值表”內(nèi)部值就可以等效出任意4輸入1輸出的組合邏輯。這些“真值表”內(nèi)部值是什么?就是那些01編碼而已。如果要實(shí)現(xiàn)時(shí)序邏輯電路怎么辦?這不又D觸發(fā)器嘛,任何的時(shí)序邏輯都可以轉(zhuǎn)換為組合邏輯+D觸發(fā)器來完成。但這畢竟只實(shí)現(xiàn)了4輸入1輸出的邏輯電路而已,通常邏輯電路的規(guī)模那是相當(dāng)?shù)拇笈丁D窃趺崔k呢?這個(gè)時(shí)候就需要用到可編程連線了。在這些連線上有很多用存儲(chǔ)器控制的鏈接點(diǎn),通過改寫對(duì)應(yīng)存儲(chǔ)器的值就可以確定哪些線是連上的而哪些線是斷開的。這就可以把很多可編程邏輯單元組合起來形成大型的邏輯電路。最后就是可編程的IO,這其實(shí)是FPGA作為芯片級(jí)使用必須要注意的。任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個(gè)非專用引腳(FPGA中有專門的非用戶可使用的測(cè)試、下載用引腳)為輸入還是輸出,還可以對(duì)IO的電平標(biāo)準(zhǔn)進(jìn)行設(shè)置。總歸一句話,FPGA之所以可編程是因?yàn)榭梢酝ㄟ^特殊的01代碼制作成一張張“真值表”,并將這些“真值表”組合起來以實(shí)現(xiàn)大規(guī)模的邏輯功能。圖1.6是Cyclone IV的FPGA內(nèi)部LE示意圖。不了解FPGA內(nèi)部結(jié)構(gòu),就不能明白最終代碼如何變到FPGA里面去的。也就無法深入的了解如何能夠充分運(yùn)用FPGA。現(xiàn)在的FPGA,不單單是有前面講的那三塊,還有很多專用的硬件功能單元,如何利用好這些單元實(shí)現(xiàn)復(fù)雜的邏輯電路設(shè)計(jì),是從菜鳥邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內(nèi)部邏輯及其工作原理做起。
圖1.6 Cyclone的LE結(jié)構(gòu)
2.正確理解verilog/VHDL語言以及和硬件結(jié)構(gòu)的關(guān)系
?????? HDL語言的英語全稱是:Hardware Description Language,注意這個(gè)單詞Description,而不是Design。為什么要用Description這個(gè)詞而不是Design呢?因?yàn)镠DL確實(shí)不是用用來設(shè)計(jì)硬件的,而僅僅是用來描述硬件的。描述這個(gè)詞精確地反映了HDL語言的本質(zhì),HDL語言不過是已知硬件電路的文本表現(xiàn)形式而已,只是將以后的電路用文本的形式描述出來而已。而在編寫語言之前,硬件電路應(yīng)該已經(jīng)被設(shè)計(jì)出來了。語言只不過是將這種設(shè)計(jì)轉(zhuǎn)化為文字表達(dá)形式而已。但是很多人就不理解了,既然硬件都已經(jīng)被設(shè)計(jì)出來了,直接拿去制作部就完了,為什么還要轉(zhuǎn)化為文字表達(dá)形式再通過EDA工具這些麻煩的流程呢?其實(shí)這就是很多菜鳥沒有了解設(shè)計(jì)的抽象層次的問題,任何設(shè)計(jì)包括什么服裝、機(jī)械、廣告設(shè)計(jì)都有一個(gè)抽象層次的問題。就拿廣告設(shè)計(jì)來說吧,最初的設(shè)計(jì)也許就是一個(gè)概念,設(shè)計(jì)出這個(gè)概念也是就是一個(gè)點(diǎn)子而已,離最終拍成廣告還差得很遠(yuǎn)。硬件設(shè)計(jì)也是有不同的抽象層次,每一個(gè)層次都需要設(shè)計(jì)。
?????? 最高的抽象層次為算法級(jí)、然后依次是體系結(jié)構(gòu)級(jí)、寄存器傳輸級(jí)、門級(jí)、物理版圖級(jí)。使用HDL的好處在于我們已經(jīng)設(shè)計(jì)好了一個(gè)寄存器傳輸級(jí)的電路,那么用HDL描述以后轉(zhuǎn)化為文本的形式,剩下的向更低層次的轉(zhuǎn)換就可以讓EDA工具去做了,這就大大的降低了工作量。這就是可綜合的概念,也就是說在對(duì)這一抽象層次上硬件單元進(jìn)行描述可以被EDA工具理解并轉(zhuǎn)化為底層的門級(jí)電路或其他結(jié)構(gòu)的電路。在FPGA設(shè)計(jì)中,就是在將這以抽象層級(jí)的意見描述成HDL語言,就可以通過FPGA開發(fā)軟件轉(zhuǎn)化為FPGA內(nèi)部邏輯功能實(shí)現(xiàn)形式。
?????? HDL也可以描述更高的抽象層級(jí)如算法級(jí)或者是體系結(jié)構(gòu)級(jí),但目前受限于EDA軟件的發(fā)展,EDA軟件還無法理解這么高的抽象層次,所以HDL描述這樣抽象層級(jí)是無法被轉(zhuǎn)化為較低的抽象層級(jí)的,這也就是所謂的不可綜合。所以在閱讀或編寫HDL語言,尤其是可綜合的HDL,不應(yīng)該看到的是語言本身,而是要看到語言背后所對(duì)應(yīng)的硬件電路結(jié)構(gòu)。如果看到的HDL始終是一條條的代碼,那么這種人永遠(yuǎn)擺脫不了菜鳥的宿命。假如哪一天看到的代碼不再是一行行的代碼而是一塊一塊的硬件模塊,那么恭喜脫離了菜鳥的級(jí)別,進(jìn)入不那么菜的鳥級(jí)別。
3.學(xué)以致用
????? FPGA本身不算什么,一切皆在FPGA之外這一點(diǎn)恐怕也是很多學(xué)FPGA的菜鳥最難理解的地方。FPGA是給誰用的?很多學(xué)校解釋為給學(xué)微電子專業(yè)或者集成電路設(shè)計(jì)專業(yè)的學(xué)生用的,其實(shí)這不過是很多學(xué)校受資金限制,賣不起專業(yè)的集成電路設(shè)計(jì)工具而用FPGA工具替代而已。其實(shí)FPGA是給設(shè)計(jì)電子系統(tǒng)的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個(gè)電子設(shè)備,如基站、機(jī)頂盒、視頻監(jiān)控設(shè)備等。當(dāng)現(xiàn)有芯片無法滿足系統(tǒng)的需求時(shí),就需要用FPGA來快速的定義一個(gè)能用的芯片。
????? 前面說了,FPGA里面無法就是一些“真值表”、觸發(fā)器、各種連線以及一些硬件資源,電子系統(tǒng)工程師使用FPGA進(jìn)行設(shè)計(jì)時(shí)無非就是考慮如何將這些以后資源組合起來實(shí)現(xiàn)一定的邏輯功能而已,而不必像IC設(shè)計(jì)工程師那樣一直要關(guān)注到最后芯片是不是能夠被制造出來。本質(zhì)上和利用現(xiàn)有芯片組合成不同的電子系統(tǒng)沒有區(qū)別,只是需要關(guān)注更底層的資源而已。要想把FPGA用起來還是簡單的,因?yàn)闊o非就是那些資源,在理解了前面兩點(diǎn)再搞個(gè)實(shí)驗(yàn)板,跑跑實(shí)驗(yàn),做點(diǎn)簡單的東西是可以的。而真正要把FPGA用好,那光懂點(diǎn)FPGA知識(shí)就遠(yuǎn)遠(yuǎn)不夠了。因?yàn)樽罱K要讓FPGA里面的資源如何組合,實(shí)現(xiàn)何種功能才能滿足系統(tǒng)的需要,那就需要懂得更多更廣泛的知識(shí)。
????? 對(duì)于我們學(xué)過的數(shù)字電路和模擬電路,如果連最基本的數(shù)字邏輯的知識(shí)都有問題,學(xué)習(xí)FPGA的愿望只是空中樓閣而已。如果不能將數(shù)字邏輯知識(shí)爛熟于心,養(yǎng)成良好的設(shè)計(jì)習(xí)慣,學(xué)FPGA到最后仍然是霧里看花水中望月,始終是一場(chǎng)空。
轉(zhuǎn)載于:https://www.cnblogs.com/raymon-tec/p/4993754.html
總結(jié)
以上是生活随笔為你收集整理的《FPGA全程进阶---实战演练》第一章之如何学习FPGA的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编译ycm库
- 下一篇: Android studio 签名使用转