第一篇:給大學生學習ARM和FPGA的一些建議
首先不管是學什么,要有最初的興趣!
學習ARM的,對于初學者來說,要學的知識點很多,到底從哪里下手,人們常常感到非常迷茫。大一學生先從C語言開始入門,在大一階段由于對計算機還非常陌生,因此不可能寫出一個具有完整圖形界面的軟件,重點以“與硬件無關的計算方法、數據結構”為基礎學習C語言,至少練習編寫一萬行C代碼,否則不會找到編程的感覺,也體會不到編程樂趣。
有了一萬行編程的經驗后,大二接著開始學習數字電路和模擬電路了,這是你的機會!將來的開發工作有幾種選擇,但這兩門都很重要,學好了你有可能成為頂尖的高手、專家和系統級水平的人才,即便學得不太好,你也有可能成為一個優秀的工程師。
學FPGA,作為初學者,在學習《電子技術基礎(數字部分)》時同步學習FPGA與Verilog技術的重點是快速入門和打下一定的基礎。最好在大一開始學習單片機。有了大一、二階段強化訓練,后續的很多課程度可以理論與實踐并重地學習,進入大三階段則需要有選擇地重點學習嵌入式操作系統原理與編程、嵌入式系統與FPGA的混合系統設計或者全力以赴鉆研FPGA應用技術等技術方向,大四階段就可以真刀真槍地完成一個漂亮的畢業設計,并能夠寫出一篇比碩士水平還要高的論文。
亞嵌教育培訓中心
第二篇:周立功博客――給大學生學習ARM和FPGA的建議.
周立功博客 —— 給大學生學習ARM 和 FPGA 的建議
對于初學者來說,要學的知識點很多,到底從哪里下手,人們常常感到 非常迷茫。大一學生先從 C 語言開始入門,在大一階段由于對計算機還 非常陌生,因此不可能寫出一個具有完整圖形界面的軟件,重點以 “ 與 硬件無關的計算方法、數據結構 ” 為基礎學習C 語言,至少練習編寫一 萬行 C 代碼,否則不會找到編程的感覺,也體會不到編程樂趣,很多人 就是因為缺乏一定量的訓練, 所以對編程沒有興趣,以至于未到畢業時 就全部忘記了,程序設計是一項實踐性很強的實踐活動,沒有大量的實 踐作為基礎是很難入門的, 因此我認為編寫一萬行代碼是判定是否入門 的依據。請初學者記住:當你編寫了一萬行代碼時,這是你能夠從事專 業的開始,否則你不要期望在這個領域混下去。與此同時, C 語言也是 學習和使用 Verilog 的重要基礎, 所以千萬不可小視 C 語言。更重要的 是, 如果你的 C 語言不好的話,你將來就業選擇的路子就會受到很大的 限制,要么只能做硬件工程師、銷售工程師或者轉行,別無選擇!有了一萬行編程的經驗后,大二接著開始學習數字電路和模擬電路了, 這是你的機會!將來的開發工作有幾種選擇,但這兩門都很重要,學好 了你有可能成為頂尖的高手、專家和系統級水平的人才,即便學得不太 好,你也有可能成為一個優秀的工程師。前一篇博文講了,如果你精通 了 C/C++,即便你的硬件水平一般,你也可以成為一個優秀的開發工程 師, 即由硬件工程師負責邏輯電路和模擬電路的設計, 由你來編程 —— 你可以編寫基于 WinCE、Linux、Vxworks 或者 Windows 等操作系統的程
序。那么怎樣才算基本上 “ 精通 ” 呢?至少編寫五萬行代碼,當你已經編 寫了 10萬行代碼時,可以說你已經完全精通了,這個時候你如果有很 大的造化的話,那完全取決于你當初學習的基礎是否牢固了。所以我在 前面提到了, 精通一門可以成為優秀的開發工程師,但絕對不可能成為 系統級的開發工程師,因為你的知識結構不行。
最好在學習數字電路時購買一個 99元的 EasyFPGA030開發學習板,這 個板子是我們開發的,但這個價格是沒有利潤的, 不要認為我是在做推 銷, 我們推出這個產品完全是針對大二學生的,希望有更多的大二學生 提早醒悟, 能夠在學習數字電路時同步學習FPGA 和 Verilog , 強化課程 之間的關聯。筆者雖然是一個企業家,但也有
一份愛心和社會責任感, 為社會做出自己的貢獻同樣也是企業家的 “ 銷售業績 ” ,我們為這個開發 板撰寫了 30萬字的配套資料和適合各種水平的范例,也投入了大量的 精力錄制 Verilog 語言視頻講座, 這些都是超值和免費的。與此同時從 2009年開始著手針對大二和大三學生舉辦 FPGA 大賽,以提高在校大學 生的興趣,讓那些覺悟者進一步提高自信心,找到自己未來的坐標。學 好數字電路和模擬電路以及 FPGA 應用技術,除了成為電子產品開發工 程師之外(高附加值的嵌入式系統產品幾乎離不開 FPGA , 還有一個就 業方向就是號稱 “ 金飯碗 ” 的集成電路設計。
作為初學者,在學習《電子技術基礎(數字部分》時同步學習FPGA 與 Verilog 技術的重點是快速入門和打下一定的基礎, 根據配套的教材 和數字電路教材的內容將基本的數字電路用 FPGA 實現即可,這是本階 段的學習目標,不要將學習高深難度的應用技術作為重點。并利用課余
和暑假期間的空余時間, 將一些圖書上現成的使用數字電路實現的例子 用 FPGA 來完成設計即可, 比方如何使用 FPGA 實現一個計數器, 并動手 做出來。到大三階段在做出選擇,到底是選擇成為一個專業的 FPGA 應 用設計工程師、還是嵌入式系統與 FPGA 混合應用系統設計工程師或集 成電路開發工程師, 以自己的興趣和志向為基礎而定, 所以在學習嵌入 式系統技術的同時學習FPGA ,兩者之間并不矛盾。
最好在大一開始學習單片機, 這就是筆者為何撰寫 《新編電類專業計算 機基礎》這本圖書的原因(詳見破解電類專業 “ 就業難、人才荒 ” 的解決 方案!(4。因為大一不學習單片機,后面的課程都沒有辦法學好。對于大一學習單片機,很多老師不去用心研究學習方法和教學規律,反 而搬出一大堆理由來 “ 嚇唬 ” 人。筆者當年僅僅是一個技校生,在完全沒 有指導老師的情況下,也找不到可以參考的技術資料, 只是憑著偶爾看 到一篇報道羅伯特設計的 Altair 8800計算機就做出了一臺不需要工作 軟件的計算機(改進型的 Altair-80C31電路詳見《新編電類專業計算 機基礎》教材。要相信現在公開的信息、資訊條件、人們的聰明智慧 與教師的力量, 因此大學本科生在大一階段學會單片機是非常容易的一 件事情。
有了單片機基礎之后,在大二階段學習數字電路與模擬電路的同時,結 合單片機學習接口擴展技術與模擬前向通道數據采集技術, 并編寫相應 的程序實現一個一個的小系統設計, 大三時根本不再需要學習所謂的接 口技術與微機原理了。針對數字電路與模擬電路筆者準備寫作一套小系 統設計與制作配套圖書, 將前后之間的課程也同步和關聯起來,期望進
一步提高大學生的動手能力。
有了大一、二階段強化訓練, 后續的很多課程度可以理論與實踐并重地 學習,比方目前大學開設的《自動控制理論》幾乎都是空對空地教學與 聯系,如果結合自動控制理論的教學, 讓學生學習設計一個自動穿越迷 宮的電腦鼠, 并舉辦相應的大賽, 則能夠很好地將嵌入式系統應用技術、數字電路與模擬電路、計算方法與數據結構、機構設計......相關課程 有機地結合起來,學生的興趣將大大地得到提高。
當學生有了學習的興趣和動力之后,教學勢必由老師個人在課堂上演 “ 獨角戲 ” 的場面轉變為研討會,學生也一定會竭盡全力由被動學習向主 動學習轉變, 這就是教育要達到的目標, 所以我們不能一味地指責學生 不好學。作為老師我們一定要思考和拿出行動,讓學生喜歡并愿意向您 學習。事實上學生的未來完全取決于老師的引導, 現在教師隊伍存在的 很大毛病就是將責任推向擴招和學生不好好學, 擴招有沒有問題?當然 有, 但作為教師我們做得怎么樣呢?我們是否在教學上做出了巨大的努 力,這需要我們捫心自問。
學生不好好學,這也是事實!但也是表象,我們要思考他們為什么不好 好學習?我們應該怎樣才能讓他們好好地學?作為老師, 第一不能給學 生劃定考試范圍, 第二學生缺課要堅決扣分, 如果做到這兩點基本的要 求,學生不好好學就制度處理,我想效果會有很大的改變。當然就業難 的責任也不能完全推給老師, 但老師們應該做到自己該做到的,因為家 長都希望老師們對他們的子女嚴格要求, 更迫切的需求就是讓他們的子 女學到真本事,他們肯定支持教師的行動。
進入大三階段則需要有選擇地重點學習嵌入式操作系統原理與編程、嵌 入式系統與 FPGA 的混合系統設計或者全力以赴鉆研 FPGA 應用技術等技 術方向, 大四
階段就可以真刀真槍地完成一個漂亮的畢業設計,并能夠 寫出一篇比碩士水平還要高的論文。
第三篇:周立功博客——給大學生學習ARM和FPGA的建議
0 周立功博客——給大學生學習ARM和FPGA的建議
對于初學者來說,要學的知識點很多,到底從哪里下手,人們常常感到非常迷茫。大一學生先從C語言開始入門,在大一階段由于對計算機還非常陌生,因此不可能寫出一個具有完整圖形界面的軟件,重點以“與硬件無關的計算方法、數據結構”為基礎學習C語言,至少練習編寫一萬行C代碼,否則不會找到編程的感覺,也體會不到編程樂趣,很多人就是因為缺乏一定量的訓練,所以對編程沒有興趣,以至于未到畢業時就全部忘記了,程序設計是一項實踐性很強的實踐活動,沒有大量的實踐作為基礎是很難入門的,因此我認為編寫一萬行代碼是判定是否入門的依據。請初學者記住:當你編寫了一萬行代碼時,這是你能夠從事專業的開始,否則你不要期望在這個領域混下去。與此同時,C語言也是學習和使用Verilog的重要基礎,所以千萬不可小視C語言。更重要的是,如果你的C語言不好的話,你將來就業選擇的路子就會受到很大的限制,要么只能做硬件工程師、銷售工程師或者轉行,別無選擇!有了一萬行編程的經驗后,大二接著開始學習數字電路和模擬電路了,這是你的機會!將來的開發工作有幾種選擇,但這兩門都很重要,學好了你有可能成為頂尖的高手、專家和系統級水平的人才,即便學得不太好,你也有可能成為一個優秀的工程師。前一篇博文講了,如果你精通了C/C++,即便你的硬件水平一般,你也可以成為一個優秀的開發工程師,即由硬件工程師負責邏輯電路和模擬電路的設計,由你來編程——你可以編寫基于WinCE、Linux、Vxworks或者Windows等操作系統的程序。那么怎樣才算基本上“精通”呢?至少編寫五萬行代碼,當你已經編寫了10萬行代碼時,可以說你已經完全精通了,這個時候你如果有很大的造化的話,那完全取決于你當初學習的基礎是否牢固了。所以我在前面提到了,精通一門可以成為優秀的開發工程師,但絕對不可能成為系統級的開發工程師,因為你的知識結構不行。
最好在學習數字電路時購買一個99元的EasyFPGA030開發學習板,這個板子是我們開發的,但這個價格是沒有利潤的,不要認為我是在做推銷,我們推出這個產品完全是針對大二學生的,希望有更多的大二學生提早醒悟,能夠在學習數字電路時同步學習FPGA和Verilog,強化課程之間的關聯。筆者雖然是一個企業家,但也有一份愛心和社會責任感,為社會做出自己的貢獻同樣也是企業家的“銷售業績”,我們為這個開發板撰寫了30萬字的配套資料和適合各種水平的范例,也投入了大量的精力錄制Verilog語言視頻講座,這些都是超值和免費的。與此同時從2009年開始著手針對大二和大三學生舉辦FPGA大賽,以提高在校大學生的興趣,讓那些覺悟者進一步提高自信心,找到自己未來的坐標。學好數字電路和模擬電路以及FPGA應用技術,除了成為電子產品開發工程師之外(高附加值的嵌入式系統產品幾乎離不開FPGA),還有一個就業方向就是號稱“金飯碗”的集成電路設計。
作為初學者,在學習《電子技術基礎(數字部分)》時同步學習FPGA與Verilog技術的重點是快速入門和打下一定的基礎,根據配套的教材和數字電路教材的內容將基本的數字電路用FPGA實現即可,這是本階段的學習目標,不要將學習高深難度的應用技術作為重點。并利用課余和暑假期間的空余時間,將一些圖書上現成的使用數字電路實現的例子用FPGA來完成設計即可,比方如何使用FPGA 實現一個計數器,并動手做出來。到大三階段在做出選擇,到底是選擇成為一個專業的FPGA應用設計工程師、還是嵌入式系統與FPGA混合應用系統設計工程師或集成電路開發工程師,以自己的興趣和志向為基礎而定,所以在學習嵌入式系統技術的同時學習FPGA,兩者之間并不矛盾。
最好在大一開始學習單片機,這就是筆者為何撰寫《新編電類專業計算機基礎》這本圖書的原因(詳見破解電類專業“就業難、人才荒”的解決方案!(4))。因為大一不學習單片機,后面的課程都沒有辦法學好。對于大一學習單片機,很多老師不去用心研究學習方法和教學規律,反而搬出一大堆理由來“嚇唬”人。筆者當年僅僅是一個技校生,在完全沒有指導老師的情況下,也找不到可以參考的技術資料,只是憑著偶爾看到一篇報道羅伯特設計的Altair 8800計算機就做出了一臺不需要工作軟件的計算機(改進型的Altair-80C31電路詳見《新編電類專業計算機基礎》教材)。要相信現在公開的信息、資訊條件、人們的聰明智慧與教師的力量,因此大學本科生在大一階段學會單片機是非常容易的一件事情。
有了單片機基礎之后,在大二階段學習數字電路與模擬電路的同時,結合單片機學習接口擴展技術與模擬前向通道數據采集技術,并編寫相應的程序實現一個一個的小系統設計,大三時根本不再需要學習所謂的接口技術與微機原理了。針對數字電路與模擬電路筆者準備寫作一套小系統設計與制作配套圖書,將前后之間的課程也同步和關聯起來,期望進一步提高大學生的動手能力。
有了大一、二階段強化訓練,后續的很多課程度可以理論與實踐并重地學習,比方目前大學開設的《自動控制理論》幾乎都是空對空地教學與聯系,如果結合自動控制理論的教學,讓學生學習設計一個自動穿越迷宮的電腦鼠,并舉辦相應的大賽,則能夠很好地將嵌入式系統應用技術、數字電路與模擬電路、計算方法與數據結構、機構設計......相關課程有機地結合起來,學生的興趣將大大地得到提高。
當學生有了學習的興趣和動力之后,教學勢必由老師個人在課堂上演“獨角戲”的場面轉變為研討會,學生也一定會竭盡全力由被動學習向主動學習轉變,這就是教育要達到的目標,所以我們不能一味地指責學生不好學。作為老師我們一定要思考和拿出行動,讓學生喜歡并愿意向您學習。事實上學生的未來完全取決于老師的引導,現在教師隊伍存在的很大毛病就是將責任推向擴招和學生不好好學,擴招有沒有問題?當然有,但作為教師我們做得怎么樣呢?我們是否在教學上做出了巨大的努力,這需要我們捫心自問。
學生不好好學,這也是事實!但也是表象,我們要思考他們為什么不好好學習?我們應該怎樣才能讓他們好好地學?作為老師,第一不能給學生劃定考試范圍,第二學生缺課要堅決扣分,如果做到這兩點基本的要求,學生不好好學就制度處理,我想效果會有很大的改變。當然就業難的責任也不能完全推給老師,但老師們應該做到自己該做到的,因為家長都希望老師們對他們的子女嚴格要求,更迫切的需求就是讓他們的子女學到真本事,他們肯定支持教師的行動。進入大三階段則需要有選擇地重點學習嵌入式操作系統原理與編程、嵌入式系統與FPGA的混合系統設計或者全力以赴鉆研FPGA應用技術等技術方向,大四階段就可以真刀真槍地完成一個漂亮的畢業設計,并能夠寫出一篇比碩士水平還要高的論文。
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
關鍵詞:工作人員, 硬件, 設計, 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難學的幾大原因。
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的學習其實就像學習圍棋一樣,學會如何在棋盤上落子很容易,成為一位高手卻是難上加難。