天天看點

FPGA學習筆記(一)——學習路線

聲明:這篇文章來自網際網路,不是我寫的,這裡隻是覺得挺好的分享出來,如果部落客要求删除,我會立馬删除的!

原文來自: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)都可以學一下,反正學無止境的。