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

淺談FPGA學習

時間:2019-05-13 04:02:00下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《淺談FPGA學習》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《淺談FPGA學習》。

第一篇:淺談FPGA學習

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

1、不熟悉FPGA的內部結構,不了解可編程邏輯器件的基本原理。

FPGA為什么是可以編程的?恐怕很多菜鳥不知道,他們也不想知道。因為他們覺得這是無關緊要的。他們潛意識的認為可編程嘛,肯定就是像寫軟件一樣啦。軟件編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語言或者其它軟件編程語言一樣。一條條的讀,一條條的分析。如果這些菜鳥們始終拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內部結構,要想學會FPGA恐怕是天方夜譚。雖然現在EDA軟件已經非常先進,像寫軟件那樣照貓畫虎也能綜合出點東西,但也許只有天知道EDA軟件最后綜合出來的到底是什么。也許點個燈,跑個馬還行。這樣就是為什么很多菜鳥學了N久以后依然是一個菜鳥的原因。那么FPGA為什么是可以“編程”的呢?首先來了解一下什么叫“程”。啟示“程”只不過是一堆具有一定含義的01編碼而已。編程,其實就是編寫這些01編碼。只不過我們現在有了很多開發工具,通常都不是直接編寫這些01編碼,而是以高級語言的形式來編寫,最后由開發工具轉換為這種01編碼而已。對于軟件編程而言,處理器會有一個專門的譯碼電路逐條把這些01編碼翻譯為各種控制信號,然后控制其內部的電路完成一個個的運算或者是其它操作。所以軟件是一條一條的讀,因為軟件的操作是一步一步完成的。而FPGA的可編程,本質也是依靠這些01編碼實現其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來再去控制一個運算電路,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里面去的。也就無法深入的了解如何能夠充分運用FPGA。現在的FPGA,不單單是有前面講的那三塊,還有很多專用的硬件功能單元,如何利用好這些單元實現復雜的邏輯電路設計,是從菜鳥邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內部邏輯及其工作原理起。

2、錯誤理解HDL語言,怎么看都看不出硬件結構。

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

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

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

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

目前FPGA的應用主要是三個方向:

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

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

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

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

4、數字邏輯知識是根本。

無論是FPGA的哪個方向,都離不開數字邏輯知識的支撐。FPGA說白了是一種實現數

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

第二篇:如何學習fpga

如何學習FPGA

關鍵詞:工作人員, 硬件, 設計, FPGA

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

FPGA學習步驟

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

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

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

FPGA學習步驟

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

VHDL和verilog各有優點,選擇一個,建議選擇verilog。熟練使用設計軟件,知道怎樣編譯、仿真、下載等過程。

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

FPGA學習步驟

3、設計一個小代碼,下載到目標板看看結果

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

FPGA學習步驟

4、設計稍微復雜的代碼,下載到目標板看看結果。

可以設計一個UART程序,網上有參考,你要懂RS232協議和FPGA內置的邏輯分析儀。網上下載一個串口調試助手,調試一番,如果通信成功了,恭喜,水平有提高。進入下一步。

FPGA學習步驟

5、設計復雜的代碼,下載到目標板看看結果。

譬如sdram的程序,網上也有參考,這個設計難度有點大。可用串口來調試sdram,把串口的數據存儲到sdram,然后讀回,如果成功,那你就比較熟悉FPGA設計了

FPGA學習步驟

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

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

FPGA學習步驟

7、設計一個復雜的協議

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

8、學習再學習

學習什么,我也不知道,我只知道“學無止境,山外有山”。

現在很多FPGA工程師,沒找到合適,我覺得很多人從開始的時候就誤入歧途了,對新手學習FPGA設計我也說一點看法吧。我認為要從基礎開始做,基礎牢,才有成為高手的可能。

我覺得FPGA學習有以下幾步必須要走:

第一步:學習了解FPGA結構,FPGA到底是什么東西,芯片里面有什么,不要開始就拿個開發板照著別人的東西去編程。很多開發板的程序寫的很爛,我也做過一段時間的開發板設計,我覺得很大程度上,開發板在誤人子弟。不過原廠提供的正品開發板,代碼很優秀的,可以借鑒。只有了解了FPGA內部的結構才能明白為什么寫Verilog和寫C整體思路是不一樣的。

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

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

第三步:開始學習代碼了。我建議要學代碼的人都去Altera或Xilinx的網站上下原廠工程師的代碼學習。不要一開始就走入誤區。

第四步:template很重要。能不能高效利用FPGA資源,一是了解fpga結構,二是了解欲實現的邏輯功能和基本機構,三是使用正確的模板。FPGA內部器件種類相對較單一,用好模板,你的邏輯才能被高效的綜合成FPGA擅長表達的結構:)

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

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

第三篇:FPGA學習經驗總結

FPGA是什么?FPGA現狀?怎樣學習FPGA?

FPGA是什么?

FPGA是什么?FPGA現狀?怎樣學習FPGA?

FPGA是什么介紹

FPGA是現場可編程門陣列的簡稱,FPGA的應用領域最初為通信領域,但目前,隨著信息產業和微電子技術的發展,可編程邏輯嵌入式系統設計技術已經成為信息產業最熱門的技術之一,應用范圍遍及航空航天、醫療、通訊、網絡通訊、安防、廣播、汽車電子、工業、消費類市場、測量測試等多個熱門領域。并隨著工藝的進步和技術的發展,向更多、更廣泛的應用領域擴展。越來越多的設計也開始以ASIC轉向FPGA,FPGA正以各種電子產品的形式進入了我們日常生活的各個角落。

FPGA人才需求

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

如何學習FPGA?

FPGA對我們如此重要,那么對于初學者來說,到底該如何學習FPGA呢?學習一門技術最好有合適的指導老師,這樣對掌握FPGA技術更容易,可惜的是大部分的學校還未開設相關的課程,也缺少具有實踐經驗的老師,那么如何才能找到一種捷徑幫助初學者快速學會如此具有競爭力的技術呢?

(1)掌握FPGA的編程語言

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

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

(2)FPGA實驗尤為重要

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

(3)FPGA培訓不可忽視

在有條件的情況下,參加FPGA的培訓可以在短時間內大幅提升自己的水平,因為有老師帶著可以省去了很多彎路。筆者在網上發現一個北京至芯科技FPGA培訓班http:/// 感興趣的朋友可以去看看,網上也有很多的視頻資源,也可下下來看看.我想只要大家想學FPGA,想從事FPGA工作,總會有辦法找到適合自己的方法

如何學習FGPA

第一步:學習了解FPGA結構,FPGA到底是什么東西,芯片里面有什么,不要開始就拿個開發板照著別人的東西去編程。很多開發板的程序寫的很爛,我也做過一段時間的開發板設計,我覺得很大程度上,開發板在誤人子弟。不過原廠提供的正品開發板,代碼很優秀的,可以借鑒。只有了解了FPGA內部的結構才能明白為什么寫Verilog和寫C整體思路是不一樣的。

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

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

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

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

assignalwayscase if else 掌握這些幾乎可以寫出90%的電路了,Verilog經驗談

規范很重要

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

1.設計必須文檔化。要將設計思路,詳細實現等寫入文檔,然后經過嚴格評審通過后才能進行下一步的工作。這樣做乍看起來很花時間,但是從整個項目過程來看,絕對要比一上來就寫代碼要節約時間,且這種做法可以使項目處于可控、可實現的狀態。

2.代碼規范。

a.設計要參數化。比如一開始的設計時鐘周期是30ns,復位周期是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;

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

b.信號命名要規范化。

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

2)對于低電平有效的信號結尾要用_n標記,如rst_n。

3)端口信號排列要統一,一個信號只占一行,最好按輸入輸出及從哪個模塊來到哪個模塊去的關系排列,這樣在后期仿真驗證找錯時后方便很多。如: 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。在多時鐘域的設計中涉及到跨時鐘域的設計中最好有專門一個模塊做時鐘域的隔離。這樣做可以讓綜合器綜合出更優的結果。

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

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

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

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

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

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

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

_out

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

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

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

-----

10)禁止用計數器分頻后的信號做其它模塊的時鐘,而要用改成時鐘使能的方式,否則這種時鐘滿天飛的方式對設計的可靠性極為不利,也大大增加了靜態時序分析的復雜性。如FPGA的輸入時鐘是25M的,現在系統內部要通過RS232與PC通信,要以rs232_1xclk的速率發送數據。不要這樣做: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)狀態機要寫成3段式的(這是最標準的寫法),即

...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;//賦默認值

case(current_state)

s1:

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

b <= 1'b1;

s3:

c <= 1'b1;

default:

......3.ALTERA參考設計準則

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.其它方面的規范一時沒有想到,想到了再寫,也歡迎大家補充。

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

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

在我們公司,每一個項目都有很嚴格的評審,只有評審通過了,才能做下一步的工作。以做邏輯為例,并不是一上來就開始寫代碼,而是要先寫總體設計方案和邏輯詳細設計方案,要等這些方案評審通過,認為可行了,才能進行編碼,一般來說這部分工作所占的時間要遠大于編碼的時間。

總體方案主要是涉及模塊劃分,一級模塊和二級模塊的接口信號和時序(我們要求把接口信號的時序波形描述出來)以及將來如何測試設計。在這一級方案中,要保證在今后的設計中時序要收斂到一級模塊(最后是在二級模塊中)。什么意思呢?我們在做詳細設計的時候,對于一些信號的時序肯定會做一些調整的,但是這種時序的調整最多只能波及到本一級模塊,而不能影響到整個設計。記得以前在學校做設計的時候,由于不懂得設計時序,經常因為有一處信號的時序不滿足,結果不得不將其它模塊信號的時序也改一下,搞得人很郁悶。在邏輯詳細設計方案這一級的時候,我們已經將各級模塊的接口時序都設計出來了,各級模塊內部是怎么實現的也基本上確定下來了。由于做到這一點,在編碼的時候自然就很快了,最重要的是這樣做后可以讓設計會一直處于可控的狀態,不會因為某一處的錯誤引起整個設計從頭進行。

如何提高電路工作頻率

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

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

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

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

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

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

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

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

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

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

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

在狀態機中,一般也要將大的計數器移到狀態機外,因為計數器這東西一般是經常是大于4輸入的,如果再和其它條件一起做為狀態的跳變判據的話,必然會增加LUT的級聯,從而增大組合邏輯。以一個6輸入的計數器為例,我們原希望當計數器計到111100后狀態跳變,現在我們將計數器放到狀態機外,當計數器計到111011后產生個enable信號去觸發狀態跳變,這樣就將組合邏輯減少了。

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

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

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

LUT級聯的數量。我們可以通過加約束、流水、切割狀態的方法提高工作頻率。

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

做邏輯的難點在于系統結構設計和仿真驗證

剛去公司的時候BOSS就和我講,做邏輯的難點不在于RTL級代碼的設計,而在于系統結構設計和仿真驗證方面。目前國內對可綜合的設計強調的比較多,而對系統結構設計和仿真驗證方面似乎還沒有什么資料,這或許也從一個側面反映了國內目前的設計水平還比較低下吧。

以前在學校的時候,總是覺得將RTL級代碼做好就行了,仿真驗證只是形式而已,所以對HDL的行為描述方面的語法不屑一顧,對testbench也一直不愿意去學--因為覺得畫波形圖方便;對于系統結構設計更是一點都不懂了。到了公司接觸了些東西才發現完全不是這樣。

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

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

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

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

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

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

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

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

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

第四篇:fpga學習心得體會

fpga學習心得體會

1、該課程實現了通過usb 接口將代碼與實驗設備相結合的功能,并且使我對EL-S0PC4000 實驗箱有了接觸,了解并掌握了其所具備的一些功能,在實驗中不僅使我學到了很多知識,并且其過程還充滿了樂趣。

2、QuartusII 軟件及FPGA 的設計與應用所采用的語言與我所學過的一些語言有所不同,該種語法與C 語言有一些相似之處,但在細枝末節上有該語言自己的習慣,這是學習這門語言的要點。學習一門語言并不是一周兩周就能速成的,想要掌握這門語言還是需要日后自己不斷地練習不斷地積累經驗,在完成一項工程后所帶來的成就感也是使我持續學習的動力。

3、此外,該門課程與我之前學習的數電這門課程息息相關,他也是仿真了許多數電的一些電路,使我對數電的理解更加的深刻,既鍛煉了我的動手能力,同時也鍛煉了我的邏輯思維能力。在這幾次的數電實驗中,我收獲頗多,我們經過老師的教導,學會了FPGA,Verilog編程,我們也學會了使用Quartus軟件,并用電路板進行了多次FGPA實驗,了解了Verilog的設計;實驗中我學會了用Quartus軟件繪圖、編碼以及與電路板的連接;實驗中,我遇到了很多問題,但是經過老師和同學們的幫助,我都逐一的解決了這些問題并完成了實驗。實驗中我們收獲最多重要的是,結合電路板進行代碼的編譯、調試,希望以后我們會有更多的機會學習了解verilog編程

第五篇:FPGA,學習心得體會

篇一:fpga學習心得大報告

《fpga技術基礎》學習報告--課程內容學習心得

姓 名:

學 號: 年級專業: 指導教師:

瞿麟 201010401128 自動化101薛小軍摘要從開始學fpga到現在粗略算來的話,已經有3個多月了,就目前而言,我并不確定自己算不算高手們所說的入門了,fpga學習總結。但是不管現在的水平如何,現在就總結一下自己學習它的感受或一些認識吧。

關鍵詞

fpga de2板 quartusii軟件 verilog語言

引言

fpga是什么?fpga現狀?怎樣學習fpga?

fpga是現場可編程門陣列的簡稱,fpga的應用領域最初為通信領域,但目前,隨著信息產業和微電子技術的發展,可編程邏輯嵌入式系統設計技術已經成為信息產業最熱門的技術之一,應用范圍遍及航空航天、醫療、通訊、網絡通訊、安防、廣播、汽車電子、工業、消費類市場、測量測試等多個熱門領域。并隨著工藝的進步和技術的發展,向更多、更廣泛的應用領域擴展。越來越多的設計也開始以asic轉向fpga,fpga正以各種電子產品的形式進入了我們日常生活的各個角落。

正文

(1)掌握fpga的編程語言

在學習一門技術之前我們往往從它的編程語言開始,如同學習單片機一樣,我們從c語言開始入門,當掌握了c語言之后,開發單片機應用程序也就不是什么難事了。學習fpga也是如此,fpga的編程語言有兩種:vhdl和verilog,這兩種語言都適合用于fpga的編程。(2)fpga實驗尤為重要 除了學習編程語言以外,更重要的是實踐,將自己設計的程序能夠在真正的fpga里運行起來,這時我們需要選一塊板子進行實驗,我們選擇使用de2板才進行試驗。初識de2開發板

de2的資源de2的資源非常豐富,包括

1.核心的fpga芯片-cyclone ii 2c35 f672c6,從名稱可以看出,它包含有35千個le,在altera的芯片系列中,不算最多,但也絕對夠用。altera下載控制芯片-epcs16以及usb-blaste對jtag的支持。

2.存儲用的芯片有: 512-kb sram,8-mbyte sdram,4-mbyte flash memory 3.經典io配置:擁有4個按鈕,18個撥動開關,18個紅色發光二極管,9個綠色發光二極管,8個七段數碼管,16*2字符液晶顯示屏,4.超強多媒體:24位cd音質音頻芯片wm8731(mic輸入+linein+ 標準音頻輸出),視頻解碼芯片(支持ntsc/pal制式),帶有高速dac視屏輸出vga模塊。5.更多標準接口:通用串行總線usb控制模塊以及a、b型接口,sd card接口,irda紅外模塊,10/100m自適應以太網絡適配器,rs-232標準串口,ps/2鍵盤接口 6.其他:50m,27m晶振各一個,支持外部時鐘,80針帶保護電路的外接io 7.此外還有:配套的光盤資料,qutuarsii軟件,niosii 6.0ide,例程與說明文檔。

關于管腳分配

當我們創建一個fpga用戶系統的時候,到最后要做的工作就是下載,在下載之前必須根據芯片的型號分配管腳,這樣才能將程序中特定功能的管腳與實際中的fpga片外硬件電路一一對應。

fpga簡單的說,就是現場可編程邏輯陣列。它的內部是邏輯單元,它們之間可以用線連接,至于以怎樣的形式相連,則可以根據應用者寫入的邏輯決定。每次布線都會重新組合邏輯單元,從而可以任意的編寫不同的邏輯。當然,前提是定義的邏輯塊不超出它可讀寫的最大值。總結在學習fpga時,遇到的問題有許多,譬如,寫代碼時的警告,特別是一些不能忽視的警告,每次遇到時,總是還要檢查一會兒才能改過來,或者有的警告已經出現了幾次,但是就是解決不掉。每次在學一個模塊時,只要是看懂了,它的一些重點就沒有及時的記錄在本子上,只有個別的想起來時,才會做筆記。每做完一個模塊,沒有及時記錄下自己從這個模塊中學到了什么。上面的不足,都是在寫模塊的過程中,自己逐漸暴露出來的。我很慶幸自己的一些問題能及時的被發現,避免類似的事情再次發生。像遇到警告時,都要記錄下來,通過改正后,要注釋,寫下警告的原因,定期看一下。每次寫模塊的時候,都要記下重點知識,即使是自己懂得的,好記性都是比不過爛筆頭的。

關于以上的總結,我相信在以后的學習中一定會對自己有莫大的幫助,它會時刻警醒自己,在以前的學習中,自己有哪些不足,以后千萬不能再去犯同樣的錯誤,不斷地糾正,不斷地進步,相信自己一定會學好fpga的。篇二:fpga學習心得

回想起自己學fpga,已經有一段時間了,從開始的茫然,到后來的瘋狂看書,設計開發板,調電路,練習各種fpga實例,到最后能獨立完成項目,一路走來,感受頗多,拿出來和大家分享,順便介紹下自己的一點經驗所得,希望對初學者有所幫助。廢話不說了,下面進入正題,學習fpga我主要經歷了這么幾個階段:

①、verilog語言的學習,熟悉verilog語言的各種語法。

②、fpga的學習,熟悉quartusii軟件的各種功能,各種邏輯算法設計,接口模塊(rs232,lcd,vga,spi,i2c等)的設計,時序分析,硬件優化等,自己開始設計簡單的fpga板子。③、niosii的學習,熟悉niosii的開發流程,熟悉開發軟件(sopc,niosii ide),了解niosii的基本結構,設計niosii開發板,編寫niosii c語言程序,調試板子各模塊功能。先來說說第一個階段,現在主要的硬件描述語言有vhdl,verilog兩種,在本科時老師一般教vhdl,不過現在

verilog用的人越來越多,其更容易上手(與c語言語法比較類似),也更靈活,現在的ic設計基本都用verilog。像systemc,systemverilog之類的應該還在萌芽階段,以后可能會有較大發展。鑒于以上原因我選擇了verilog作為我學習的硬件描述語言。

其實有c語言的基礎,學起verilog的語言很簡單,關鍵要有并行的概念,所有的module,assign,always都是并行的,這一點與軟件語言有明顯不同。這里推薦幾本評價比較好的學習verilog的書籍: ①、《verilog 數字系統設計教程》,這本書對于入門是一本很好的書,通俗易懂,讓人很快上手,它里面的例子也不錯。但本書對于資源優化方面的編程沒有多少涉及到。②、《設計與驗證verilog hdl》,這本書雖然比較薄,但是相當精辟,講解的也很深入,很多概念看了這本書有種豁然開朗的感覺,呵呵。

學習verilog其實不用看很多書,基本的語法部分大家都一樣,關鍵是要自己會靈活應用,多做練習。

verilog語言學了一段時間,感覺自己可以編點東西,希望自己編的程序在板子上運行看看結果,下面就介紹我學習的第二個階段。

剛開始我拿了實驗室一塊cpld的開發板做練習,熟悉quartusii的各種功能,比如ip的調用,各種約束設置,時序分析,logiclock設計方法等,不過做到后面發現cpld的資源不太夠(沒有內嵌的ram、不能用signaltapii,le太少等),而實驗室沒有fpga開發板,所以就萌生了自己做fpga開發板的意圖,剛好cadence我也學的差不多了,就花了幾天時間主要研究了fpga配置電路的設計,在板子上做了jtag和as下載口,在做了幾個用戶按鍵和led,其他的口全部引出作為io口,電路比較簡單,板子焊好后一調就通了(心里那個爽啊...)。我選的fpga是cycloneii系列的ep2c5,資源比以前的fpga多了好幾倍,還有pll,內嵌的ram,可以試試signaltapii,用內嵌的邏輯分析儀測試引腳波形,對于fpga的調試,邏輯分析儀是至關重要的。利用這塊板子我完成了項目中的幾個主要功能:rs232通信,指令譯碼,配置dds,ad數據高速緩存,電子開關狀態設置等,在實踐中學習起來真的比平時快很多,用到什么學什么動力更大。這個時候我主要看的數據有這幾本感覺比較好: ①、《altera fpga/cpld 設計(基礎篇)》:講解一些基本的fpga設計技術,以及quartusii中各個工具的用法(ip,rtl,signalprobe,signaltapii,timing closure floorplan,chip editor等),對于入門非常好。②、《altera fpga/cpld 設計(高級篇)》:講解了一些高級工具的應用,logiclock,時序約束很分析,設計優化,也講述了一些硬件編程的思想,作為提高用。③、《fpga設計指南--器件,工具和流程》:這本書看了他的目錄忍不住就買了,這本書講述了fpga設計的各個方面,雖然每個方面都是點到為止,但能讓你有個整體的概念,了解fpga的所有設計功能,了解fpga開發的整個流程。

④、在這里也推薦幾個學習fpga比較好的論壇,不過很多人一看到英語就不想看,其實上面的英文很簡單,很多時候不敢看是因為對自己沒信心或心靜不下來看。不過官方網站上資料很多,剛開始可能會覺得資料安排的有點亂,不方便查找,以后有時間我列個資料的鏈接目錄,整理一下,方便大家查找。

到這里,自己最fpga的學習有一段時間了,練習了很多實例,自己也編寫了不少程序,也有了一些項目經驗,算是對fpga有些了解了。在不斷的學習中發現fpga不僅可以做邏輯設計,算法設計等,還能做嵌入式開發,altera先后開發了nios,niosii兩款fpga的嵌入式軟核,并有配套的軟件,剛開始看到這些我真是心中突然豁然開朗,學習真的是無止境,又一個全新的領域擺在我面前,我決定學習niosii,要學就要學最好。

剛開始入門是很痛苦的,嵌入式設計需要從硬件到驅動到軟件全部熟悉,硬件系統問題還不是很大(以前做過單片機,dsp等mcu),處理器的架構心里還有點數,對于驅動和軟件工程,剛開始學習真的很頭痛。niosii應該還算比較新的內容(應該是2004年出的),國內的書籍不算很多,網上這方面的資料也比較零碎,所以我就開始將altera網站上這方面的資料系統的看一邊,這里推薦幾本網站上的handbook: ①、embedded design handbook ②、nios ii processor reference handbook ③、nios ii software developers handbook ④、quartus ii handbook, volume 4: sopc builder ⑤、quartus ii handbook, volume 5: embedded peripherals 看完這些handbook,總算基本明白整個架構,軟硬件設計方法,驅動的編寫等,感覺自己可以編一些嵌入式的程序了,不過雖然前面做的那塊ep2c5的板子支持niosii系統,不過對于嵌入式設計來說還是顯得單薄了一點,沒有sdram,flash這兩個比較基本的模塊,ep2c5內嵌的ram太小,程序寫不大,而且每次總要絞盡腦汁優化程序代碼大小,很多時候優化了后函數功能會受到限制,不利于初學者,也不利于調試。所以到這里我有產生了自己做一塊nios開發板的想法(直接買比較貴,自己做便宜,而且還能鍛煉自己,一舉兩得),通過借鑒其他開發板,選擇自己開發板上需要包含什么模塊,確定各個模塊使用什么芯片,閱讀各個芯片的datasheet,畫出原理圖并做出pcb圖,這塊板子我選的是ep2c8q208,比上一塊資源又將近多了一倍,板子上還有以下模塊:sdram,flash,epcs4,rs232,usb,vga,ps2,ad,da,lcd等,滿足了一般開發板的配置要求。板子回來以后調試了四五天,(flash工作了,lcd顯示了,rs232通了,usb通了,ad,da工作了,sdram正常了...),真是每天都有驚喜,每個模塊都編寫了niosii軟件測試程序,調試硬件的時候對軟件的運行也更熟悉了。在這次調試的過程中真的學到了很多,為此專門寫了好幾頁調試筆記,下次拿出來和大家一起分享。現在硬件平臺有了,niosii也了解的差不多了,終于可以自己編寫一些規模大一點的程序了。學fpga的一點心得

從去年開始學fpga,以前一直做dsp,但因為項目的需要,在一個應用中只有fpga才能解決問題,所以硬著頭皮上fpga,又因為結項目的時間比較緊,所以主要以解決問題為目的,說真的,項目做下來寫了四千多行的代碼,達到了設計目標,但對fpga學習還不夠系統,也正進一步的學習中.因為我是單干,沒有團隊,遇到問題只能在網上找資料,其難度可想而知,幸好以前用過cpld,有一點基礎,用的編程語言是ahdl,感覺ahdl寫一點小程序還可以,但做復雜程序就有點費力了(應該是我的ahdl沒學好),所以在做fpga程序時我選擇了比較簡單的 verilog語言。

由于沒人指導,所以買了一個簡單的fpga開發板,是cyclone的,開發板就是好,送了較多學習資料,用了一個星期的時間,學習了niosii的基本應用,當然,我的需要就是知道如何在nios里控制一個信號的高低電平變化就夠了,其它全是c語言的東西,主要是熟悉了quartus的開發平臺,并用nios程序把要實現的主要代碼用c寫了一遍,通過了,但速 度上不去。有這些知識做鋪墊后,就開始了項目的設計。項目要求將外部高速數據(40mb/s)進行存盤,并可以將存盤的數據在適當的時候原路返回(速度不變)。所以在硬件的設計上fpga選擇了ep2c35f484c8n,外部有128m的sdram做為數據的緩沖。所以fpga的主要程序集中在atahost控制器(實現udma讀寫)、sdram控制器(大容量循環緩沖)上,當然還包括一些其它的控制,如實時時鐘,usb2.0芯片控制,rs232的通信及相應的通信協議。

硬件完成后,大部分的時間都在寫程序,感覺verilog跟c差不多,就將原來寫成的c代碼翻譯了一下,每寫一段代碼就測試一下。起初并不知道在quartus里還有邏輯分析儀的功能,所以程序出了問題只能使勁的分析代碼,猜想問題可能出在哪里,萬不得已時才做一下仿真(后來看很多有做程序都先做仿真,仿真通過后再下載到目標板里運行測試,但到現在我的仿真關還沒過),所以做得很累。我感到這樣做下去到時間結點肯定結了不了項目,就找fpga的qq群向高手們請教經驗,知道了可以quartus的邏輯分析儀來觀察信號,哈哈,爽了(感謝感謝)。后面的程序找問題就容易多了,按照ata協議、sdram手冊、及各外圍芯片手冊一步步寫下去,當然其中也遇到了各種各樣的問題,但很快得到解決。一直到 項目結束,都是用邏輯分析儀來找問題,沒做過仿真(所以現在仿真關還沒過)。今年又用fpga做了一些項目。簡單說一下體會吧,歸結起來就三個字:做、想、問。書讀千遍,不如做一遍;看別人做百次,不如自己做一次;就是要實踐。實踐的動力一方面來自興趣,別一方面來自己壓力,我個人覺得后者更重要。有需求會容易形成壓力,也就是說最好能在實際的項目開發中鍛煉,而不是為了學習而學習。在做的過程中要多想,多想想問題出現的原因,問題解決后要多問幾個為什么,這也是經驗積累的過程,最好要寫項目日志,把問題及原因、解決的辦法都寫進去。還要多問,遇到問題經歷了痛苦的思索后還得不到解決就要問了,問搜索引擎,問網友,問同學同行,一篇文章、朋友們的點撥都可能幫助 自己快速解決問題。

fpga入門心得及系列資料

不知道為什么自己每次接受一個新事物,總要花上那么長的一段時間。每個東西,總要經過從一點都不了解,到有點了知道,到最后才想知道要來學學,但每次學習時也總是走馬觀花。可能真的受中國的教育思想束縛的太嚴重了吧。以前的人讀書,好像也沒有什么目標,只是知道上課要認真聽,考試要考好。這樣就可以了。也從來沒想過,我學這個到底有什么用呢。但是上了大學后,一切都改變了。我們的學習也不再是為了考試而考試了。尤其是像我們學電子,假如僅僅是為考試的話,那你的大學完全可以過得很輕松,整天睡覺,游戲,照樣可以考高分。那樣畢業了,你說你的大學學習是不是等于0。到頭來還是什么也不是。所以當你進入大學,當你選擇了電子,就決定了你從此要為之付出。不管將來怎樣,只要你朝著自己的方向走,一定會成功的。

現在說說fpga的學習吧,或許,很多人剛接觸fpga時,可能還在為到底什么是cpld,什么時fpga,我到底要學習哪門語言而苦惱,不知大家是不是這樣,但是我曾經就是這樣,也到網上去找過,最后也終于找到了答案。因為那時身邊的人都還沒學過。其實cpld,fpga最大的區別也就是fpga的程序必須由配置芯片經過上電后,將程序寫入芯片中,也就是fpga的內部存儲器是相當于內存一樣,一掉電就沒了。而cpld是像單片機一樣,程序是存儲存在內部中的,一上電就可以跑了。二者的功能差不多,但是fpga的資源比cpld更加豐富。在cpld上可以實現的功能,在fpga上基本都可以實現的。所以也不必去想太多什么是fpga,cpld了,只要弄懂了二者的內部結構就可以了。

至于學什么語言嗎,首先要看你們在校老師上課是用什么語言,就先那個語言吧,我們學校老師是用vhdl語言的,所以一開始我也是先學vhdl語言,而且學習資料比較多,但是在網上看到,好像公司里面用的比較多的是verilog hdl語言,為了能看懂一些資料,現在也在學verilog hdl語言,學習中發現,要是學過c語言的人,會發現verilog hdl好像更加好理解。

一旦你開始了學習fpga,那就要堅持下去,因為語言這東西,要是不一下子把它強記住,過不了兩天就又忘了,書本的東西,一定要越快消化越好,這樣你看別人的程序時就不會有什么語言障礙了。之后就是編寫程序,模仿別人的模塊,仿真實驗,這步很重要,要不你就不會發現fpga功能的強大,你也不知道到底仿真的結果和實際是不是有差別。當你成功時,你一定會感到成功的喜悅。

當你基本的程序都看得懂時,有完整地編個程序,而且在硬件上實驗過時,那么祝賀你入門了,之后的道路就是不斷的實踐,跟學習單片機一樣,只有不斷的學習,不斷的做東西,你的編程能力才會提高。

以上僅僅為作者本人的一點觀點,本人現在還是一個電子白菜,只是苦于自己學習電子找不到捷徑,不想還有更多的人跟我一樣,在電子的道路中不斷摸索,不斷徘徊。

看過一個高手對fpga的認識,自己對fpga未來的發展更是看好,鑒定了學好的決心,fpga在電子開發工作中已經上升到數字系統核心處理器,盡快掌握fpga開發技術顯得非常迫切。總結了一下: 傳統的開發方式:一半固定,硬件cpu是不可編程的,另一半靈活是可編程的軟件

fpga新開發形式:兩個部分都是可編程了,fpga,它代表的就是硬件的編程。這兩部分都可編程的一個結合點就是fpga上的軟核。另外可以根據需要通過外部單片機把合適的應用bit流寫入到fpga內,從而完成根據功能需要變更硬件。硬件可重構!

使計算機的能力越來越強,方法一:通過提高工藝來提高工作頻率;方法二:通過優化系統體系,并行!

新學習思想: fpga設計有點象圍棋:易學難精 帶著問題學習是最有效率的

時序性能的調整提高是fpga開發能力的標志

多看書,但要注意,書當做字典,不是所有地方都去看。

目前,在fpga上有三種類型開發方法和應用方向:a、邏輯類應用 b、軟核類應用 c、dsp類應用。邏輯類應用我們接觸的最早,也是fpga最初的應用領域,大的應用上,一些數字ic設計可以在fpga做前期的功能驗證,在通信領域,fpga做信號的編解碼等等,小的應用上我們做的最多的實際是cpld,完成信號的變換控制等等。軟核應用是前幾年才興起,現在熱門的開發應用方法,在原本需要fpga結合cpu的地方有成本和靈活性優勢。

fpga的dsp應用是非常有潛力的,性能優勢非常明顯。開發方法是用matlab的simulink中嵌入廠商的開發工具包,算法驗證在matlab simulink工具下完成,在開發工具包的支持下生成hdl模塊或者直接生成fpga下載配置文件,這個方向是fpga應用最有挑戰能力領域。mathworks公司不久前也推出了獨立于fpga廠商的simulink hdl coder工具,使的matlab在數字系統設計領域邁出了堅實的一步,把simulink 模型和stateflow框圖生成位真(bit-ture)、周期精確(cycle-accurate)、可綜合的verilog和vhdl代碼,為matlab simulink用戶提供了通往fpga設計實現的直接通道。篇三:fpga學習心得大報告

《fpga技術基礎》學習報告--課程內容學習心得

姓 名:

學 號: 年級專業: 指導教師:

李紹華 201110401132 自動化111薛曉軍摘要從開始學fpga到現在粗略算來的話,已經有3個多月了,就目前而言,我并不確定自己算不算高手們所說的入門了,fpga學習總結。但是不管現在的水平如何,現在就總結一下自己學習它的感受或一些認識吧。

關鍵詞; fpga de2板 quartusii軟件 verilog語言

引言

fpga是什么?fpga現狀?怎樣學習fpga?

fpga是現場可編程門陣列的簡稱,fpga的應用領域最初為通信領域,但目前,隨著信息產業和微電子技術的發展,可編程邏輯嵌入式系統設計技術已經成為信息產業最熱門的技術之一,應用范圍遍及航空航天、醫療、通訊、網絡通訊、安防、廣播、汽車電子、工業、消費類市場、測量測試等多個熱門領域。并隨著工藝的進步和技術的發展,向更多、更廣泛的應用領域擴展。越來越多的設計也開始以asic轉向fpga,fpga正以各種電子產品的形式進入了我們日常生活的各個角落。

正文

(1)掌握fpga的編程語言

在學習一門技術之前我們往往從它的編程語言開始,如同學習單片機一樣,我們從c語言開始入門,當掌握了c語言之后,開發單片機應用程序也就不是什么難事了。學習fpga也是如此,fpga的編程語言有兩種:vhdl和verilog,這兩種語言都適合用于fpga的編程。(2)fpga實驗尤為重要 除了學習編程語言以外,更重要的是實踐,將自己設計的程序能夠在真正的fpga里運行起來,這時我們需要選一塊板子進行實驗,我們選擇使用de2板才進行試驗。初識de2開發板

de2的資源de2的資源非常豐富,包括

1.核心的fpga芯片-cyclone ii 2c35 f672c6,從名稱可以看出,它包含有35千個le,在altera的芯片系列中,不算最多,但也絕對夠用。altera下載控制芯片-epcs16以及usb-blaste對jtag的支持。

2.存儲用的芯片有: 512-kb sram,8-mbyte sdram,4-mbyte flash memory 3.經典io配置:擁有4個按鈕,18個撥動開關,18個紅色發光二極管,9個綠色發光二極管,8個七段數碼管,16*2字符液晶顯示屏,4.超強多媒體:24位cd音質音頻芯片wm8731(mic輸入+linein+ 標準音頻輸出),視頻解碼芯片(支持ntsc/pal制式),帶有高速dac視屏輸出vga模塊。5.更多標準接口:通用串行總線usb控制模塊以及a、b型接口,sd card接口,irda紅外模塊,10/100m自適應以太網絡適配器,rs-232標準串口,ps/2鍵盤接口 6.其他:50m,27m晶振各一個,支持外部時鐘,80針帶保護電路的外接io 7.此外還有:配套的光盤資料,qutuarsii軟件,niosii 6.0ide,例程與說明文檔。

關于管腳分配

當我們創建一個fpga用戶系統的時候,到最后要做的工作就是下載,在下載之前必須根據芯片的型號分配管腳,這樣才能將程序中特定功能的管腳與實際中的fpga片外硬件電路一一對應。

fpga簡單的說,就是現場可編程邏輯陣列。它的內部是邏輯單元,它們之間可以用線連接,至于以怎樣的形式相連,則可以根據應用者寫入的邏輯決定。每次布線都會重新組合邏輯單元,從而可以任意的編寫不同的邏輯。當然,前提是定義的邏輯塊不超出它可讀寫的最大值。總結在學習fpga時,遇到的問題有許多,譬如,寫代碼時的警告,特別是一些不能忽視的警告,每次遇到時,總是還要檢查一會兒才能改過來,或者有的警告已經出現了幾次,但是就是解決不掉。每次在學一個模塊時,只要是看懂了,它的一些重點就沒有及時的記錄在本子上,只有個別的想起來時,才會做筆記。每做完一個模塊,沒有及時記錄下自己從這個模塊中學到了什么。上面的不足,都是在寫模塊的過程中,自己逐漸暴露出來的。我很慶幸自己的一些問題能及時的被發現,避免類似的事情再次發生。像遇到警告時,都要記錄下來,通過改正后,要注釋,寫下警告的原因,定期看一下。每次寫模塊的時候,都要記下重點知識,即使是自己懂得的,好記性都是比不過爛筆頭的。

關于以上的總結,我相信在以后的學習中一定會對自己有莫大的幫助,它會時刻警醒自己,在以前的學習中,自己有哪些不足,以后千萬不能再去犯同樣的錯誤,不斷地糾正,不斷地進步,相信自己一定會學好fpga的。

下載淺談FPGA學習word格式文檔
下載淺談FPGA學習.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    FPGA學習步驟

    FPGA學習步驟,我的體會 FPGA學習步驟,我的體會 FPGA在目前應用領域非常,在目前的單板設計里面,幾乎都可以看到它的身影。從簡單的邏輯組合,到高端的圖像、通信協議處理,從單片邏輯......

    FPGA學習概述

    FPGA學習 我常年擔任多個有關FPGA學習研討的QQ群管理員,長期以來很多新入群的菜鳥們總是在重復的問一些非常簡單但是又讓新手困惑不解的問題。作為管理員經常要給這些菜鳥們......

    FPGA學習步驟及其前景

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

    FPGA學習的一些誤區

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

    FPGA學習心得體會(小編整理)

    篇一:fpga學習心得大報告《fpga技術基礎》學習報告 --課程內容學習心得姓 名: 學 號: 年級專業: 指導教師: 瞿麟 201010401128 自動化101薛小軍摘要從開始學fpga到現在粗略算來......

    學習FPGA的幾點心得五篇

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

    FPGA常用術語

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

    FPGA學習心得

    回想起自己學FPGA,已經有一段時間了,從開始的茫然,到后來的瘋狂看書,設計開發板,調電路,練習各種FPGA實例,到最后能獨立完成項目,一路走來,感受頗多,拿出來和大家分享,順便介紹下自己的......

主站蜘蛛池模板: 国产精品国产三级在线专区| 久久ww精品w免费人成| 99久久久无码国产精品古装| 欧美亚洲国产片在线播放| 国产在线精品一区二区不卡顿| 最新国产亚洲人成无码网站| 浮妇高潮喷白浆视频| 久久国产精品_国产精品| 亚洲av日韩av永久无码下载| 一本一道波多野结衣一区| 成人性做爰片免费视频| 成人精品一区日本无码网| 无线日本视频精品| 国产精品推荐手机在线| 调教套上奶牛榨乳器喷奶水| 一区二区三区无码不卡无在线| 亚洲国产欧洲综合997久久| 日日碰日日摸夜夜爽无码| av亚欧洲日产国码无码| 午夜精品久久久久9999| 国产在线精品成人一区二区三区| 日本极品少妇xxxx| 亚洲av电影天堂男人的天堂| 精品无码一区二区| 久久久久久自慰出白浆| 亚洲人成色77777| 午夜国产精品视频在线| 亚洲精品久久久av无码专区| 97欧美精品系列一区二区| 国产偷窥熟妇高潮呻吟| 白嫩少妇激情无码| 欧美日韩亚洲国产综合乱| 美女不带套日出白浆免费视频| 在线观看国产成人av片| 狠狠色丁香婷婷久久综合| 亚洲精品高清av在线播放| 国产又色又爽又黄的在线观看| 国产真实乱对白精彩久久| 亚洲色精品vr一区二区三区| 国内精品久久人妻朋友| 国产 | 久你欧洲野花视频欧洲1|