久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

如何學(xué)習(xí)fpga

時間:2019-05-15 09:21:53下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《如何學(xué)習(xí)fpga》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《如何學(xué)習(xí)fpga》。

第一篇:如何學(xué)習(xí)fpga

如何學(xué)習(xí)FPGA

關(guān)鍵詞:工作人員, 硬件, 設(shè)計, FPGA

掌握FPGA可以找到一份很好的工作,對于有經(jīng)驗(yàn)的工作人員,使用FPGA可以讓設(shè)計變得非常有靈活性。掌握了FPGA設(shè)計,單板硬件設(shè)計就非常容易(不是系統(tǒng)設(shè)計),特別是上大學(xué)時如同天書的邏輯時序圖,看起來就非常親切。但FPGA入門卻有一定難度,因?yàn)樗幌褴浖O(shè)計,只要有一臺計算機(jī),幾乎就可以完成所有的設(shè)計。FPGA設(shè)計與硬件直接相關(guān),需要實(shí)實(shí)在在的調(diào)試儀器,譬如示波器等。這些硬件設(shè)備一般比較昂貴,這就造成一定的入門門檻,新人在入門時遇到一點(diǎn)問題或者困難,由于沒有調(diào)試設(shè)備,無法定位問題,最后可能就會放棄。其實(shí)這時如果有人稍微指點(diǎn)一下,這個門檻很容易就過去。我用FPGA做設(shè)計很多年了,遠(yuǎn)達(dá)不到精通的境界,只是熟悉使用,在這里把我對FPGA學(xué)習(xí)步驟理解寫出來,僅是作為一個參考,不對的地方,歡迎大家討論和指正。

FPGA學(xué)習(xí)步驟

1、工欲善其事,必先利其器。

計算機(jī)必不可少。目前FPGA應(yīng)用較多的是Altera和xilinx這兩個公司,可以選擇安裝quartusII或者ISE軟件。這是必備的軟件環(huán)境。

硬件環(huán)境還需要下載器、目標(biāo)板。雖然有人說沒有下載器和目標(biāo)板也可學(xué)習(xí)fpga,但那總是紙上談兵。這就像談女朋友,總是嘴上說說,通個電話,連個手都沒牽,能說人家是你朋友?雖說搭建硬件環(huán)境需要花費(fèi),但想想,硬件環(huán)境至多幾百元錢,你要真的掌握FPGA的設(shè)計,起薪比別人都不止高出這么多。這點(diǎn)花費(fèi)算什么?

FPGA學(xué)習(xí)步驟

2、熟悉verilog語言或者vhdl語言,熟練使用quartusII或者ISE軟件。

VHDL和verilog各有優(yōu)點(diǎn),選擇一個,建議選擇verilog。熟練使用設(shè)計軟件,知道怎樣編譯、仿真、下載等過程。

起步階段不希望報一些培訓(xùn)班,除非你有錢,或者運(yùn)氣好,碰到一個水平高、又想把自己的經(jīng)驗(yàn)和別人共享的培訓(xùn)老師,不然的話,培訓(xùn)完后總會感覺自己是一個冤大頭。入門階段可以在利用網(wǎng)絡(luò)資源完成。

FPGA學(xué)習(xí)步驟

3、設(shè)計一個小代碼,下載到目標(biāo)板看看結(jié)果

此時可以設(shè)計一個最簡答的程序,譬如點(diǎn)燈。如果燈在閃爍了,表示基本入門了。如果此時能夠下載到FPGA外掛的flash,F(xiàn)PGA程序能夠從flash啟動,表明FPGA的最簡單設(shè)計你已經(jīng)成功,可以到下一步。

FPGA學(xué)習(xí)步驟

4、設(shè)計稍微復(fù)雜的代碼,下載到目標(biāo)板看看結(jié)果。

可以設(shè)計一個UART程序,網(wǎng)上有參考,你要懂RS232協(xié)議和FPGA內(nèi)置的邏輯分析儀。網(wǎng)上下載一個串口調(diào)試助手,調(diào)試一番,如果通信成功了,恭喜,水平有提高。進(jìn)入下一步。

FPGA學(xué)習(xí)步驟

5、設(shè)計復(fù)雜的代碼,下載到目標(biāo)板看看結(jié)果。

譬如sdram的程序,網(wǎng)上也有參考,這個設(shè)計難度有點(diǎn)大。可用串口來調(diào)試sdram,把串口的數(shù)據(jù)存儲到sdram,然后讀回,如果成功,那你就比較熟悉FPGA設(shè)計了

FPGA學(xué)習(xí)步驟

6、設(shè)計高速接口,譬如ddr2或者高速串行接口

這要對FPGA的物理特性非常了解,而且要懂得是時序約束等設(shè)計方法,要看大量的原廠文檔,這部分成功了,那就對FPGA的物理接口掌握很深,你就是設(shè)計高手了

FPGA學(xué)習(xí)步驟

7、設(shè)計一個復(fù)雜的協(xié)議

譬如USB、PCIexpress、圖像編解碼等,鍛煉對系統(tǒng)的整體把握和邏輯劃分。完成這些,你就是一個一流的高手、FPGA學(xué)習(xí)步驟

8、學(xué)習(xí)再學(xué)習(xí)

學(xué)習(xí)什么,我也不知道,我只知道“學(xué)無止境,山外有山”。

現(xiàn)在很多FPGA工程師,沒找到合適,我覺得很多人從開始的時候就誤入歧途了,對新手學(xué)習(xí)FPGA設(shè)計我也說一點(diǎn)看法吧。我認(rèn)為要從基礎(chǔ)開始做,基礎(chǔ)牢,才有成為高手的可能。

我覺得FPGA學(xué)習(xí)有以下幾步必須要走:

第一步:學(xué)習(xí)了解FPGA結(jié)構(gòu),F(xiàn)PGA到底是什么東西,芯片里面有什么,不要開始就拿個開發(fā)板照著別人的東西去編程。很多開發(fā)板的程序?qū)懙暮軤€,我也做過一段時間的開發(fā)板設(shè)計,我覺得很大程度上,開發(fā)板在誤人子弟。不過原廠提供的正品開發(fā)板,代碼很優(yōu)秀的,可以借鑒。只有了解了FPGA內(nèi)部的結(jié)構(gòu)才能明白為什么寫Verilog和寫C整體思路是不一樣的。

第二步:掌握FPGA設(shè)計的流程。了解每一步在做什么,為什么要那么做。很多人都是不就是那幾步嗎,有什么奇怪的?呵呵,我想至少有一半以上的人不知道synthesize和traslate的區(qū)別吧。

了解了FPGA的結(jié)構(gòu)和設(shè)計流程才有可能知道怎么去優(yōu)化設(shè)計,提高速度,減少資源,不要急躁,不要去在為選擇什么語言和選擇哪個公司的芯片上下功夫。語言只是一個表達(dá)的方式,重要的是你的思維,沒有一個好的指導(dǎo)思想,語言用得再好,不過是個懂語言的人。

第三步:開始學(xué)習(xí)代碼了。我建議要學(xué)代碼的人都去Altera或Xilinx的網(wǎng)站上下原廠工程師的代碼學(xué)習(xí)。不要一開始就走入誤區(qū)。

第四步:template很重要。能不能高效利用FPGA資源,一是了解fpga結(jié)構(gòu),二是了解欲實(shí)現(xiàn)的邏輯功能和基本機(jī)構(gòu),三是使用正確的模板。FPGA內(nèi)部器件種類相對較單一,用好模板,你的邏輯才能被高效的綜合成FPGA擅長表達(dá)的結(jié)構(gòu):)

做FPGA主要是要有電路的思想,作為初學(xué)者,往往對器件可能不是熟悉,那么應(yīng)該對于數(shù)字電路的知識很熟悉吧,F(xiàn)PGA中是由觸發(fā)器和查找表以及互聯(lián)線等基本結(jié)構(gòu)組成的,其實(shí)在我們在代碼里面能夠看到的就是與非門以及觸發(fā)器,不要把verilog和c語言等同起來,根本就是不同的東西,沒有什么可比性,在寫一句程序的時候應(yīng)該想到出來的是一個什么樣的電路,計數(shù)

器 選擇器 三態(tài)門等等,理解時序,邏輯是一拍一拍的東西,在設(shè)計初期想的不是很清楚的時候可以畫畫時序圖,這樣思路會更加的清晰,還有就是仿真很重要,不要寫完程序就去往FPGA中去加載,首先要仿真,尤其是對比較大型一點(diǎn)的程序,想像自己是在做asic,是沒有二次機(jī)會的,所以一定要把仿真做好,還有很多新手對于語言的學(xué)習(xí)不知道選vhdl好還是verilog好,個人偏好verilog,當(dāng)然不是說vhdl不好,反正寫出來的都是電路,那當(dāng)然就不要在語言的語法上面花太多的功夫了,verilog 言簡意賅assign always case if else 掌握這些幾乎可以寫出90%的電路了,上面是我對FPGA學(xué)習(xí)的一些愚見,希望對大家有所幫助。

第二篇:淺談FPGA學(xué)習(xí)

為什么大量的人會覺得FPGA難學(xué)?一位高人決心開貼來詳細(xì)講一下菜鳥覺得FPGA難學(xué)的幾大原因。

1、不熟悉FPGA的內(nèi)部結(jié)構(gòu),不了解可編程邏輯器件的基本原理。

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

2、錯誤理解HDL語言,怎么看都看不出硬件結(jié)構(gòu)。

HDL語言的英語全稱是:Hardware Description Language,注意這個單詞Description,而不是Design。老外為什么要用Description這個詞而不是Design呢?因?yàn)镠DL確實(shí)不是用來設(shè)計硬件的,而僅僅是用來描述硬件的。描述這個詞精確地反映了HDL語言的本質(zhì),HDL語言不過是已知硬件電路的文本表現(xiàn)形式而已,只是將以后的電路用文本的形式描述出來而已。而在編寫語言之前,硬件電路應(yīng)該已經(jīng)被設(shè)計出來了。語言只不過是將這種設(shè)計轉(zhuǎn)化為文字表達(dá)形式而已。但是很多人就不理解了,既然硬件都已經(jīng)被設(shè)計出來了,直接拿去制作

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

3、FPGA本身不算什么,一切皆在FPGA之外這一點(diǎn)恐怕也是很多學(xué)FPGA的菜鳥最難理解的地方。

FPGA是給誰用的?很多學(xué)校解釋為給學(xué)微電子專業(yè)或者集成電路設(shè)計專業(yè)的學(xué)生用的,其實(shí)這不過是很多學(xué)校受資金限制,買不起專業(yè)的集成電路設(shè)計工具而用FPGA工具替代而已。其實(shí)FPGA是給設(shè)計電子系統(tǒng)的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個電子設(shè)備,如基站、機(jī)頂盒、視頻監(jiān)控設(shè)備等。當(dāng)現(xiàn)有芯片無法滿足系統(tǒng)的需求時,就需要用FPGA來快速的定義一個能用的芯片。前面說了,F(xiàn)PGA里面無法就是一些“真值表”、觸發(fā)器、各種連線以及一些硬件資源,電子系統(tǒng)工程師使用FPGA進(jìn)行設(shè)計時無非就是考慮如何將這些以后資源組合起來實(shí)現(xiàn)一定的邏輯功能而已,而不必像IC設(shè)計工程師那樣一直要關(guān)注到最后芯片是不是能夠被制造出來。本質(zhì)上和利用現(xiàn)有芯片組合成不同的電子系統(tǒng)沒有區(qū)別,只是需要關(guān)注更底層的資源而已。要想把FPGA用起來還是簡單的,因?yàn)闊o非就是那些資源,在理解了前面兩點(diǎn)再搞個實(shí)驗(yàn)板,跑跑實(shí)驗(yàn),做點(diǎn)簡單的東西是可以的。而真正要把FPGA用好,那光懂點(diǎn)FPGA知識就遠(yuǎn)遠(yuǎn)不夠了。因?yàn)樽罱K要讓FPGA里面的資源如何組合,實(shí)現(xiàn)何種功能才能滿足系統(tǒng)的需要,那就需要懂得更多更廣泛的知識。

目前FPGA的應(yīng)用主要是三個方向:

第一個方向,也是傳統(tǒng)方向主要用于通信設(shè)備的高速接口電路設(shè)計,這一方向主要是用FPGA處理高速接口的協(xié)議,并完成高速的數(shù)據(jù)收發(fā)和交換。這類應(yīng)用通常要求采用具備高速收發(fā)接口的FPGA,同時要求設(shè)計者懂得高速接口電路設(shè)計和高速數(shù)字電路板級設(shè)計,具備EMC/EMI設(shè)計知識,以及較好的模擬電路基礎(chǔ),需要解決在高速收發(fā)過程中產(chǎn)生的信號完整性問題。FPGA最初以及到目前最廣的應(yīng)用就是在通信領(lǐng)域,一方面通信領(lǐng)域需要高速的通信協(xié)議處理方式,另一方面通信協(xié)議隨時在修改,非常不適合做成專門的芯片。因此能夠靈活改變功能的FPGA就成為首選。到目前為止FPGA的一半以上的應(yīng)用也是在通信行業(yè)。

第二個方向,可以稱為數(shù)字信號處理方向或者數(shù)學(xué)計算方向,因?yàn)楹艽蟪潭壬线@一方向已經(jīng)大大超出了信號處理的范疇。例如早就在2006年就聽說老美將FPGA用于金融數(shù)據(jù)分析,后來又見到有將FPGA用于醫(yī)學(xué)數(shù)據(jù)分析的案例。在這一方向要求FPGA設(shè)計者有一定的數(shù)學(xué)功底,能夠理解并改進(jìn)較為復(fù)雜的數(shù)學(xué)算法,并利用FPGA內(nèi)部的各種資源使之能夠變?yōu)閷?shí)際的運(yùn)算電路。目前真正投入實(shí)用的還是在通信領(lǐng)域的無線信號處理、信道編解碼以及圖像信號處理等領(lǐng)域,其它領(lǐng)域的研究正在開展中,之所以沒有大量實(shí)用的主要原因還是因?yàn)閷W(xué)金融的、學(xué)醫(yī)學(xué)的不了解這玩意。不過最近發(fā)現(xiàn)歐美有很多電子工程、計算機(jī)類的博士轉(zhuǎn)入到金融行業(yè),開展金融信號處理,相信隨著轉(zhuǎn)入的人增加,F(xiàn)PGA在其它領(lǐng)域的數(shù)學(xué)計算功能會更好的發(fā)揮出來,而我也有意做一些這些方面的研究。不過國內(nèi)學(xué)金融的、學(xué)醫(yī)的恐怕連數(shù)學(xué)都很少用到,就不用說用FPGA來幫助他們完成數(shù)學(xué)_運(yùn)算了,這個問題只有再議了。

第三個方向,就是所謂的SOPC方向,其實(shí)嚴(yán)格意義上來說這個已經(jīng)在FPGA設(shè)計的范疇之外,只不過是利用FPGA這個平臺搭建的一個嵌入式系統(tǒng)的底層硬件環(huán)境,然后設(shè)計者主要是在上面進(jìn)行嵌入式軟件開發(fā)而已。設(shè)計對于FPGA本身來說是相當(dāng)少的。但如果涉及到需要在FPGA做專門的算法加速,實(shí)際上需要用到第二個方向的知識,而如果需要設(shè)計專用的接口電路則需要用到第一個方向的知識。

就目前SOPC方向發(fā)展其實(shí)遠(yuǎn)不如第一和第二個方向,其主要原因是因?yàn)镾OPC以FPGA為主,或者是在FPGA內(nèi)部的資源實(shí)現(xiàn)一個“軟”的處理器,或者是在FPGA內(nèi)部嵌入一個處理器核。但大多數(shù)的嵌入式設(shè)計卻是以軟件為核心,以現(xiàn)有的硬件發(fā)展情況來看,多數(shù)情況下的接口都已經(jīng)標(biāo)準(zhǔn)化,并不需要那么大的FPGA邏輯資源去設(shè)計太過復(fù)雜的接口。而且就目前看來SOPC相關(guān)的開發(fā)工具還非常的不完善,以ARM為代表的各類嵌入式處理器開發(fā)工具早已深入人心,大多數(shù)以ARM為核心的SOC芯片提供了大多數(shù)標(biāo)準(zhǔn)的接口,大量成系列的單片機(jī)/嵌入式處理器提供了相關(guān)行業(yè)所需要的硬件加速電路,需要專門定制硬件場合確實(shí)很少。通常是在一些特種行業(yè)才會在這方面有非常迫切的需求。即使目前Xilinx將ARM的硬核加入到FPGA里面,相信目前的情況不會有太大改觀,不要忘了很多老掉牙的8位單片機(jī)還在嵌入式領(lǐng)域混呢,嵌入式主要不是靠硬件的差異而更多的是靠軟件的差異來體現(xiàn)價值的。我曾經(jīng)看好的是cypress的Psoc這一想法。和SOPC系列不同,Psoc的思想是在SOC芯片里面去嵌入那么一小塊FPGA,那這樣其實(shí)可以滿足嵌入式的那些微小的硬件接口差異,比如某個運(yùn)用需要4個USB,而通常的處理器不會提供那么多,就可以用這么一塊FPGA來提供多的USB接口。而另一種運(yùn)用需要6個UART,也可以用同樣的方法完成。對于嵌入式設(shè)計公司來說他們只需要備貨一種芯片,就可以滿足這些設(shè)計中各種微小的差異變化。其主要的差異化仍然是通過軟件來完成。但目前cypress過于封閉,如果其采用ARM作為處理器內(nèi)核,借助其完整的工具鏈。同時開放IP合作,讓大量的第三方為它提供IP設(shè)計,其實(shí)是很有希望的。但目前cypress的日子怕不太好過,Psoc的思想也不知道何時能夠發(fā)光。

4、數(shù)字邏輯知識是根本。

無論是FPGA的哪個方向,都離不開數(shù)字邏輯知識的支撐。FPGA說白了是一種實(shí)現(xiàn)數(shù)

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

第三篇:FPGA學(xué)習(xí)概述

FPGA學(xué)習(xí)

我常年擔(dān)任多個有關(guān)FPGA學(xué)習(xí)研討的QQ群管理員,長期以來很多新入群的菜鳥們總是在重復(fù)的問一些非常簡單但是又讓新手困惑不解的問題。作為管理員經(jīng)常要給這些菜鳥們普及基礎(chǔ)知識,但是非常不幸的是很多菜鳥懷著一種浮躁的心態(tài)來學(xué)習(xí)FPGA,總是急于求成。再加上國內(nèi)大量有關(guān)FPGA的垃圾教材的誤導(dǎo),所以很多菜鳥始終無法入門。

為什么大量的人會覺得FPGA難學(xué)?作為著名FPGA提供商Altera授權(quán)的金牌培訓(xùn)師,本管理員決心開貼來詳細(xì)講一下菜鳥覺得FPGA難學(xué)的幾大原因。

1、不熟悉FPGA的內(nèi)部結(jié)構(gòu),不了解可編程邏輯器件的基本原理。

FPGA為什么是可以編程的?恐怕很多菜鳥不知道,他們也不想知道。因?yàn)樗麄冇X得這是無關(guān)緊要的。他們潛意識的認(rèn)為可編程嘛,肯定就是像寫軟件一樣啦。軟件編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語言或者其它軟件編程語言一樣。一條條的讀,一條條的分析。如果這些菜鳥們始終拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內(nèi)部結(jié)構(gòu),要想學(xué)會FPGA恐怕是天方夜譚。雖然現(xiàn)在EDA軟件已經(jīng)非常先進(jìn),像寫軟件那樣照貓畫虎也能綜合出點(diǎn)東西,但也許只有天知道EDA軟件最后綜合出來的到底是什么。也許點(diǎn)個燈,跑個馬還行。這樣就是為什么很多菜鳥學(xué)了N久以后依然是一個菜鳥的原因。

那么FPGA為什么是可以“編程”的呢?首先來了解一下什么叫“程”。啟示“程”只不過是一堆具有一定含義的01編碼而已。編程,其實(shí)就是編寫這些01編碼。只不過我們現(xiàn)在有了很多開發(fā)工具,通常都不是直接編寫這些01編碼,而是以高級語言的形式來編寫,最后由開發(fā)工具轉(zhuǎn)換為這種01編碼而已。對于軟件編程而言,處理器會有一個專門的譯碼電路逐條把這些01編碼翻譯為各種控制信號,然后控制其內(nèi)部的電路完成一個個的運(yùn)算或者是其它操作。所以軟件是一條一條的讀,因?yàn)檐浖牟僮魇且徊揭徊酵瓿傻摹?/p>

而FPGA得可編程,本質(zhì)也是依靠這些01編碼實(shí)現(xiàn)其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來再去控制一個運(yùn)算電路,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編碼而已。如果要實(shí)現(xiàn)時序邏輯電路怎么辦?這不又D觸發(fā)器嘛,任何的時序邏輯都可以轉(zhuǎn)換為組合邏輯+D觸發(fā)器來完成。但這畢竟只實(shí)現(xiàn)了4輸入1輸出的邏輯電路而已,通常邏輯電路的規(guī)模那是相當(dāng)?shù)拇笈丁D窃趺崔k呢?這個時候就需要用到可編程連線了。在這些連線上有很多用存儲器控制的鏈接點(diǎn),通過改寫對應(yīng)存儲器的值就可以確定哪些線是連上的而哪些線是斷開的。者就可以把很多可編程邏輯單元組合起來形成大型的邏輯電路。最后就是可編程的IO,這其實(shí)是FPGA作為芯片級使用必須要注意的。任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個非專用引腳(FPGA中有專門的非用戶可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標(biāo)準(zhǔn)進(jìn)行設(shè)置。

總歸一句話,F(xiàn)PGA之所以可編程是因?yàn)榭梢酝ㄟ^特殊的01代碼制作成一張張“真值表”,并將這些“真值表”組合起來以實(shí)現(xiàn)大規(guī)模的邏輯功能。不了解FPGA內(nèi)部結(jié)構(gòu),就不能明白最終代碼如何變到FPGA里面去的。也就無法深入的了解如何能夠充分運(yùn)用FPGA。現(xiàn)在的FPGA,不單單是有前面講的那三塊,還有很多專用的硬件功能單元,如何利用好這些單元實(shí)現(xiàn)復(fù)雜的邏輯電路設(shè)計,是從菜鳥邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內(nèi)部邏輯及其工作原理做起。

2、錯誤理解HDL語言,怎么看都看不出硬件結(jié)構(gòu)。

HDL語言的英語全稱是:Hardware Description Language,注意這個單詞Description,而不是Design。老外為什么要用Description這個詞而不是Design呢?因?yàn)镠DL確實(shí)不是用用來設(shè)計硬件的,而僅僅是用來描述硬件的。描述這個詞精確地反映了HDL語言的本質(zhì),HDL語言不過是已知硬件電路的文本表現(xiàn)形式而已,只是將以后的電路用文本的形式描述出來而已。而在編寫語言之前,硬件電路應(yīng)該已經(jīng)被設(shè)計出來了。語言只不過是將這種設(shè)計轉(zhuǎn)化為文字表達(dá)形式而已。但是很多人就不理解了,既然硬件都已經(jīng)被設(shè)計出來了,直接拿去制作部就完了,為什么還要轉(zhuǎn)化為文字表達(dá)形式再通過EDA工具這些麻煩的流程呢?其實(shí)這就

是很多菜鳥沒有了解設(shè)計的抽象層次的問題,任何設(shè)計包括什么服裝、機(jī)械、廣告設(shè)計都有一個抽象層次的問題。就拿廣告設(shè)計來說吧,最初的設(shè)計也許就是一個概念,設(shè)計出這個概念也是就是一個點(diǎn)子而已,離最終拍成廣告還差得很遠(yuǎn)。

硬件設(shè)計也是有不同的抽象層次,沒一個層次都需要設(shè)計。最高的抽象層次為算法級、然后依次是體系結(jié)構(gòu)級、寄存器傳輸級、門級、物理版圖級。使用HDL的好處在于我們已經(jīng)設(shè)計好了一個寄存器傳輸級的電路,那么用HDL描述以后轉(zhuǎn)化為文本的形式,剩下的向更低層次的轉(zhuǎn)換就可以讓EDA工具去做了,者就大大的降低了工作量。這就是可綜合的概念,也就是說在對這一抽象層次上硬件單元進(jìn)行描述可以被EDA工具理解并轉(zhuǎn)化為底層的門級電路或其他結(jié)構(gòu)的電路。在FPGA設(shè)計中,就是在將這以抽象層級的意見描述成HDL語言,就可以通過FPGA開發(fā)軟件轉(zhuǎn)化為問題1中所述的FPGA內(nèi)部邏輯功能實(shí)現(xiàn)形式。HDL也可以描述更高的抽象層級如算法級或者是體系結(jié)構(gòu)級,但目前受限于EDA軟件的發(fā)展,EDA軟件還無法理解這么高的抽象層次,所以HDL描述這樣抽象層級是無法被轉(zhuǎn)化為較低的抽象層級的,這也就是所謂的不可綜合。

所以在閱讀或編寫HDL語言,尤其是可綜合的HDL,不應(yīng)該看到的是語言本身,而是要看到語言背后所對應(yīng)的硬件電路結(jié)構(gòu)。如果看到的HDL始終是一條條的代碼,那么這種人永遠(yuǎn)擺脫不了菜鳥的宿命。假如哪一天看到的代碼不再是一行行的代碼而是一塊一塊的硬件模塊,那么恭喜脫離了菜鳥的級別,進(jìn)入不那么菜的鳥級別。

3、FPGA本身不算什么,一切皆在FPGA之外

這一點(diǎn)恐怕也是很多學(xué)FPGA的菜鳥最難理解的地方。FPGA是給誰用的?很多學(xué)校解釋為給學(xué)微電子專業(yè)或者集成電路設(shè)計專業(yè)的學(xué)生用的,其實(shí)這不過是很多學(xué)校受資金限制,賣不起專業(yè)的集成電路設(shè)計工具而用FPGA工具替代而已。其實(shí)FPGA是給設(shè)計電子系統(tǒng)的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個電子設(shè)備,如基站、機(jī)頂盒、視頻監(jiān)控設(shè)備等。當(dāng)現(xiàn)有芯片無法滿足系統(tǒng)的需求時,就需要用FPGA來快速的定義一個能用的芯片。前面說了,F(xiàn)PGA里面無法就是一些“真值表”、觸發(fā)器、各種連線以及一些硬件資源,電子系統(tǒng)工程師使用FPGA進(jìn)行設(shè)計時無非就是考慮如何將這些以后資源組合起來實(shí)現(xiàn)一定的邏輯功能而已,而不必像IC設(shè)計工程師那樣一直要關(guān)注到最

后芯片是不是能夠被制造出來。本質(zhì)上和利用現(xiàn)有芯片組合成不同的電子系統(tǒng)沒有區(qū)別,只是需要關(guān)注更底層的資源而已。

要想把FPGA用起來還是簡單的,因?yàn)闊o法就是那些資源,在理解了前面兩點(diǎn)再搞個實(shí)驗(yàn)板,跑跑實(shí)驗(yàn),做點(diǎn)簡單的東西是可以的。而真正要把FPGA用好,那光懂點(diǎn)FPGA知識就遠(yuǎn)遠(yuǎn)不夠了。因?yàn)樽罱K要讓FPGA里面的資源如何組合,實(shí)現(xiàn)何種功能才能滿足系統(tǒng)的需要,那就需要懂得更多更廣泛的知識。

目前FPGA的應(yīng)用主要是三個方向:第一個方向,也是傳統(tǒng)方向主要用于通信設(shè)備的高速接口電路設(shè)計,這一方向主要是用FPGA處理高速接口的協(xié)議,并完成高速的數(shù)據(jù)收發(fā)和交換。這類應(yīng)用通常要求采用具備高速收發(fā)接口的FPGA,同時要求設(shè)計者懂得高速接口電路設(shè)計和高速數(shù)字電路板級設(shè)計,具備EMC/EMI設(shè)計知識,以及較好的模擬電路基礎(chǔ),需要解決在高速收發(fā)過程中產(chǎn)生的信號完整性問題。FPGA最初以及到目前最廣的應(yīng)用就是在通信領(lǐng)域,一方面通信領(lǐng)域需要高速的通信協(xié)議處理方式,另一方面通信協(xié)議隨時在修改,非常不適合做成專門的芯片。因此能夠靈活改變功能的FPGA就成為首選。到目前為止FPGA的一半以上的應(yīng)用也是在通信行業(yè)。

第二個方向,可以稱為數(shù)字信號處理方向或者數(shù)學(xué)計算方向,因?yàn)楹艽蟪潭壬线@一方向已經(jīng)大大超出了信號處理的范疇。例如早就在2006年就聽說老美將FPGA用于金融數(shù)據(jù)分析,后來又見到有將FPGA用于醫(yī)學(xué)數(shù)據(jù)分析的案例。在這一方向要求FPGA設(shè)計者有一定的數(shù)學(xué)功底,能夠理解并改進(jìn)較為復(fù)雜的數(shù)學(xué)算法,并利用FPGA內(nèi)部的各種資源使之能夠變?yōu)閷?shí)際的運(yùn)算電路。目前真正投入實(shí)用的還是在通信領(lǐng)域的無線信號處理、信道編解碼以及圖像信號處理等領(lǐng)域,其它領(lǐng)域的研究正在開展中,之所以沒有大量實(shí)用的主要原因還是因?yàn)閷W(xué)金融的、學(xué)醫(yī)學(xué)的不了解這玩意。不過最近發(fā)現(xiàn)歐美有很多電子工程、計算機(jī)類的博士轉(zhuǎn)入到金融行業(yè),開展金融信號處理,相信隨著轉(zhuǎn)入的人增加,F(xiàn)PGA在其它領(lǐng)域的數(shù)學(xué)計算功能會更好的發(fā)揮出來,而我也有意做一些這些方面的研究。不過國內(nèi)學(xué)金融的、學(xué)醫(yī)的恐怕連數(shù)學(xué)都很少用到,就不用說用FPGA來幫助他們完成數(shù)學(xué)運(yùn)算了,這個問題只有再議了。

第三個方向就是所謂的SOPC方向,其實(shí)嚴(yán)格意義上來說這個已經(jīng)在FPGA設(shè)計的范疇之內(nèi),只不過是利用FPGA這個平臺搭建的一個嵌入式系統(tǒng)的底層硬

件環(huán)境,然后設(shè)計者主要是在上面進(jìn)行嵌入式軟件開發(fā)而已。設(shè)計對于FPGA本身的設(shè)計時相當(dāng)少的。但如果涉及到需要在FPGA做專門的算法加速,實(shí)際上需要用到第二個方向的知識,而如果需要設(shè)計專用的接口電路則需要用到第一個方向的知識。就目前SOPC方向發(fā)展其實(shí)遠(yuǎn)不如第一和第二個方向,其主要原因是因?yàn)镾OPC以FPGA為主,或者是在FPGA內(nèi)部的資源實(shí)現(xiàn)一個“軟”的處理器,或者是在FPGA內(nèi)部嵌入一個處理器核。但大多數(shù)的嵌入式設(shè)計卻是以軟件為核心,以現(xiàn)有的硬件發(fā)展情況來看,多數(shù)情況下的接口都已經(jīng)標(biāo)準(zhǔn)化,并不需要那么大的FPGA邏輯資源去設(shè)計太過復(fù)雜的接口。而且就目前看來SOPC相關(guān)的開發(fā)工具還非常的不完善,以ARM為代表的各類嵌入式處理器開發(fā)工具卻早已深入人心,大多數(shù)以ARM為核心的SOC芯片提供了大多數(shù)標(biāo)準(zhǔn)的接口,大量成系列的單片機(jī)/嵌入式處理器提供了相關(guān)行業(yè)所需要的硬件加速電路,需要專門定制硬件場合確實(shí)很少。通常是在一些特種行業(yè)才會在這方面有非常迫切的需求。即使目前Xilinx將ARM的硬核加入到FPGA里面,相信目前的情況不會有太大改觀,不要忘了很多老掉牙的8位單片機(jī)還在嵌入式領(lǐng)域混呢,嵌入式主要不是靠硬件的差異而更多的是靠軟件的差異來體現(xiàn)價值的。我曾經(jīng)看好的是cypress的Psoc這一想法。和SOPC系列不同,Psoc的思想史載SOC芯片里面去嵌入那么一小塊FPGA,那這樣其實(shí)可以滿足嵌入式的那些微小的硬件接口差異,比如某個運(yùn)用需要4個USB,而通常的處理器不會提供那么多,就可以用這么一塊FPGA來提供多的USB接口。而另一種運(yùn)用需要6個UART,也可以用同樣的方法完成。對于嵌入式設(shè)計公司來說他們只需要備貨一種芯片,就可以滿足這些設(shè)計中各種微小的差異變化。其主要的差異化仍然是通過軟件來完成。但目前cypress過于封閉,如果其采用ARM作為處理器內(nèi)核,借助其完整的工具鏈。同時開放IP合作,讓大量的第三方為它提供IP設(shè)計,其實(shí)是很有希望的。但目前cypress的日子怕不太好過,Psoc的思想也不知道何時能夠發(fā)光。

4、數(shù)字邏輯知識是根本。

無論是FPGA的哪個方向,都離不開數(shù)字邏輯知識的支撐。FPGA說白了是一種實(shí)現(xiàn)數(shù)字邏輯的方式而已。如果連最基本的數(shù)字邏輯的知識都有問題,學(xué)習(xí)FPGA的愿望只是空中樓閣而已。而這,恰恰是很多菜鳥最不愿意去面對的問題。數(shù)字邏輯是任何電子電氣類專業(yè)的專業(yè)基礎(chǔ)知識,也是必須要學(xué)好的一門課。很

多人無非是學(xué)習(xí)了,考個試,完了。如果不能將數(shù)字邏輯知識爛熟于心,養(yǎng)成良好的設(shè)計習(xí)慣,學(xué)FPGA到最后仍然是霧里看花水中望月,始終是一場空的。

以上四條只是我目前總結(jié)菜鳥們在學(xué)習(xí)FPGA時所最容易跑偏的地方,F(xiàn)PGA的學(xué)習(xí)其實(shí)就像學(xué)習(xí)圍棋一樣,學(xué)會如何在棋盤上落子很容易,成為一位高手卻是難上加難。要真成為李昌鎬那樣的神一般的選手,除了靠刻苦專研,恐怕還確實(shí)得要一點(diǎn)天賦。

第四篇:FPGA學(xué)習(xí)步驟

FPGA學(xué)習(xí)步驟,我的體會

FPGA學(xué)習(xí)步驟,我的體會

FPGA在目前應(yīng)用領(lǐng)域非常,在目前的單板設(shè)計里面,幾乎都可以看到它的身影。從簡單的邏輯組合,到高端的圖像、通信協(xié)議處理,從單片邏輯到復(fù)雜的ASIC原型驗(yàn)證,從小家電到航天器,都可以看到FPGA應(yīng)用,它的優(yōu)點(diǎn)在這里無庸贅述。從個人實(shí)用角度看,對于學(xué)生,掌握FPGA可以找到一份很好的工作,對于有經(jīng)驗(yàn)的工作人員,使用fgpa可以讓設(shè)計變得非常有靈活性。掌握了fpga的設(shè)計,單板硬件設(shè)計就非常容易(不是系統(tǒng)設(shè)計),特別是上大學(xué)時如同天書的邏輯時序圖,看起來就非常親切。但fpga的入門卻有一定難度,因?yàn)樗幌褴浖O(shè)計,只要有一臺計算機(jī),幾乎就可以完成所有的設(shè)計。fpga的設(shè)計與硬件直接相關(guān),需要實(shí)實(shí)在在的調(diào)試儀器,譬如示波器等。這些硬件設(shè)備一般比較昂貴,這就造成一定的入門門檻,新人在入門時遇到一點(diǎn)問題或者困難,由于沒有調(diào)試設(shè)備,無法定位問題,最后可能就會放棄。其實(shí)這時如果有人稍微指點(diǎn)一下,這個門檻很容易就過去。

我用FPGA做設(shè)計很多年了,遠(yuǎn)達(dá)不到精通的境界,只是熟悉使用,在這里把我對fpga的學(xué)習(xí)步驟理解寫出來,僅是作為一個參考,不對的地方,歡迎大家討論和指正。

1、工欲善其事,必先利其器。

計算機(jī)必不可少。目前FPGA應(yīng)用較多的是Altera和xilinx這兩個公司,可以選擇安裝quartusII或者ISE軟件。這是必備的軟件環(huán)境。

硬件環(huán)境還需要下載器、目標(biāo)板。雖然有人說沒有下載器和目標(biāo)板也可學(xué)習(xí)fpga,但那總是紙上談兵。這就像談女朋友,總是嘴上說說,通個電話,連個手都沒牽,能說人家是你朋友?雖說搭建硬件環(huán)境需要花費(fèi),但想想,硬件環(huán)境至多幾百元錢,你要真的掌握FPGA的設(shè)計,起薪比別人都不止高出這么多。這點(diǎn)花費(fèi)算什么?

2、熟悉verilog語言或者vhdl語言,熟練使用quartusII或者ISE軟件。

VHDL和verilog各有優(yōu)點(diǎn),選擇一個,建議選擇verilog。熟練使用設(shè)計軟件,知道怎樣編譯、仿真、下載等過程。

起步階段不希望報一些培訓(xùn)班,除非你有錢,或者運(yùn)氣好,碰到一個水平高、又想把自己的經(jīng)驗(yàn)和別人共享的培訓(xùn)老師,不然的話,培訓(xùn)完后總會感覺自己是一個冤大頭。入門階段可以在利用網(wǎng)絡(luò)資源完成。

3、設(shè)計一個小代碼,下載到目標(biāo)板看看結(jié)果

此時可以設(shè)計一個最簡答的程序,譬如點(diǎn)燈。如果燈在閃爍了,表示基本入門了。如果此時能夠下載到fpga外掛的flash,fpga程序能夠從flash啟動,表明fpga的最簡單設(shè)計你已經(jīng)成功,可以到下一步。

4、設(shè)計稍微復(fù)雜的代碼,下載到目標(biāo)板看看結(jié)果。

可以設(shè)計一個UART程序,網(wǎng)上有參考,你要懂RS232協(xié)議和fpga內(nèi)置的邏輯分

析儀。網(wǎng)上下載一個串口調(diào)試助手,調(diào)試一番,如果通信成功了,恭喜,水平有提高。進(jìn)入下一步。

5、設(shè)計復(fù)雜的代碼,下載到目標(biāo)板看看結(jié)果。

譬如sdram的程序,網(wǎng)上也有參考,這個設(shè)計難度有點(diǎn)大。可用串口來調(diào)試sdram,把串口的數(shù)據(jù)存儲到sdram,然后讀回,如果成功,那你就比較熟悉fpga的設(shè)計餓了

6、設(shè)計高速接口,譬如ddr2或者高速串行接口

這要對fpga的物理特性非常了解,而且要懂得是時序約束等設(shè)計方法,要看大量的原廠文檔,這部分成功了,那就對fpga的物理接口掌握很深,你就是設(shè)計高手了

7、設(shè)計一個復(fù)雜的協(xié)議

譬如USB、PCIexpress、圖像編解碼等,鍛煉對系統(tǒng)的整體把握和邏輯劃分。完成這些,你就是一個一流的高手、8、學(xué)習(xí)再學(xué)習(xí)

學(xué)習(xí)什么,我也不知道,我只知道“學(xué)無止境,山外有山”。

上述只是一些簡單的學(xué)習(xí)步驟,希望能對大家有所幫助!

第五篇:FPGA學(xué)習(xí)經(jīng)驗(yàn)總結(jié)

FPGA是什么?FPGA現(xiàn)狀?怎樣學(xué)習(xí)FPGA?

FPGA是什么?

FPGA是什么?FPGA現(xiàn)狀?怎樣學(xué)習(xí)FPGA?

FPGA是什么介紹

FPGA是現(xiàn)場可編程門陣列的簡稱,F(xiàn)PGA的應(yīng)用領(lǐng)域最初為通信領(lǐng)域,但目前,隨著信息產(chǎn)業(yè)和微電子技術(shù)的發(fā)展,可編程邏輯嵌入式系統(tǒng)設(shè)計技術(shù)已經(jīng)成為信息產(chǎn)業(yè)最熱門的技術(shù)之一,應(yīng)用范圍遍及航空航天、醫(yī)療、通訊、網(wǎng)絡(luò)通訊、安防、廣播、汽車電子、工業(yè)、消費(fèi)類市場、測量測試等多個熱門領(lǐng)域。并隨著工藝的進(jìn)步和技術(shù)的發(fā)展,向更多、更廣泛的應(yīng)用領(lǐng)域擴(kuò)展。越來越多的設(shè)計也開始以ASIC轉(zhuǎn)向FPGA,F(xiàn)PGA正以各種電子產(chǎn)品的形式進(jìn)入了我們?nèi)粘I畹母鱾€角落。

FPGA人才需求

中國每年對于FPGA設(shè)計人才的需求缺口巨大,F(xiàn)PGA設(shè)計人才的薪水也是行業(yè)內(nèi)最高的。目前,美國已有FPGA人才40多萬,中國臺灣地區(qū)也有7萬多,而中國內(nèi)地僅有1萬左右,可見中國渴望有更多的FPGA人才涌現(xiàn)出來。

如何學(xué)習(xí)FPGA?

FPGA對我們?nèi)绱酥匾敲磳τ诔鯇W(xué)者來說,到底該如何學(xué)習(xí)FPGA呢?學(xué)習(xí)一門技術(shù)最好有合適的指導(dǎo)老師,這樣對掌握FPGA技術(shù)更容易,可惜的是大部分的學(xué)校還未開設(shè)相關(guān)的課程,也缺少具有實(shí)踐經(jīng)驗(yàn)的老師,那么如何才能找到一種捷徑幫助初學(xué)者快速學(xué)會如此具有競爭力的技術(shù)呢?

(1)掌握FPGA的編程語言

在學(xué)習(xí)一門技術(shù)之前我們往往從它的編程語言開始,如同學(xué)習(xí)單片機(jī)一樣,我們從C語言開始入門,當(dāng)掌握了C語言之后,開發(fā)單片機(jī)應(yīng)用程序也就不是什么難事了。學(xué)習(xí)FPGA也是如此,F(xiàn)PGA的編程語言有兩種:VHDL和Verilog,這兩種語言都適合用于FPGA的編程,VHDL是由美國軍方組織開發(fā)的,在1987年就成為了IEEE的標(biāo)準(zhǔn);而Verilog則是由一家民間企業(yè)的私有財產(chǎn)轉(zhuǎn)移過來的,由于其優(yōu)越性特別突出,于是在1995年也成為了IEEE標(biāo)準(zhǔn)。VHDL在歐洲的應(yīng)用較為廣泛,而Verilog在中國、美國、日本、臺灣等地應(yīng)用較為廣泛,作者比較推崇是Verilog,因?yàn)樗浅R子趯W(xué)習(xí),很類似于C語言,如果具有C語言基礎(chǔ)的人,只需要花很少的時間便能迅速掌握Verilog,而VHDL則較為抽象,學(xué)習(xí)的時間較長。作為在校大學(xué)生,學(xué)習(xí)Verilog的最好時期是在大學(xué)二年級開設(shè)《電子技術(shù)基礎(chǔ)(數(shù)字部分)》時同步學(xué)習(xí),不僅能夠理解數(shù)字電路實(shí)現(xiàn)的方式,更能通過FPGA將數(shù)字電路得以實(shí)現(xiàn)。大

三、大四的學(xué)生還可以進(jìn)一步強(qiáng)化學(xué)習(xí)Verilog,建議以北京航天航空大學(xué)出版社出版的由夏宇聞教授編寫的《Verilog數(shù)字系統(tǒng)設(shè)計教程(第二版)》作為藍(lán)本,本書比較全面地、詳細(xì)地介紹了Verilog的基本語法。如果是其他初學(xué)者,可以直接借助《Verilog數(shù)字系統(tǒng)設(shè)計教程(第二版)》和本書即能全面掌握Verilog的語法,這是學(xué)習(xí)FPGA的第一步,也是必不可少的一步。

(2)FPGA實(shí)驗(yàn)尤為重要

除了學(xué)習(xí)編程語言以外,更重要的是實(shí)踐,將自己設(shè)計的程序能夠在真正的FPGA里運(yùn)行起來,這時我們需要選一塊板子進(jìn)行實(shí)驗(yàn),一般的紅色颶風(fēng)的板子基本上可以滿足大家的需求,大家感興趣的不妨買一塊做做實(shí)驗(yàn)。

(3)FPGA培訓(xùn)不可忽視

在有條件的情況下,參加FPGA的培訓(xùn)可以在短時間內(nèi)大幅提升自己的水平,因?yàn)橛欣蠋煄е梢允∪チ撕芏鄰澛贰9P者在網(wǎng)上發(fā)現(xiàn)一個北京至芯科技FPGA培訓(xùn)班http:/// 感興趣的朋友可以去看看,網(wǎng)上也有很多的視頻資源,也可下下來看看.我想只要大家想學(xué)FPGA,想從事FPGA工作,總會有辦法找到適合自己的方法

如何學(xué)習(xí)FGPA

第一步:學(xué)習(xí)了解FPGA結(jié)構(gòu),F(xiàn)PGA到底是什么東西,芯片里面有什么,不要開始就拿個開發(fā)板照著別人的東西去編程。很多開發(fā)板的程序?qū)懙暮軤€,我也做過一段時間的開發(fā)板設(shè)計,我覺得很大程度上,開發(fā)板在誤人子弟。不過原廠提供的正品開發(fā)板,代碼很優(yōu)秀的,可以借鑒。只有了解了FPGA內(nèi)部的結(jié)構(gòu)才能明白為什么寫Verilog和寫C整體思路是不一樣的。

第二步:掌握FPGA設(shè)計的流程。了解每一步在做什么,為什么要那么做。很多人都是不就是那幾步嗎,有什么奇怪的?呵呵,我想至少有一半以上的人不知道synthesize和traslate的區(qū)別吧。

了解了FPGA的結(jié)構(gòu)和設(shè)計流程才有可能知道怎么去優(yōu)化設(shè)計,提高速度,減少資源,不要急躁,不要去在為選擇什么語言和選擇哪個公司的芯片上下功夫。語言只是一個表達(dá)的方式,重要的是你的思維,沒有一個好的指導(dǎo)思想,語言用得再好,不過是個懂語言的人。第三步:開始學(xué)習(xí)代碼了。我建議要學(xué)代碼的人都去Altera或Xilinx的網(wǎng)站上下原廠工程師的代碼學(xué)習(xí)。不要一開始就走入誤區(qū)

做fpga主要是要有電路的思想:

作為初學(xué)者,往往對器件可能不是熟悉,那么應(yīng)該對于數(shù)字電路的知識很熟悉吧,fpga中是由觸發(fā)器和查找表以及互聯(lián)線等基本結(jié)構(gòu)組成的,其實(shí)在我們在代碼里面能夠看到的就是與非門以及觸發(fā)器,不要把verilog和c語言等同起來,根本就是不同的東西,沒有什么可比性,在寫一句程序的時候應(yīng)該想到出來的是一個什么樣的電路,計數(shù)器 選擇器 三態(tài)門等等,理解時序,邏輯是一拍一拍的東西,在設(shè)計初期想的不是很清楚的時候可以畫畫時序圖,這樣思路會更加的清晰,還有就是仿真很重要,不要寫完程序就去往fpga中去加載,首先要仿真,尤其是對比較大型一點(diǎn)的程序,想象自己是在做asic,是沒有二次機(jī)會的,所以一定要把仿真做好,還有很多新手對于語言的學(xué)習(xí)不知道選vhdl好還是verilog好,個人偏好verilog,當(dāng)然不是說vhdl不好,反正寫出來的都是電路,那當(dāng)然就不要在語言的語法上面花太多的功夫了,verilog 言簡意賅

assignalwayscase if else 掌握這些幾乎可以寫出90%的電路了,Verilog經(jīng)驗(yàn)談

規(guī)范很重要

工作過的朋友肯定知道,公司里是很強(qiáng)調(diào)規(guī)范的,特別是對于大的設(shè)計(無論軟件還是硬件),不按照規(guī)范走幾乎是不可實(shí)現(xiàn)的。邏輯設(shè)計也是這樣:如果不按規(guī)范做的話,過一個月后調(diào)試時發(fā)現(xiàn)有錯,回頭再看自己寫的代碼,估計很多信號功能都忘了,更不要說檢錯了;如果一個項(xiàng)目做了一半一個人走了,接班的估計得從頭開始設(shè)計;如果需要在原來的版本基礎(chǔ)上增加新功能,很可能也得從頭來過,很難做到設(shè)計的可重用性。在邏輯方面,我覺得比較重要的規(guī)范有這些:

1.設(shè)計必須文檔化。要將設(shè)計思路,詳細(xì)實(shí)現(xiàn)等寫入文檔,然后經(jīng)過嚴(yán)格評審?fù)ㄟ^后才能進(jìn)行下一步的工作。這樣做乍看起來很花時間,但是從整個項(xiàng)目過程來看,絕對要比一上來就寫代碼要節(jié)約時間,且這種做法可以使項(xiàng)目處于可控、可實(shí)現(xiàn)的狀態(tài)。

2.代碼規(guī)范。

a.設(shè)計要參數(shù)化。比如一開始的設(shè)計時鐘周期是30ns,復(fù)位周期是5個時鐘周期,我們可以這么寫:

parameterCLK_PERIOD = 30;

parameterRST_MUL_TIME = 5;

parameterRST_TIME = RST_MUL_TIME * CLK_PERIOD;

...rst_n = 1'b0;

# RST_TIME rst_n = 1'b1;

...# CLK_PERIOD/2 clk <= ~clk;

如果在另一個設(shè)計中的時鐘是40ns,復(fù)位周期不變,我們只需對CLK_PERIOD進(jìn)行重新例化就行了,從而使得代碼更加易于重用。

b.信號命名要規(guī)范化。

1)信號名一律小寫,參數(shù)用大寫。

2)對于低電平有效的信號結(jié)尾要用_n標(biāo)記,如rst_n。

3)端口信號排列要統(tǒng)一,一個信號只占一行,最好按輸入輸出及從哪個模塊來到哪個模塊去的關(guān)系排列,這樣在后期仿真驗(yàn)證找錯時后方便很多。如: module a(//input

clk,rst_n,//globle signal

wren,rden,avalon_din,//related to avalon bus

sdi,//related to serial port input

//output

data_ready,avalon_dout, //related to avalon bus

...);

4)一個模塊盡量只用一個時鐘,這里的一個模塊是指一個module或者是一個entity。在多時鐘域的設(shè)計中涉及到跨時鐘域的設(shè)計中最好有專門一個模塊做時鐘域的隔離。這樣做可以讓綜合器綜合出更優(yōu)的結(jié)果。

5)盡量在底層模塊上做邏輯,在高層盡量做例化,頂層模塊只能做例化,禁止出現(xiàn)任何膠連邏輯(glue logic),哪怕僅僅是對某個信號取反。理由同上。

6)在FPGA的設(shè)計上禁止用純組合邏輯產(chǎn)生latch,帶D觸發(fā)器的latch的是允許的,比如配置寄存器就是這種類型。

7)一般來說,進(jìn)入FPGA的信號必須先同步,以提高系統(tǒng)工作頻率(板級)。

8)所有模塊的輸出都要寄存器化,以提高工作頻率,這對設(shè)計做到時序收斂也是極有好處的。

9)除非是低功耗設(shè)計,不然不要用門控時鐘--這會增加設(shè)計的不穩(wěn)定性,在要用到門控時鐘的地方,也要將門控信號用時鐘的下降沿 打一拍再輸出與時鐘相與。

clk_gate_en------------

-----------------|DQ |------------------| gate_clk

_out

||---------|)--------

------o|>|||/

clk|--------|----

-----

10)禁止用計數(shù)器分頻后的信號做其它模塊的時鐘,而要用改成時鐘使能的方式,否則這種時鐘滿天飛的方式對設(shè)計的可靠性極為不利,也大大增加了靜態(tài)時序分析的復(fù)雜性。如FPGA的輸入時鐘是25M的,現(xiàn)在系統(tǒng)內(nèi)部要通過RS232與PC通信,要以rs232_1xclk的速率發(fā)送數(shù)據(jù)。不要這樣做:always(posedge rs232_1xclk or negedge rst_n)

begin

...end

而要這樣做:

always(posedge clk_25m or negedge rst_n)

begin

...else if(rs232_1xclk == 1'b1)

...end

11)狀態(tài)機(jī)要寫成3段式的(這是最標(biāo)準(zhǔn)的寫法),即

...always @(posedge clk or negedge rst_n)

...current_state <= next_state;

...always @(current_state...)

...case(current_state)

...s1:

if...next_state = s2;

......always @(posedge clk or negedge rst_n)

...else

a <= 1'b0;

c <= 1'b0;

c <= 1'b0;//賦默認(rèn)值

case(current_state)

s1:

a <= 1'b0;//由于上面賦了默認(rèn)值,這里就不用再對b、c賦值了(b、c在該狀態(tài)為0,不會產(chǎn)生鎖存器,下同)s2:

b <= 1'b1;

s3:

c <= 1'b1;

default:

......3.ALTERA參考設(shè)計準(zhǔn)則

1)Ensure Clock, Preset, and Clear configurations are free of glitch

es.2)Never use Clocks consisting of more than one level of combinatori

al logic.3)Carefully calculate setup times and hold times for multi-Clock sy

stems.4)Synchronize signals between flipflops in multi-Clock systems when

the setup and hold time requirements cannot be met.5)Ensure that Preset and Clear signals do not contain race conditio

ns.6)Ensure that no other internal race conditions exist.7)Register all glitch-sensitive outputs.Synchronize all asynchronous inputs.9)Never rely on delay chains for pin-to-pin or internal delays.10)Do not rely on Power-On Reset.Use a master Reset pin to clear al

l flipflops.11)Remove any stuck states from state machines or synchronous logic.其它方面的規(guī)范一時沒有想到,想到了再寫,也歡迎大家補(bǔ)充。

======================================

時序是設(shè)計出來的我的boss有在華為及峻龍工作的背景,自然就給我們講了一些華為及altera做邏輯的一些東西,而我們的項(xiàng)目規(guī)范,也基本上是按華為的那一套去做。在工作這幾個月中,給我感觸最深的是華為的那句話:時序是設(shè)計出來的,不是仿出來的,更不是湊出來的。

在我們公司,每一個項(xiàng)目都有很嚴(yán)格的評審,只有評審?fù)ㄟ^了,才能做下一步的工作。以做邏輯為例,并不是一上來就開始寫代碼,而是要先寫總體設(shè)計方案和邏輯詳細(xì)設(shè)計方案,要等這些方案評審?fù)ㄟ^,認(rèn)為可行了,才能進(jìn)行編碼,一般來說這部分工作所占的時間要遠(yuǎn)大于編碼的時間。

總體方案主要是涉及模塊劃分,一級模塊和二級模塊的接口信號和時序(我們要求把接口信號的時序波形描述出來)以及將來如何測試設(shè)計。在這一級方案中,要保證在今后的設(shè)計中時序要收斂到一級模塊(最后是在二級模塊中)。什么意思呢?我們在做詳細(xì)設(shè)計的時候,對于一些信號的時序肯定會做一些調(diào)整的,但是這種時序的調(diào)整最多只能波及到本一級模塊,而不能影響到整個設(shè)計。記得以前在學(xué)校做設(shè)計的時候,由于不懂得設(shè)計時序,經(jīng)常因?yàn)橛幸惶幮盘柕臅r序不滿足,結(jié)果不得不將其它模塊信號的時序也改一下,搞得人很郁悶。在邏輯詳細(xì)設(shè)計方案這一級的時候,我們已經(jīng)將各級模塊的接口時序都設(shè)計出來了,各級模塊內(nèi)部是怎么實(shí)現(xiàn)的也基本上確定下來了。由于做到這一點(diǎn),在編碼的時候自然就很快了,最重要的是這樣做后可以讓設(shè)計會一直處于可控的狀態(tài),不會因?yàn)槟骋惶幍腻e誤引起整個設(shè)計從頭進(jìn)行。

如何提高電路工作頻率

對于設(shè)計者來說,我們當(dāng)然希望我們設(shè)計的電路的工作頻率(在這里如無特別說明,工作頻率指FPGA片內(nèi)的工作頻率)盡量高。我們也經(jīng)常聽說用資源換速度,用流水的方式可以提高工作頻率,這確實(shí)是一個很重要的方法,今天我想進(jìn)一步去分析該如何提高電路的工作頻率。

我們先來分析下是什么影響了電路的工作頻率。

我們電路的工作頻率主要與寄存器到寄存器之間的信號傳播時延及clock skew有關(guān)。在FPGA內(nèi)部如果時鐘走長線的話,clock skew很小,基本上可以忽略, 在這里為了簡單起見,我們只考慮信號的傳播時延的因素。信號的傳播時延包括寄存器的開關(guān)時延、走線時延、經(jīng)過組合邏輯的時延(這樣劃 分或許不是很準(zhǔn)確,不過對分析問題來說應(yīng)該是沒有可以的),要提高電路的工作頻率,我們就要在這三個時延中做文章,使其盡可能的小。

我們先來看開關(guān)時延,這個時延是由器件物理特性決定的,我們沒有辦法去改變,所以我們只能通過改變走線方式和減少組合邏輯的方法來提高工作頻率。

1.通過改變走線的方式減少時延。

以altera的器件為例,我們在quartus里面的timing closure floorplan可以看到有很多條條塊塊,我們可以將條條塊塊按行和按列分,每一個條塊代表1個LAB,每個LAB里有8個或者是10個LE。它們的走線時延的關(guān)系如下:同一個LAB中(最快)< 同列或者同

行 < 不同行且不同列。我們通過給綜合器加適當(dāng)?shù)募s束(不可貪心,一般以加5%裕量較為合適,比如電路工作在100Mhz,則加約束加到105Mhz就可以了,貪心效果反而不好,且極大增加綜合時間)可以將相關(guān)的邏輯在布線時盡量布的靠近一點(diǎn),從而減少走線的時延。(注:約束的實(shí)現(xiàn)不完全是通過改進(jìn)布局布線方式去提高工作頻率,還有其它的改進(jìn)措施)

2.通過減少組合邏輯的減少時延。

上面我們講了可以通過加約束來提高工作頻率,但是我們在做設(shè)計之初可萬萬不可將提高工作頻率的美好愿望寄托在加約束上,我們要通過合理的設(shè)計去避免出現(xiàn)大的組合邏輯,從而提高電路的工作頻率,這才能增強(qiáng)設(shè)計的可移植性,才可以使得我們的設(shè)計在移植到另一同等速度級別的芯片時還能使用。

我們知道,目前大部分FPGA都基于4輸入LUT的,如果一個輸出對應(yīng)的判斷條件大于四輸入的話就要由多個LUT級聯(lián)才能完成,這樣就引入一級組合邏輯時延,我們要減少組合邏輯,無非就是要輸入條件盡可能的少,這樣就可以級聯(lián)的LUT更少,從而減少了組合邏輯引起的時延。

我們平時聽說的流水就是一種通過切割大的組合邏輯(在其中插入一級或多級D觸發(fā)器,從而使寄存器與寄存器之間的組合邏輯減少)來提高工作頻率的方法。比如一個32位的計數(shù)器,該計數(shù)器的進(jìn)位鏈很長,必然會降低工作頻率,我們可以將其分割成4位和8位的計數(shù),每當(dāng)4位的計數(shù)器計到15后觸發(fā)一次8位的計數(shù)器,這樣就實(shí)現(xiàn)了計數(shù)器的切割,也提高了工作頻率。

在狀態(tài)機(jī)中,一般也要將大的計數(shù)器移到狀態(tài)機(jī)外,因?yàn)橛嫈?shù)器這東西一般是經(jīng)常是大于4輸入的,如果再和其它條件一起做為狀態(tài)的跳變判據(jù)的話,必然會增加LUT的級聯(lián),從而增大組合邏輯。以一個6輸入的計數(shù)器為例,我們原希望當(dāng)計數(shù)器計到111100后狀態(tài)跳變,現(xiàn)在我們將計數(shù)器放到狀態(tài)機(jī)外,當(dāng)計數(shù)器計到111011后產(chǎn)生個enable信號去觸發(fā)狀態(tài)跳變,這樣就將組合邏輯減少了。

上面說的都是可以通過流水的方式切割組合邏輯的情況,但是有些情況下我們是很難去切割組合邏輯的,在這些情況下我們又該怎么做呢?

狀態(tài)機(jī)就是這么一個例子,我們不能通過往狀態(tài)譯碼組合邏輯中加入流水。如果我們的設(shè)計中有一個幾十個狀態(tài)的狀態(tài)機(jī),它的狀態(tài)譯碼邏輯將非常之巨大,毫無疑問,這極有可能是設(shè)計中的關(guān)鍵路徑。那我們該怎么做呢?還是老思路,減少組合邏輯。我們可以對狀態(tài)的輸出進(jìn)行分析,對它們進(jìn)行重新分類,并根據(jù)這個重新定義成一組組小狀態(tài)機(jī),通過對輸入進(jìn)行選擇(case語句)并去觸發(fā)相應(yīng)的小狀態(tài)機(jī),從而實(shí)現(xiàn)了將大的狀態(tài)機(jī)切割成小的狀態(tài)機(jī)。在ATA6的規(guī)范中(硬盤的標(biāo)準(zhǔn)),輸入的命令大概有20十種,每一個命令又對應(yīng)很多種狀態(tài),如果用一個大的狀態(tài)機(jī)(狀態(tài)套狀態(tài))去做那是不可 想象的,我們可以通過case語句去對命令進(jìn)行譯碼,并觸發(fā)相應(yīng)的狀態(tài)機(jī),這樣做下來這一個模塊的頻率就可以跑得比較高了。

總結(jié):提高工作頻率的本質(zhì)就是要減少寄存器到寄存器的時延,最有效的方法就是避免出現(xiàn)大的組合邏輯,也就是要盡量去滿足四輸入的條件,減少

LUT級聯(lián)的數(shù)量。我們可以通過加約束、流水、切割狀態(tài)的方法提高工作頻率。

=====================================

做邏輯的難點(diǎn)在于系統(tǒng)結(jié)構(gòu)設(shè)計和仿真驗(yàn)證

剛?cè)ス镜臅r候BOSS就和我講,做邏輯的難點(diǎn)不在于RTL級代碼的設(shè)計,而在于系統(tǒng)結(jié)構(gòu)設(shè)計和仿真驗(yàn)證方面。目前國內(nèi)對可綜合的設(shè)計強(qiáng)調(diào)的比較多,而對系統(tǒng)結(jié)構(gòu)設(shè)計和仿真驗(yàn)證方面似乎還沒有什么資料,這或許也從一個側(cè)面反映了國內(nèi)目前的設(shè)計水平還比較低下吧。

以前在學(xué)校的時候,總是覺得將RTL級代碼做好就行了,仿真驗(yàn)證只是形式而已,所以對HDL的行為描述方面的語法不屑一顧,對testbench也一直不愿意去學(xué)--因?yàn)橛X得畫波形圖方便;對于系統(tǒng)結(jié)構(gòu)設(shè)計更是一點(diǎn)都不懂了。到了公司接觸了些東西才發(fā)現(xiàn)完全不是這樣。

其實(shí)在國外,花在仿真驗(yàn)證上的時間和人力大概是花在RTL級代碼上的兩倍,現(xiàn)在仿真驗(yàn)證才是百萬門級芯片設(shè)計的關(guān)鍵路徑。仿真驗(yàn)證的難點(diǎn)主要在于怎么建模才能完全和準(zhǔn)確地去驗(yàn)證設(shè)計的正確性(主要是提高代碼覆蓋),在這過程中,驗(yàn)證速度也是很重要的。

驗(yàn)證說白了也就是怎么產(chǎn)生足夠覆蓋率的激勵源,然后怎么去檢測錯誤。我個人認(rèn)為,在仿真驗(yàn)證中,最基本就是要做到驗(yàn)證的自動化。這也是為什么我們要寫testbench的原因。在我現(xiàn)在的一個設(shè)計中,每次跑仿真都要一個小時左右(這其實(shí)算小設(shè)計)。

由于畫波形圖無法做到驗(yàn)證自動化,如果用通過畫波形圖來仿真的話,一是畫波形會畫死(特別是對于算法復(fù)雜的、輸入呈統(tǒng)計分布的設(shè)計),二是看波形圖要看死,三是檢錯率幾乎為零。

那么怎么做到自動化呢?我個人的水平還很有限,只能簡單地談下BFM(bus function model,總線功能模型)。

以做一個MAC的core為例(背板是PCI總線),那么我們需要一個MAC_BFM和PCI_BFM及PCI_BM(PCI behavior model)。MAC_BFM的主要功能是產(chǎn)生以太網(wǎng)幀(激勵源),隨機(jī)的長度和幀頭,內(nèi)容也是隨機(jī)的,在發(fā)送的同時也將其復(fù)制一份到PCI_BM中;PCI_BFM的功能則是仿PCI總線的行為,比如被測收到了一個正確幀后會向PCI總線發(fā)送一個請求,PCI_BFM則會去響應(yīng)它,并將數(shù)據(jù)收進(jìn)來;PCI_BM的主要功能是將MAC_BFM發(fā)送出來的東西與PCI_BFM接收到的東西做比較,由于它具有了MAC_BFM的發(fā)送信息和PCI_BFM的接收信息,只要設(shè)計合理,它總是可以自動地、完全地去測試被測是否工作正常,從而實(shí)現(xiàn)自動檢測。

華為在仿真驗(yàn)證方面估計在國內(nèi)來說是做的比較好的,他們已建立起了比較好的驗(yàn)證平臺,大部分與通信有關(guān)的BFM都做好了,聽我朋友說,現(xiàn)在他們只需要將被測放在測試平臺中,并配置好參數(shù),就可以自動地檢測被測功能的正確與否。

在功能仿真做完后,由于我們做在是FPGA的設(shè)計,在設(shè)計時已經(jīng)基本保證RTL級代碼在綜合結(jié)果和功能仿真結(jié)果的一致性,只要綜合布局布線后的靜態(tài)時序報告沒有違反時序約束的警告,就可以下到板子上去調(diào)試了。事實(shí)上,在華為中興,他們做FPGA的設(shè)計時也是不做時序仿真的,因?yàn)樽鰰r序仿真很花時間,且效果也不見得比看靜態(tài)時序分析報告好。

當(dāng)然了,如果是ASIC的設(shè)計話,它們的仿真驗(yàn)證的工作量要大一些,在涉及到多時鐘域的設(shè)計時,一般還是做后仿的。不過在做后仿之前,也一般會先用形式驗(yàn)證工具和通過靜態(tài)時序分序報告去查看有沒有違反設(shè)計要求的地方,這樣做了之后,后仿的工作量可以小很多。

在HDL語言方面,國內(nèi)語言很多人都在爭論VHDL和verilog哪個好,其實(shí)我個人認(rèn)為這并沒有多大的意義,外面的大公司基本上都是用verilog在做RTL級的代碼,所以還是建議大家盡量學(xué)verilog。在仿真方面,由于VHDL在行為級建模方面弱于verilog,用VHDL做仿真模型的很少,當(dāng)然也不是說verilog就好,其實(shí)verilog在復(fù)雜的行為級建模方面的能力也是有限的,比如目前它還不支持?jǐn)?shù)組。在一些復(fù)雜的算法設(shè)計中,需要高級語言做抽象才能描述出行為級模型。在國外,仿真建模很多都是用System C和E語言,用verilog的都算是很落后的了,國內(nèi)華為的驗(yàn)證平臺好像是用System C寫。在系統(tǒng)結(jié)構(gòu)設(shè)計方面,由于我做的設(shè)計還不夠大,還談不上什么經(jīng)驗(yàn),只是覺得必須要具備一些計算機(jī)系統(tǒng)結(jié)構(gòu)的知識才行。劃分的首要依據(jù)是功能,之后是選擇合適的總線結(jié)構(gòu)、存儲結(jié)構(gòu)和處理器架構(gòu),通過系統(tǒng)結(jié)構(gòu)劃分要使各部分功能模塊清晰,易于實(shí)現(xiàn)。這一部分我想過段時間有一點(diǎn)體會了再和大家分享,就先不誤導(dǎo)大家了。

下載如何學(xué)習(xí)fpgaword格式文檔
下載如何學(xué)習(xí)fpga.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    FPGA學(xué)習(xí)的一些誤區(qū)

    FPGA本身不算什么,一切皆在FPGA之外這一點(diǎn)恐怕也是很多學(xué)FPGA的菜鳥最難理解的地方。FPGA是給誰用的?很多學(xué)校解釋為給學(xué)微電子專業(yè)或者集成電路設(shè)計專業(yè)的學(xué)生用的,其實(shí)這不過......

    FPGA學(xué)習(xí)步驟及其前景

    第一部分 FPGA在目前應(yīng)用領(lǐng)域非常,在目前的單板設(shè)計里面,幾乎都可以看到它的身影。從簡單的邏輯組合,到高端的圖像、通信協(xié)議處理,從單片邏輯到復(fù)雜的ASIC原型驗(yàn)證,從小家電到航......

    FPGA學(xué)習(xí)心得

    回想起自己學(xué)FPGA,已經(jīng)有一段時間了,從開始的茫然,到后來的瘋狂看書,設(shè)計開發(fā)板,調(diào)電路,練習(xí)各種FPGA實(shí)例,到最后能獨(dú)立完成項(xiàng)目,一路走來,感受頗多,拿出來和大家分享,順便介紹下自己的......

    FPGA學(xué)習(xí)心得

    回想起自己學(xué)FPGA,已經(jīng)有一段時間了,從開始的茫然,到后來的瘋狂看書,設(shè)計開發(fā)板,調(diào)電路,練習(xí)各種FPGA實(shí)例,到最后能獨(dú)立完成項(xiàng)目,一路走來,感受頗多,拿出來和大家分享,順便介紹下自己的......

    學(xué)習(xí)FPGA的幾點(diǎn)心得五篇

    1、首先要明白的是軟件設(shè)計和邏輯設(shè)計的不同,并理解什么是硬件意識。 軟件代碼的執(zhí)行是一個順序的過程,編繹以后的機(jī)器碼放在存儲器里,等著CPU一條一條的取指并執(zhí)行;因此軟件設(shè)......

    FPGA學(xué)習(xí)及設(shè)計中的注意事項(xiàng)

    FPGA學(xué)習(xí)及設(shè)計中的注意事項(xiàng)1.基礎(chǔ)問題FPGA的基礎(chǔ)就是數(shù)字電路和HDL語言,想學(xué)好FPGA的人,建議床頭都有一本數(shù)字電路的書,不管是哪個版本的,這個是基礎(chǔ),多了解也有助于形成硬件設(shè)......

    FPGA常用術(shù)語

    標(biāo)題:FPGA常用術(shù)語 2010-05-13 11:16:29 FPGA常用術(shù)語1:LCA(Logic Cell Array):邏輯單元陣列,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Ou......

    FPGA交通燈實(shí)驗(yàn)報告

    交通燈實(shí)驗(yàn)報告 一, 實(shí)驗(yàn)?zāi)康?實(shí)現(xiàn)兩路信號燈交替亮起,并利用兩組數(shù)碼管分別對兩路信號進(jìn)行倒計時。 兩路信號時間分別為: V:綠燈(30S) H:紅燈(35S) 黃燈(5s) 綠燈(30S) 紅燈(35S) 黃燈......

主站蜘蛛池模板: 国产精品久久久久影院| 一边吃奶一边添p好爽高清视频| 中日韩高清无专码区2021| 国产精品午夜在线观看体验区| 人与禽性视频77777| 国产精品永久久久久久久久久| 天堂av成年av影视| 精品国产一区二区av麻豆| 99re热视频这里只精品| 精品国精品无码自拍自在线| 樱花草在线播放免费中文| 青青国产揄拍视频| 亚洲成av人片乱码色午夜| 国产乱子乱人伦电影在线观看| a男人的天堂久久a毛片| 日韩好片一区二区在线看| 亚洲欧美日韩综合久久久久| 国产免码va在线观看免费| 精品一二三区久久aaa片| 亚洲成av人最新无码不卡短片| 亚洲av专区无码观看精品天堂| 伊人精品一本久久综合| 特级毛片a片久久久久久| 免费a级毛片18禁网站app| 韩国午夜理伦三级在线观看| 久久国产36精品色熟妇| 国产精品国产三级国产av中文| 欧美人禽杂交狂配免费看| 日本欧美一区二区三区在线播放| 日本三级欧美三级人妇视频| 国产欧美国日产在线播放| 性无码免费一区二区三区在线网站| 国产精品嫩草影院免费观看| 久久国产精品二国产精品| 婷婷丁香五月中文字幕| 欧美丰满熟妇xxxx性多毛| 97超碰人人人人人人少妇| 又大又粗欧美黑人aaaaa片| 人妻免费久久久久久久了| av亚欧洲日产国码无码| 狠狠干狠狠爱|