第一篇:學FPGA感想
回想起自己學FPGA,已經有一段時間了,從開始的茫然,到后來的瘋狂看書,調電路,練習各種FPGA實例,到最后能獨立完成項目,一路走來,感受頗多,拿出來和大家分享,順便介紹下自己的一點經驗所得,希望對初學者有所幫助。
廢話不說了,下面進入正題,學習FPGA我主要經歷了這么幾個階段:
①、VHDL和Verilog語言的學習,熟悉VHDL和Verilog語言的各種語法。
②、FPGA的學習,熟悉QuartusII軟件的各種功能,各種邏輯算法設計,接口模塊(RS232,LCD,VGA,SPI,I2c,AD,DA等)的設計,時序分析,硬件優化等,大家可以先從簡單的做起,復雜的電路一定要把芯片資料讀懂,上面的時序分析一定要看明白,然后才能設計正確驅動。
③、NiosII的學習,熟悉NiosII的開發流程,熟悉開發軟件(SOPC,NiosII IDE),了解NiosII的基本結構,編寫NiosII C語言程序,調試板子各模塊功能。NiosII軟件調試要很費時間,大家要耐的住厭煩,如果對軟件不熟悉會出現很多問題,自己遇到問題和解決問題的過程,也就是大家進步的過程,大家可以把NiosII內嵌的各種功能調試一遍,最后再移植C8051、uCOSII操作系統和uCLinux操作系統,估計你已經很熟悉了NiosII了。
先來說說第一個階段,現在主要的硬件描述語言有VHDL,Verilog兩種,現在Verilog用的人越來越多,因為容易上手(與C語言語法比較類似),也更靈活,現在的IC設計基本都用Verilog。但是VHDL也有自己的優點,VHDL語言設計的程序很長,因為他本身語言比較嚴謹,在歐美一些國家還是比較喜歡VHDL語言。所以我希望大家對兩種語言應該都比較熟悉。我們的開發板上都盡量把這兩種語言進行完善。
其中關于VHDL語言和Verilog HDL語言資料書很多,如果還沒有入門的話,可以買一本相對通俗易懂和簡單的書來看,書籍我們在這就不推薦了,因為市面上關于這兩種語言的書很多。我們配套VHDL視頻教程,VHDLppt教程,以及verilog HDL、QuartusII、NiosII入門的視頻教程,讓大家做為參考,方面大家快速掌握FPGA設計。
我選的FPGA是cycloneII系列的FPGA(EP2C5/EP2C8),因為資源比以前的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,時序約束很分析,設計優化,也講述了一些硬件編程的思想,作為提高用。
這兩本書大家不一定要買,可以看一下PDF文檔就可以了,如果你看PDF文檔,感覺不舒服,肯定我們支持你買正版書,哈哈。
③、還有一些很好的FPGA和SOPC實際應用的書,在這想不起來書名了,很多書都是在書店看完了(書太貴,買不起哈,呵呵)。
④、還有大家多去逛一下一些國內比較好的FPGA論壇。例如: http://www.tmdps.cn/bbs 我主要說一下Altera的官方網站http://www.tmdps.cn/,不過很多人一看到英語就不想看,其實上面的英文很簡單,很多時候不敢看是因為對自己沒信心或心靜不下來看。不過官方網站上資料很多,剛開始可能會覺得資料安排的有點亂,不方便查找,以后有時間我列個資料的鏈接目錄,整理一下,方便大家查找。
到這里,自己對FPGA的學習有一段時間了,練習了很多實例,自己也編寫了不少程序,也有了一些項目經驗,算是對FPGA有些了解了。在不斷的學習中發現FPGA不僅可以做邏輯設計,算法設計等,還能做嵌入式開發,altera先后開發了Nios,NiosII兩款FPGA的嵌入式軟核,并有配套的軟件,剛開始看到這些我真是心中突然豁然開朗,學習真的是無止境,又一個全新的領域擺在我面前,我決定學習NiosII,要學就要學最好。
剛開始入門是很痛苦的,嵌入式設計需要從硬件到驅動到軟件全部熟悉,硬件系統問題還不是很大(以前做過單片機,DSP,ARM等),處理器的架構心里還有點數,對于驅動和軟件工程,剛開始學習真的很頭痛。NiosII應該還算比較新的內容(應該是2004年出的),國內的書籍不算很多,網上這方面的資料也比較零碎,在NiosII軟件調試上,費了很多的功夫,我們這里給大家NiosII經典的教程(PDF),大家把這本書看完,估計大家對NiosII軟件結構有一定的了解了,如果想深入了解NiosII軟件,可以看一下NiosII軟件結構解析這本書。
對于初學者,如果只是用EP2C5內嵌的RAM太小,程序寫不大,而且每次總要絞盡腦汁優化程序代碼大小,很多時候優化了后函數功能會受到限制,所以很不利于初學者,所以我們的板子上都外擴了SDRAM,Flash這兩個比較基本的模塊,基本上可以滿足用戶各種的需求功能。
大家想很熟悉FPGA和SOPC,以后的路還很長,不過每次程序的的調試成功都是一次喜悅,同時也有很多驚喜在等著我們.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的培訓可以在短時間內大幅提升自己的水平,因為有老師帶著可以省去了很多彎路。筆者在網上發現國內第一家大學EDA實驗室創始人之一的夏宇聞教授和未名芯銳搞了一個FPGA培訓班(http://www.tmdps.cn),感興趣的朋友可以去看看,網上也有很多的視頻資源,也可下下來看看.FPGA在目前應用領域非常,在目前的單板設計里面,幾乎都可以看到它的身影。從簡單的邏輯組合,到高端的圖像、通信協議處理,從單片邏輯到復雜的ASIC原型驗證,從小家電到航天器,都可以看到FPGA應用,它的優點在這里無庸贅述。從個人實用角度看,對于學生,掌握FPGA可以找到一份很好的工作,對于有經驗的工作人員,使用fgpa可以讓設計變得非常有靈活性。掌握了fpga的設計,單板硬件設計就非常容易(不是系統設計),特別是上大學時如同天書的邏輯時序圖,看起來就非常親切。但fpga的入門卻有一定難度,因為它不像軟件設計,只要有一臺計算機,幾乎就可以完成所有的設計。fpga的設計與硬件直接相關,需要實實在在的調試儀器,譬如示波器等。這些硬件設備一般比較昂貴,這就造成一定的入門門檻,新人在入門時遇到一點問題或者困難,由于沒有調試設備,無法定位問題,最后可能就會放棄。其實這時如果有人稍微指點一下,這個門檻很容易就過去。
我用FPGA做設計很多年了,遠達不到精通的境界,只是熟悉使用,在這里把我對fpga的學習步驟理解寫出來,僅是作為一個參考,不對的地方,歡迎大家討論和指正。
1、工欲善其事,必先利其器。
計算機必不可少。目前FPGA應用較多的是Altera和xilinx這兩個公司,可以選擇安裝quartusII或者ISE軟件。這是必備的軟件環境。
硬件環境還需要下載器、目標板。雖然有人說沒有下載器和目標板也可學習fpga,但那總是紙上談兵。這就像談女朋友,總是嘴上說說,通個電話,連個手都沒牽,能說人家是你朋友?雖說搭建硬件環境需要花費,但想想,硬件環境至多幾百元錢,你要真的掌握FPGA的設計,起薪比別人都不止高出這么多。這點花費算什么?
2、熟悉verilog語言或者vhdl語言,熟練使用quartusII或者ISE軟件。VHDL和verilog各有優點,選擇一個,建議選擇verilog。熟練使用設計軟件,知道怎樣編譯、仿真、下載等過程。
起步階段不希望報一些培訓班,除非你有錢,或者運氣好,碰到一個水平高、又想把自己的經驗和別人共享的培訓老師,不然的話,培訓完后總會感覺自己是一個冤大頭。入門階段可以在利用網絡資源完成。
3、設計一個小代碼,下載到目標板看看結果
此時可以設計一個最簡答的程序,譬如點燈。如果燈在閃爍了,表示基本入門了。如果此時能夠下載到fpga外掛的flash,fpga程序能夠從flash啟動,表明fpga的最簡單設計你已經成功,可以到下一步。
4、設計稍微復雜的代碼,下載到目標板看看結果。
可以設計一個UART程序,網上有參考,你要懂RS232協議和fpga內置的邏輯分析儀。網上下載一個串口調試助手,調試一番,如果通信成功了,恭喜,水平有提高。進入下一步。
5、設計復雜的代碼,下載到目標板看看結果。
譬如sdram的程序,網上也有參考,這個設計難度有點大。可用串口來調試sdram,把串口的數據存儲到sdram,然后讀回,如果成功,那你就比較熟悉fpga的設計餓了
6、設計高速接口,譬如ddr2或者高速串行接口
這要對fpga的物理特性非常了解,而且要懂得是時序約束等設計方法,要看大量的原廠文檔,這部分成功了,那就對fpga的物理接口掌握很深,你就是設計高手了
7、設計一個復雜的協議
譬如USB、PCIexpress、圖像編解碼等,鍛煉對系統的整體把握和邏輯劃分。完成這些,你就是一個一流的高手、8、學習再學習
學習什么,我也不知道,我只知道“學無止境,山外有山”。
第二篇:FPGA常用術語
標題:FPGA常用術語
2010-05-13 11:16:29
FPGA常用術語
1:LCA(Logic Cell Array):邏輯單元陣列,內部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內部連線(Interconnect)三個部分。
2: IOB(Input Output Block):可編程輸入輸出單元,為了便于管理和適應多種電器標準,FPGA的IOB被劃分為若干個組(bank),每個bank的接口標準由其接口電壓VCCO決定,一個bank只能有一種VCCO,但不同bank的VCCO可以不同。只有相同電氣標準的端口才能連接在一起,VCCO電壓相同是接口標準的基本條件。
3:CLB(Configurable Logic Block):可配置邏輯模塊,是FPGA內的基本邏輯單元,每個CLB都包含一個可配置開關矩陣,此矩陣由4或6個輸入、一些選型電路(多路復用器等)和觸發器組成。在賽靈思公司公司的FPGA器件中,CLB由多個(一般為4個或2個)相同的Slice和附加邏輯構成。
4:Slice:是賽靈思公司公司定義的基本邏輯單位,一個Slice由兩個4輸入的函數、進位邏輯、算術邏輯、存儲邏輯和函數復用器組成。
5:LUT(Look-Up-Table):查找表。本質上就是一個RAM,目前FPGA中多使用4輸入的LUT,所以每一個LUT可以看成一個有4位地址線的 的RAM。
6:DCM(數字時鐘管理模塊):提供數字時鐘管理和相位環路鎖定。
7:BRAM(嵌入式塊RAM):塊RAM可被配置為單端口RAM、雙端口RAM、內容地址存儲器(CAM)以及FIFO等常用存儲結構。單片塊RAM的容量為18k比特,即位寬為18比特、深度為1024,可以根據需要改變其位寬和深度,但要滿足兩個原則:首先,修改后的容量(位寬 深度)不能大于18k比特;其次,位寬最大不能超過36比特。當然,可以將多片塊RAM級聯起來形成更大的RAM,此時只受限于芯片內塊RAM的數量,而不再受上面兩條原則約束。
第三篇:如何學習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我主要經歷了這么幾個階段:
①、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比較好的論壇
⑤、其實最好的學習網站莫過于Altera的官方網站,不過很多人一看到英語就不想看,其實上面的英文很簡單,很多時候不敢看是因為對自己沒信心或心靜不下來看。不過官方網站上資料很多,剛開始可能會覺得資料安排的有點亂,不方便查找,以后有時間我列個資料的鏈接目錄,整理一下,方便大家查找。
到這里,自己最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 Developer's 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,已經有一段時間了,從開始的茫然,到后來的瘋狂看書,設計開發板,調電路,練習各種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比較好的論壇
http://www.tmdps.cnt信號控制著w_fifo_rden、aes_ready等信號,是該模塊的關鍵信號,通過將它們之間的時序關系通過時序圖反應出來,寫代碼時就可以做到胸有成竹,減少出現邏輯混亂的情況。
聽起來似乎很簡單,但是執行起來卻不容易,因為畫波形圖是一件很煩鎖的事(有一次一個模塊因為操作比較多我畫了8張時序圖)。但是請相信我,如果不這樣做,因為時序關系沒有處理好引起設計多次迭代所花的時間遠多于畫波形圖的時間。
時序設計好之后,模塊內部各個信號之間的關系就理得差不多了,之后就是將它翻譯成代碼了,這個過程以體力勞動為主,我就不多說了。
補充一下,畫波形圖推薦用TimingDesigner這個軟件,如果有更好的,請告訴我,我也不喜歡TimingDesigner:)。
另一個就是約束。
這里的約束是針對綜合軟件和布局布線軟件而言的。
為什么會有約束這個東西出現呢?主要原因是EDA軟件比較笨,難以明白我們的心思,如果我們不把更詳細的信息告訴它的話它就干不好活,比如需要將輸出寄存器放的與輸出管腳近一點,如果不加約束,EDA軟件可能布通之后就不管了,導致Tco狂大,一點也不善解人意。所以我們需要約束這個東西,告訴EDA軟件要怎么干活,工程驗收的標準又是什么。
在加約束之前,我們首先要定義一些術語好告訴EDA軟件我們想干什么,這些術語便是Fmax、Tsu、Tco等等這些東西。這些東西的含義這里就不多說了,網上的討論已經很多了。
有了術語,還要有一種通信方式與EDA軟件通信,腳本語言充當了這一角色。不過現在像quartus這類軟件做的比較智能化了,提供了圖形化界面,但是這背后支撐的還是些腳本語言,大家可以用UltraEdit打加*.qsf文件去看看我們加的約束用腳本語言是怎么寫的。在加了約束之后,EDA工具就可以更好地按照我們的意愿去干活了,比較我們加了Fmax的約束,它就會盡可能地將關鍵路徑放的靠近一些,以提高電路工作頻率。當然,這是有代價的,尋找路徑是需要時間的,要求越苛刻,時間花的越多,因此加約束的原則的適用就行。如果約束加的過高,就相當于讓EDA工具去做一件不可能完成的事,找更短的路徑的時候說不定找著找著就掉下懸崖了,效果反而更差。
雖然有約束這個好東西,不過提醒一下,在項目之前千萬對它抱有太多的幻想,把希望寄托在別人的身上并不是每一次都很可靠的,出了問題還是要麻煩自己,加約束只能做一些錦上添花的事情。所以,我們在做方案的時候就需要對關鍵路徑進行預估,要通過設計而不是約束解決這些問題。