如何學習FPGA?

本人電子專業大三在讀,有一定基礎,可是學了這麼多基礎課程不知道如何應用於實踐當中。聽說華為今年在我們學校招收的研究生很多都是做FPGA的,所以想問一問怎麼學習。數電是我的專業基礎課,微機原理是我的專業選修課,感覺這兩科跟FPGA有一定關係吧(吐槽一下學校壓縮課時,數電課本後面的Verilog都沒有講過),而且這兩門我掌握的還很好,求大神解答。


我是北航大四學生,手頭已經做過的兩個稍大的項目是:1、基於FPGA的低複雜度AES演算法實現;2、基於FPGA的某飛行器的無線通信模塊。做的其他零零碎碎的小項目就不說了。
這兩個項目都比較有代表性,展現了FPGA的兩個的發展方向:演算法實現和工業控制。
由於這幾年對計算量、計算速度要求比較高的演算法的出現,基於FPGA的演算法實現成為了一個熱點,這個方向重在利用FPGA並行處理的特點對速度或者資源進行優化,難點是靈活利用電路結構。如果單純用類C的思想來做這方面的事情,肯定無法發揮FPGA最好的性能,而且對於水平不夠的人,甚至完全無法察覺到可優化的地方。這個方向的出路從最近的動態來看,依然是走學術或者類似微軟、亞馬遜這種大廠子才能支持。
工業控制方面更多的是邏輯控制,主要利用FPGA的靈活性、高實時性等特點,比如我第二個項目:開發無線通信模塊。在這個項目中,我初步的感受是:首先要在規定的時間內完成需求(不要小看這個),其次是要防出錯,畢竟是要用到實際中的,需要考慮各種突發情況。這個方向目前看來崗位很多:航天(我國航天部門)、通信(華為)、船舶(這個待遇挺好)等。
說完了我能看到的發展方向,不知道題主有沒有注意到:FPGA只是一個技術平台,更重要的還是你在某個領域的知識。這是什麼意思呢:由於FPGA的高性能,它能做很多事情,但是對題主你來說,你不能只把眼光放到FPGA身上,你要更多考慮到你要走的方向,否則只是流於FPGA的技術表面(比如寫個串口啦,這些都會有現成的模塊的),並沒有很強的競爭力,出去分分鐘就能被替代了。
總結下以上幾段的重點:FPGA只是一個實現的手段,你想要掌握它這是非常值得鼓勵的,但是你也要意識到不能只停留到FPGA技術本身上,更多要考慮結合專業知識

理清了發展方向後,我們再談如何學習FPGA。
首先是基礎知識:verilog的語言可以參考《Verilog數字系統設計教程》(夏宇聞)。看完前八章後,可以去淘寶買一個黑金的板子(三四百的就好),肯定會有一些附帶的實驗指導,跟著把前十個實驗完完整整的自己實現一遍(只看不算,代碼必須自己親自敲過),我覺得就算入門了。這個過程最多應該一個半月,如果超過一個半月,只能說:少年,你的學習熱情不夠啊!
接下來你就可以開始思考自己的發展方向,做一點實際的東西了。比如這個時候你已經有想法往通信方面靠一靠了,那你盡量做和通信有關的FPGA方面的小項目:比如bpsk的調製解調等(不過最好還是別人已經做過的有代碼的或者搞這方面的老師,這樣才有反饋)。在這個過程中,一方面深化下專業上的知識,一方面鞏固寫代碼的能力。這個過程做上兩三個差不多也兩三個月過去了。如果還是沒有特別想走的路的話你就挑個比較火的先走走試試吧:)
OK,接下來的路你自己一個人就很難走了,可以參考以下兩個方向:1、進入實驗室,找有這方面經驗的導師,做實際的工程項目;2、去和這個方向有關的地方實習。這個時候你也需要補充很多專業知識。

下面是我覺得題主可能會有的一些疑惑。
冒充下題主:數電和微機原理我學的很好,有沒有什麼幫助呢?
回答:當然是有幫助的,寫Verilog實際上寫的是電路,這個電路指的就是數電的基礎。但是題主要注意到:1、所謂學的很好(如能考高分),並不意味著你能靈活運用,知識的掌握不是一蹴而就的,更多的是需要你在實際中不斷理解。2、如果你真的學的很好,前期也無法看出來,要到做實際項目中,你才會發現你代碼的質量更高,調試也更輕鬆。

繼續冒充題主:哇擦,好多人都說自學很難啊,真的那麼難么?
回答:比起C、C#、JS、python(這些我弄過)是入門門檻高一點:要求你對電路很好的理解,對代碼質量要求高,同時還要有耐心調試軟體+硬體的能力。但是這些難點才是競爭力啊,要是誰都能拿下來,公司幹嘛非要選你啊?另外呢,軟體這些好像大家看著入門低一點,各種培訓班遍地開花,但是真要學深了,也是要下苦功夫的。不論哪行哪業,不能保持持續的深入學習與創新力,最終都會被AI替代hhhhh

 冒充題主上癮ing:哇,謝謝你的耐心解答!有什麼我能幫你的么?
回答:題主,如果你真的在這方面學有所成了,請你在這方面多鼓勵並幫助你的學妹們。當她們有類似題主今天的疑惑的時候,請你比我今天更耐心地為她們講解。多謝!(出於希望能看到更多的女性進入類似的行業的心理:))

最後:祝題主真的能在FPGA方面做出一番成就來~加油~~~

by 調bug調到淚崩的lucyyang


1.把知乎下面有關FPGA方面的一些高票回答都看一遍;

2.把EE要不要轉CS的高票回答都看一遍;

如果上面兩件事你都做完了,還覺得想學FPGA的話。那就來看我的MooC吧:

數字集成電路與系統設計(ASIC設計)_電子科技大學_中國大學MOOC(慕課)

當然,我一般建議看我的MooC之前先要看我電的另外一門課程:

數字邏輯設計及應用_電子科技大學_中國大學MOOC(慕課)

看完了,是不是就學會FPGA了呢。當然不是啦。MooC這種東西就是給你點撥點撥,引引路而已。所以你需要找個開板來練個手。至於什麼開發板,anyway。淘寶上找口碑好價格便宜的來練個手就好了。

等你把基礎的什麼點燈、串口、SPI之類的做完了,自學FPGA也差不多就到這了。再要繼續往上就沒法自學了。


搞通信前景堪憂,去互聯網吧,先學點基礎的Verilog,整塊板子帶PCIE介面的,使得pc機和fpga可以通過pcie通信,來加速pc的程序,比如說文本壓縮解壓縮,圖像壓縮解壓縮,矩陣乘法,神經網路等等


聲明:這篇文章來自互聯網,不是我寫的,這裡只是覺得挺好的分享出來,如果博主要求刪除,我會立馬刪除的!

原文來自:http://m.blog.csdn.net/k331922164/article/details/44626989

一、入門首先要掌握HDL(HDL=verilog+VHDL)。

第一句話是:還沒學數電的先學數電。然後你可以選擇verilog或者VHDL,有C語言基礎的,建議選擇VHDL。因為verilog太像C了,很容易混淆,最後你會發現,你花了大量時間去區分這兩種語言,而不是在學習如何使用它。當然,你思維能轉得過來,也可以選verilog,畢竟在國內verilog用得比較多。

接下來,首先找本實例抄代碼。抄代碼的意義在於熟悉語法規則和編譯器(這裡的編譯器是硅編譯器又叫綜合器,常用的編譯器有:Quartus、ISE、Vivado、Design Compiler 、Synopsys的VCS、iverilog、Lattice的Diamond、Microsemi/Actel的Libero、Synplify pro),然後再模仿著寫,最後不看書也能寫出來。編譯完代碼,就打開RTL圖,看一下綜合出來是什麼樣的電路。

HDL是硬體描述語言,突出硬體這一特點,所以要用數電的思維去思考HDL,而不是用C語言或者其它高級語言,如果不能理解這句話的,可以看《什麼是硬體以及什麼是軟體》。在這一階段,推薦的教材是《Verilog HDL數字設計與綜合》或者是《用於邏輯綜合的VHDL》。不看書也能寫出個三段式狀態機就可以進入下一階段了。

此外,你手上必須準備Verilog或者VHDL的官方文檔,《verilog_IEEE官方標準手冊-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》,以便遇到一些語法問題的時候能查一下。

為什麼不推薦學習NIOS II和MicroBlaze等軟核?

1、性價比不高,一般的軟核性能大概跟Cortex M3或M4差不多,用FPGA那麼貴的東西去做一個性能一般的CPU,在工程上是非常不划算的。不如另外加一塊M3。

2、加上軟核,可能會影響到其它的邏輯的功能。這是在資源並不十分充足的情況下,再加上軟核,導致布局布線變得相當困難。

3、軟核不開源,出現Bug的時候,不容易調試。

二、獨立完成中小規模的數字電路設計。

現在,你可以設計一些數字電路了,像交通燈、電子琴、DDS等等,推薦的教材是《Verilog HDL應用程序設計實例精講》。在這一階段,你要做到的是:給你一個指標要求或者時序圖,你能用HDL設計電路去實現它。這裡你需要一塊開發板,可以選Altera的cyclone IV系列,或者Xilinx的Spantan 6。還沒掌握HDL之前千萬不要買開發板,因為你買回來也沒用。這裡你沒必要每次編譯通過就下載代碼,咱們用modelsim模擬(此外還有QuestaSim、NC verilog、Diamond的Active-HDL、VCS、Debussy/Verdi等模擬工具),如果模擬都不能通過那就不用下載了,肯定不行的。在這裡先掌握簡單的testbench就可以了。推薦的教材是《WRITING TESTBENCHES Functional Verification of HDL Models》。

三、掌握設計方法和設計原則。

你可能發現你綜合出來的電路儘管沒錯,但有很多警告。這個時候,你得學會同步設計原則、優化電路,是速度優先還是面積優先,時鐘樹應該怎樣設計,怎樣同步兩個異頻時鐘等等。推薦的教材是《FPGA權威指南》、《IP核芯志-數字邏輯設計思想》、《Altera FPGA/CPLD設計》第二版的基礎篇和高級篇兩本。學會加快編譯速度(增量式編譯、LogicLock),靜態時序分析(timequest),嵌入式邏輯分析儀(signaltap)就算是通關了。如果有不懂的地方可以暫時跳過,因為這部分還需要足量的實踐,才能有較深刻的理解。

四、學會提高開發效率。

因為Quartus和ISE的編輯器功能太弱,影響了開發效率。所以建議使用Sublime text編輯器中代碼片段的功能,以減少重複性勞動。Modelsim也是常用的模擬工具,學會TCL/TK以編寫適合自己的DO文件,使得模擬變得自動化,推薦的教材是《TCL/TK入門經典》。你可能會手動備份代碼,但是專業人士都是用版本控制器的,所以,為了提高工作效率,必須掌握GIT。文件比較器Beyond Compare也是個比較常用的工具。此外,你也可以使用System Verilog來替代testbench,這樣效率會更高一些。如果你是做IC驗證的,就必須掌握System Verilog和驗證方法學(UVM)。推薦的教材是《Writing Testbenches using SystemVerilog》、《The UVM Primer》、《System Verilog1800-2012語法手冊》。

掌握了TCL/TK之後,可以學習虛擬Jtag(ISE也有類似的工具)製作屬於自己的調試工具,此外,有時間的話,最好再學個python。腳本,意味著一勞永逸。

五、增強理論基礎。

這個時候,你已經會使用FPGA了,但是還有很多事情做不了(比如,FIR濾波器、PID演算法、OFDM等),因為理論沒學好。我大概地分幾個方向供大家參考,後面跟的是要掌握的理論課。

1、信號處理——信號與系統、數字信號處理、數字圖像處理、現代數字信號處理、盲信號處理、自適應濾波器原理、雷達信號處理

2、介面應用——如:UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G乙太網介面)、SATA、光纖、DisplayPort

3、無線通信——信號與系統、數字信號處理、通信原理、移動通信基礎、隨機過程、資訊理論與編碼

4、CPU設計——計算機組成原理、單片機、計算機體系結構、編譯原理

5、儀器儀錶——模擬電子技術、高頻電子線路、電子測量技術、智能儀器原理及應用

6、控制系統——自動控制原理、現代控制理論、過程式控制制工程、模糊控制器理論與應用

7、壓縮、編碼、加密——數論、抽象代數、現代編碼技術、資訊理論與編碼、數據壓縮導論、應用密碼學、音頻信息處理技術、數字視頻編碼技術原理

現在你發現,原來FPGA會涉及到那麼多知識,你可以選一個感興趣的方向,但是工作中很有可能用到其中幾個方向的知識,所以理論還是學得越多越好。如果你要更上一層,數學和英語是不可避免的。

六、學會使用MATLAB模擬。

設計FPGA演算法的時候,多多少少都會用到MATLAB,比如CRC的係數矩陣、數字濾波器係數、各種表格和文本處理等。此外,MATLAB還能用於調試HDL(用MATLAB的計算結果跟用HDL算出來的一步步對照,可以知道哪裡出問題)。推薦的教材是《MATLAB寶典》和杜勇的《數字濾波器的MATLAB與FPGA實現》。

七、足量的實踐。

這個時候你至少讀過幾遍晶元手冊(官網有),然後可以針對自己的方向,做一定量的實踐了(期間要保持良好的代碼風格,增加元件例化語句的可讀性,繪製流程圖/時序圖,撰寫文檔的習慣)。比如:通信類的可以做調製解調演算法,儀錶類的可以做匯流排分析儀等等。不過這些演算法,在書上只是給了個公式、框圖而已,跟實際的差距很大,你甚至會覺得書上的東西都很膚淺。那麼,你可以在知網、百度文庫、EETOP論壇、opencores、ChinaAET、Q群共享、博客上面找些相關資料(校外的朋友可以在淘寶買個知網賬號)。其實,當你到了這個階段,你已經達到了職業級水平,有空就多了解一些前沿技術,這將有助於你的職業規劃。

在工作當中,或許你需要關注很多協議和行業標準,協議可以在EETOP上面找到,而標準(如:國家標準GB和GB/T,國際標準ISO)就推薦《標準網》和《標準分享網》。

八、圖像處理。(這部分只寫給想學圖像處理的朋友,也是由淺入深的路線)

1、Photoshop。花一、兩周的時間學習PS,對圖像處理有個大概的了解,知道各種圖片格式、直方圖、色相、通道、濾鏡、拼接等基本概念,並能使用它。這部分是0基礎,目的讓大家對圖像處理有個感性的認識,而不是一上來就各種各樣的公式推導。推薦《Photoshop CS6完全自學教程》。

2、基於MATLAB或OpenCV的圖像處理。有C/C++基礎的可以學習OpenCV,否則的話,建議學MATLAB。這個階段下,只要學會簡單的調用函數即可,暫時不用深究實現的細節。推薦《數字圖像處理matlab版》、《學習OpenCV》。

3、圖像處理的基礎理論。這部分的理論是需要高數、復變、線性代數、信號與系統、數字信號處理等基礎,基礎不好的話,建議先補補基礎再來。看不懂的理論也可以暫時先放下,或許學到後面就自然而然地開竅了。推薦《數字圖像處理》。

4、基於FPGA的圖像處理。把前面學到的理論運用到FPGA上面,如果這時你有前面第七個階段的水平,你將輕鬆地獨立完成圖像演算法設計(圖像處理是離不開介面的,上面第五個階段有講)。推薦《基於FPGA的嵌入式圖像處理系統設計》、《基於FPGA的數字圖像處理原理及應用》。

5、進一步鑽研數學。要在演算法上更上一層,必然需要更多的數學,所以這裡建議學習實分析、泛涵分析、小波分析等。

下面這兩個階段是給感興趣的朋友介紹的。

九、數電的盡頭是模電。

現在FPGA內部的事情是難不到你的,但是信號出了FPGA,你就沒法控制了。這個時候必須學好模電。比如:電路分析、模擬電子技術、高頻電子線路、PCB設計、EMC、SI、PI等等,能設計出一塊帶兩片DDR3的FPGA開發板,就算通關了。具體的學習路線可以參考本博客的《如何學習硬體設計——理論篇》和《如何學習硬體設計——實踐篇》。

十、學無止境。

能到這個境界,說明你已經很厲害了,但是還有很多東西要學的,因為FPGA常常要跟CPU交互,也就是說你得經常跟軟體工程師交流,所以也得懂點軟體方面的知識。比如ARM(Xilinx的ZYNQ和Altera的SOC會用到ARM的硬核,請參考本博客的《如何學習嵌入式軟體》)、DSP、linux、安卓、上位機(QT、C#、JAVA)都可以學一下,反正學無止境的。


謝邀。

受寵若驚,我只是一個初入門檻、並為之欣喜的「小學生」,有一些觀點自然比不上回答本題的其他老師、同學們完整、有前瞻性,然而既然被邀請, 完全忽略也不好。索性結合自己學習的一些經歷,把「如何學習FPGA」簡單總結為幾個階段,希望能夠對題主和其他學弟學妹們有一點微小的幫助。如果有錯誤的陳述,還請大家指正。


0. 數字電路基礎、VLSI數字電路基礎與RTL(Register Transfer Level)描述

在這個階段,學習的目的主要是為學習FPGA打基礎。掌握一些數字電路的基礎概念,了解隨著設計的結構改變,這個設計的功耗、面積、延時(Latency)、吞吐量(Throughput)會怎樣變化,並且能夠用畫圖的方式表達RTL級別的電路。了解這些內容,有助於認識到「我在寫硬體描述語言(HDL,Hardware Description Language)的時候,究竟在幹些什麼」——也就是我們想要生成的硬體大致是什麼樣的。只有這樣,你才能合理地估計設計的指標,有效地完成設計。

通過對狀態機、control path、datapath的了解和認識,你能更深入地了解RTL設計方法的含義和模式,也保證你能在之後的設計中隨心所欲地構建的控制系統。

參考內容:

本科階段的數字電路課程用書、CMOS數字電路基礎相關書籍。


1. 掌握多門HDL

在這個階段,學習的主要目的是熟練掌握HDL的行為級描述,以便自己能夠正確、高效地描述一種硬體。學習語法、了解代碼的可綜合性、了解一些基本的「陷阱」(如鎖存器)等等這些基礎的不再贅述,主要強調一下為什麼是掌握「多門」HDL。

隨著硬體設計自動化的發展,工程師們的需求越來越高,HDL的發展也是百花齊放。比如使用Verilog可以描述系統的行為,而SystemVerilog又在其基礎上加強了測試的功能(assertion、randomize等),在功能上方便了用戶的使用(interface、class等)。使用不同的HDL,你會體會到它們的長處和不足,從而在適合的時候選擇使用它們中的一個。

這一階段的學習可以和階段0融合起來,互相促進。

參考內容:

HDL的教程、書籍數不勝數。這裡推薦一個經過一段學習之後適合看的書籍:《數字信號處理的FPGA實現》。這本書非常適合經過一段學習之後的「實戰練習」,但不建議一開始就學習。


2. 硬體測試與驗證

要保證硬體設計完美運行,測試是少不了的。一些基本的測試方法,如何有效地測試自己的硬體,不同的測試方法優缺點在哪裡,這些都是需要了解的。其實硬體測試可以分為幾個層次,從下至上抽象程度逐漸提高,可不是寫一個testbench那麼簡單。比如在研究生課程的學習中,我們經常配合使用HDL和其他高級語言(如C++、Python等)以及腳本語言(如tcl等)完成硬體的設計和測試。如何保證測試的魯棒性?如何設計測試中的scoreboardcheckerscenarios等組件?這都是在碼代碼的過程中慢慢習得的。

參考內容:

L.-T. Wang, C.-W. Wu, and X. Wen, Eds., VLSI test principles and architectures: design for testability. Amsterdam?; Boston: Elsevier Morgan Kaufmann Publishers, 2006.(這部分內容我暫且還要學習,所以直接粘貼上來老師推薦的書)。


3. FPGA原理及基礎結構

作為天天和FPGA打交道的使用者,怎麼能不對這個事物的本質略有了解?如果你致力於FPGA本身的開發,我想對PLD的了解、早期FPGA的結構、Logic Cell的出現和結構、switch的結構、布局布線策略等等這些內容必定是繞不過去了。而退一步講,就算我們僅僅著眼於FPGA的使用,也不可偏安一隅,把自己視為簡單的使用者。對FPGA本身的了解有助於使用者在設計時估算資源的利用,還有運算的速度。為什麼我們不能依賴工具的估算?因為工具估算出來已經是數個小時之後的事情了。

參考內容:

FPGA供應商的手冊。比如Xilinx龐大而繁雜的手冊系統。


4. 高層次綜合(HLS,High Level Synthesis)與硬體生成自動化(Automatic Hardware Generation)

經過了長時間的努力學習,你或許熟練掌握了HDL的使用,有了一些中型規模或大型規模的項目基礎,經歷了綜合和布局布線苦等數十個小時的痛苦,也收穫了在On Chip Debugging時看到結果的欣喜。這時候,你不禁開始思考,我未來的工作就是這樣了嗎?我永遠無法體驗到軟體工程師暢快淋漓的開發過程和高速的版本迭代了嗎?

這也是很多優秀的硬體工程師正在思考並試圖解決的問題。你翻遍資料,一些新奇的詞語,如Vivado HLS, SDAccel, Altera+OpenCL, BlueSpec, Chisel等映入你的眼帘。

HLS旨在解決現有HDL學習成本高昂、開發周期長、驗證難的問題,試圖將高級語言的特性(如面向對象等)融合到硬體設計的過程中,進一步抽象硬體,減少開發難度,提高開發效率。目前HLS還在探索階段,有一些很新奇,很好玩的工具值得你去嘗試。了解這些以後,或許你會願意在這個方向上更進一步,提出屬於自己的獨特見解。

假設我們有了高效的開發語言和環境,我們是否能做得更進一步?根據阿姆達爾定律(Amdahl』s Law)及其推演,我們發現靜態的單一核結構和多核結構在硬體加速上的收益是小於動態的多核結構的。是否能利用這些高效的開發環境實現一些動態的可重構結構,去自適應不斷改變的計算任務?這種自動化生成硬體的模式會不會成為高層次綜合的價值所在?以我或許略有狹隘的眼光來看,這些說不定都是值得探討的問題。

參考內容:

[1]M. D. Hill and M. R. Marty, 「Amdahl』s Law in the Multicore Era,」 Computer, vol. 41, no. 7, pp. 33–38, Jul. 2008.

[2]D. Bacon, R. Rabbah, and S. Shukla, 「FPGA Programming for the Masses,」 Queue, vol. 11, no. 2, p. 40:40–40:52, Feb. 2013.


5 FPGA在暗硅時代的地位

學習之餘,你或許會疑惑:我學這麼多東西,是不是像別人說的,FPGA只是一種工具,最終我的選擇仍然是通信或者別的東西?我想,如果你十分喜愛FPGA的話,或許也樂意從體系結構的角度考慮一下這種存在了很久的非馮諾伊曼結構,是否還有煥發生機的潛力?

半導體行業步入暗硅(Dark Silicon)時代已經十年出頭了,面積和頻率已經不是從業者唯一的關注點,在今天我們更樂意談功耗、power-delay product或者energy-delay product,以及各種似乎要一夜間改變世界的新工藝。FPGA或許沒有通用處理器那麼易於開發,也沒有ASIC的功耗低、效率高,但是它比通用處理器更加靈活、更加客制化,在一定出貨量的情況下,也比ASIC的成本低,或許會成為一些企業的折衷選擇(Microsoft Catapult,AmazonXilinx等)。在FPGA上實現低功耗、高效率的計算,說不定也不失為一種解決方法。或許在未來,FPGA有很多可以做的事情,甚至發展成為另一種通用計算的形式。

參考內容:

[1]M. B. Taylor, 「A Landscape of the New Dark Silicon Design Regime,」 IEEE Micro, vol. 33, no. 5, pp. 8–19, Sep. 2013.


6 多說一點

看到這裡,你或許會發現這似乎已經超出「如何學習FPGA」一大截了。可是我覺得學習的樂趣就在於了解更多,思考更多。為什麼我們不能多想一點呢?

衷心希望題主能看到FPGA的魅力。如果你喜歡它,我想,你也一定更有可能學好它。


在學校時學習了一段時間FPGA,今年畢業入職做嵌入式開發,用的是zynq,ARM和FPGA都要使用,真慶幸當初自學了幾天FPGA。讀研後不久有機會接觸FPGA,拿到了學院的一塊Nexys3開發板,開始了學習之路,不過沒有深入學習應用,隨便說些零碎的。

1、我一開始找了本講Verilog的pdf,看了看,就開始寫代碼了,遇到不會的,再回去查語法、查資料。

2、搞明白FPGA的資源、工作原理,查找表、IOB、塊RAM、DSP等等,編一些簡單的Verilog程序,看看綜合、布局布線的報告,知道怎麼做模擬。前幾天在zynq上寫代碼,有一處乘法,通過看報告知道,最後調用了一個DSP來完成乘法運算。

3、試著看一些時序圖,個人的經驗是,把握好建立時間和保持時間很重要。課本上常見的有VGA時序,也可以自己做一個串口時序、I2C時序什麼的,比如編一個串口收發功能與PC機通訊,逐漸理解時序、狀態機。

4、懂得加約束,速度和面積,不過我目前沒遇到高速、資源緊張的情況,所以沒有關注過。

5、把FPGA和單片機對比學習,比如STM32上帶串口控制器,只需要往寄存器里寫數就能控制串口引腳上出現串口通訊時序,而在FPGA上這個時序就需要你自己寫Verilog代碼來控制。

6、FPGA是一個工具,我的想法是不要僅僅局限在FPGA上,其他的工具也要懂。

我有個老鄉在我們學校教書,他跟我說他們實驗室用ARM+FPGA;去年去一家國網公司實習,用的是DSP+FPGA。貌似好多場合是用ARM/DSP+FPGA來做的,FPGA做數據採集、緩存,ARM做演算法處理數據。現在Xilinx推的zynq系列,就是在單晶元上集成ARM和FPGA,Xilinx推出的HLS、SDSoC軟體工具,即使不懂Verilog、VHDL,也能用C來編程。

7、要有實際的項目來練手,光編幾個解碼器、加法器、時序是遠遠不夠的,可以找些實際項目來練手,有機會進實驗室就去實驗室多學習吧。

PS:由於對嵌入式感興趣,本人將重心放在了ARM上,不過目前的工作既要寫Verilog,也要寫C驅動,總之,都學點挺好


①本垃圾跟你同級同一個學院...但是還是想BB一下......所以建議還是考計算機的研吧/手動滑稽...

②好吧,既然你想學FPGA,那我這個笨鳥想給你一點建議,但是在給你建議之前,先提幾個問題...個人看法...不喜勿噴...

③你真的熟悉數電了嗎?(什麼是組合邏輯(概念),什麼是時序邏輯(概念),狀態機Moore型與mealy型的本質區別是什麼,RAM、ROM及其延伸存儲結構是什麼...之類的你OK了嘛?)

④微嵌(所謂的微機原理)你真的感覺還可以?這一門課融合了微積分、信號與系統、計算機原理與組成、計算機組織、數電、模電、微電子學、C語言、彙編、Linux系統等等一堆交叉學科,從系統到軟體,從軟體到硬體,從硬體到晶體管,這都涉及到...微嵌這門課算是普及知識的書,由於其概念多,知識點綜合繁雜,不開卷真的會掛一大批的...

舉個例子:拿其流水線設計,理論上這麼一回事,但是深究下來,你硬體設計的時候怎麼應用流水線,硬體中哪些場合適合應用流水線?這又是一個方向...

⑤FPGA屬於數字設計方向,你確定要實踐一下嘛?(確定請往下看)

⑥自學需要很強大的毅力(本垃圾毅力太菜了,因此現在還沒有學會FPGA...)毅力牛逼的話,你可以自己買開發板自己看教程自學。但是...

我們學校開有相關的課程:

比如

第二學期(所謂的大x下)都會有一些全校性的選項課:

VHDL程序設計,在清水河;

數字電路FPGA實驗(verilog)(這門課往往和數電課在同一個學期開,是數電的實踐,看來你是錯過了),給開發板,這門課在清水河。

大x上也有一堆相關的課程(不過貌似都是學院內的),比如本學院的EDA課(VHDL)(集電和微電專業都有)。

通信學院有專業集成電路設計(Verilog)。

電工學院也是EDA設計(Verilog)。

計算機學院有好像有計組實驗(Verilog)。

信軟學院有FPGA電路設計(Verilog)。

物電學院的郭磊老師開的一門RISC CPU設計選修課(全校性的),也講Verilog,也發開發板

認真上過上面一門課之後,基本能入門FPGA

只能幫到這了,再說下去就是裝逼了。。。

然後深入提高靠自己了...


學校里做過稍微嚴肅點的fpga工作 大概就是搞個arm核 掛個ddr3 寫個協處理器 跑個linux 勉強提的起面試官胃口

但自學想達到這個高度太難了 你不可能買得起這麼多IP(核 匯流排 外設)

你買不起太好的板子(五位數至少 不然放不下跑不動)

你沒tool chain的資源 (模擬vcs verdi 綜合synplify 布局布線planahead 這些正版都是天價 還得搞個伺服器來跑 光布局布線要跑一天

買不起調試儀器 有bug咋辦 靠譜點邏輯分析儀總是要的吧 又是至少五位數

所以還是算了吧 學個javascript簡單多了


作為通信學生,大二下學期開始接觸的FPGA,進了實驗室跟著師兄學了一段時間就跟老師,前前後後學了差不多一年。因為有師兄和老師帶,基礎方面學的會比較快,專業也有verilog,數電,微機這些課程,都掌握得不錯。

然後,去年三月份下決心放棄了FPGA,為了大四的找工作投奔了互聯網(捂臉)


電子類研二在讀,目前某研究所實習中

研二因為工作項目需要,初學FPGA

分享我的看法

FPGA是工具,是平台

如果你將來想從事硬體,嵌入式,或者具體的晶元設計類工作

你很大程度上會用到FPGA

至於華為招FPGA的研究生

因為華為,在晶元設計上需求很大啊!但是晶元設計,遠遠不止FPGA啊!

題主,你大三在讀,首先,這個時機很重要,你要清楚,自己將來想要從事的行業究竟是哪個方向?

電子類計算機類通信類專業,每一個領域看似獨立,卻又息息相關。

所以說,首先,你一定要確定自己想做什麼。

其次,當你確定了自己要走硬體學FPGA之後,OK,目標清晰就好說了

數電模電微機原理這些專業課,都是基礎

你需要選擇一門語言,硬體語言來描述你想要做的事。

隨便Verilog的語法書,最普遍的,夏宇聞的那本就行。

然後,從簡單的程序開始寫

記住,是自己練習,自己寫,開始可以調一調書上的程序,這個時間,全心全意做,不需要10天

好噠,10天之後,你基本了解了語法,了解了狀態機之後。

不妨嘗試做幾個小工程,一定要記得,我們是工科生

一定要動手做!

一定要動手做!

一定要動手做!

當你經歷了各種莫名其妙的bug之後,相信你已經能讓跑馬燈流水燈各種亂七八糟的小程序跑起來了

相信這個時候,你也理解狀態機了

然後,你不妨挑戰下做個小CPU

具體資料,除了語法參考書之外,還有eetop等論壇,初學的你,遇到的大多數問題,都有前輩實踐過。你完全可以站在巨人的肩膀上。

爪機碼字,粗略的分享下自己的經歷。

樓上有幾位說的真的挺好的。那位本科就能跟著做項目的小夥伴,真的很棒。

總之,實踐很重要,動手很重要,自己寫程序調試很重要

當然,模擬工具,也很重要!

如果有條件,跟著老師做項目肯定是非常好的選擇!


做FPGA的 , 描述是不對的。

應該說基於FPGA進行集成電路開發的 。

怎樣學 , 先進實驗室 。

上課什麼的都不太管用 。 做個項目是必須的 。

更何況更多的是工程問題和工具使用 。

語言是必須的 , 然而也只是語言。

去幫導師幹活去吧 。 干到了就是賺到了


同意lucyyang的看法,重要的還是演算法,電路知識等。當然,FPGA本身的學習重要不,也重要,但是這些都是熟練和非熟練區別。工具運用熟練了,肯定有很大幫助,但是如果演算法有問題,再熟練的工具,也不行。


看起來貌似是成都郫縣某高級電子學校的同學啊

非電子專業,但是有數電課程加上選修課選有FPGA相關課程所以還算對這方面有興趣吧。

上過我電關於FPGA的三門選修課,一門講Verilog,一門講VHDL,一門講的無比高深的基於FPGA的單片機實驗。

語言方面其實掌握一種就行了,Verilog很像c語言,可以直接學,自學教材可以去智博找那個藍皮的。VHDL個人感覺太過嚴謹和複雜了,但是這樣寫不容易出錯,隨便去圖書館借本書了解了解吧。

其實在我們這個階段我覺得學學寫代碼拷拷板子就很滿足了,當然你需要一個板子,我們學校的FPGA選修課會有大量的上機甚至直接兩人一組的發板子,所以上手的機會很多,多練練語言就能掌握好。

寫代碼里的模塊就像做一個真值表,你只要把什麼樣的輸入對應什麼樣的輸出把握好,就能做出你想要的晶元啦 模塊之間相互連接就像電路一樣,如果你數電學的好的話相信是沒問題的。

學FPGA在現階段的好處在於方便模擬,電子實驗什麼的差不多都能模擬出來,晶元代碼可以直接網上找或者程序自帶的庫里找。電子實驗的最後有自主實驗用FPGA做非常容易。

還有就是用FPGA很好做畢設?我不是電子專業的我不知道(?˙ー˙?)我只是興趣愛好者。

至於那個基於FPGA的單片機實驗嘛(?_?)這個課是真的太難理解了(全班幾乎全掛的課),不是我不知道FPGA,也不是我不知道單片機。這個課已經牽涉到很多FPGA的核心原理問題了,根本不是本科階段能掌握的東西嘛!(ノ=Д=)ノ┻━┻估計要花很多很多時間才能搞明白,看我以後有沒有興趣和時間去搞搞了(●—●)【選這課的都是作死的,建議別選】

所以我覺得現階段你要做的就是搞明白代碼多做實踐吧。FPGA具體能做什麼?你可以去查查EDA技術,數電書上有,也可以百度百科,好像現在很多晶元都是這樣做出來的吧。


不要學


verilog是我學過的最簡單的編程語言,fpga是我見過的最容易上手的可編程處理單元。

但是,verilog也是最難深入理解的。


作為一個從V4玩到V7,可以一個人搞定整機裡面所有近十片V7的老手,說一下我是如何入FOGA這個坑的:首先第一學好數電 學好數電 學好數電 說三遍;我覺得我們學校當初有些課程開的非常好,學完數電後給你各種TTL74系列門電路來搭一個時鐘加鬧鈴,下個學期有給兩周時間來玩FPGA的低端開發板,剛玩的時候第一個任務就是在FPGA裡面用門電路和那幾種數電基本結構搭個東西出來,總之一定要學好數電。至於工作之後就看造化了, 看有多少實戰機會能玩到什麼器件能做一些什麼樣的項目,要了解你用的器件,比如XILINX的器件每個系列有自己的架構仔細啃文檔尤其是時鐘和IO架構的文檔,至於其他的要用到什麼IP啊介面啊比如DDR GTX這些啊 多啃啃文檔多練練自然就慢慢有經驗該怎麼學了


飄過 需要積累 工作中基本用verilog 建議買個xilinx的開發板學習 以後工作待遇好


modelsim是神器


參加學校的電子設計競賽,這個應該大部分學校都有吧,選一個FPGA/CPLD相關的題目。獲個獎就基本入門了。


推薦閱讀:

電子工程師與軟體工程師眼中的CPU有什麼不同?
機電工程師、機械工程師、電子工程師、結構工程師、模具設計師選擇考哪個含金量高些?.
通信工程專業轉模擬電路設計是怎樣一種感受?是不是跨度會很大?希望有大神來談談。?
學電子工程的有什麼比較好的中文教材啊 ?
在電子電路中那本入門教材最好,特別是對零基礎的初學者。?

TAG:現場可編輯邏輯門陣列FPGA | 電子 | 電子工程師 |