FPGA難學?那該如何學習FPGA呢?
1、入門首先要掌握HDL(HDL=verilog+VHDL)
第一句話是:還沒學數(shù)電的先學數(shù)電。然后你可以選擇verilog或者VHDL,有C語言基礎(chǔ)的,建議選擇VHDL。因為verilog太像C了,很容易混淆,最后你會發(fā)現(xiàn),你花了大量時間去區(qū)分這兩種語言,而不是在學習如何使用它。當然,你思維能轉(zhuǎn)得過來,也可以選verilog,畢竟在國內(nèi)verilog用得比較多。
接下來,首先找本實例抄代碼。抄代碼的意義在于熟悉語法規(guī)則和編譯器(這里的編譯器是硅編譯器又叫綜合器,常用的編譯器有:Quartus、ISE、Vivado、Design Compiler 、Synopsys的VCS、iverilog、lattice的Diamond、Microsemi/Actel的Libero、Synplify pro),然后再模仿著寫,最后不看書也能寫出來。編譯完代碼,就打開RTL圖,看一下綜合出來是什么樣的電路。
HDL是硬件描述語言,突出硬件這一特點,所以要用數(shù)電的思維去思考HDL,而不是用C語言或者其它高級語言,如果不能理解這句話的,可以看《什么是硬件以及什么是軟件》。在這一階段,推薦的教材是《Verilog傳奇》、《Verilog HDL高級數(shù)字設(shè)計》或者是《用于邏輯綜合的VHDL》。不看書也能寫出個三段式狀態(tài)機就可以進入下一階段了。
此外,你手上必須準備Verilog或者VHDL的官方文檔,《verilog_IEEE官方標準手冊-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》,以便遇到一些語法問題的時候能查一下。
2、獨立完成中小規(guī)模的數(shù)字電路設(shè)計
現(xiàn)在,你可以設(shè)計一些數(shù)字電路了,像交通燈、電子琴、DDS等等,推薦的教材是夏老《Verilog 數(shù)字系統(tǒng)設(shè)計教程》(第三版)。在這一階段,你要做到的是:給你一個指標要求或者時序圖,你能用HDL設(shè)計電路去實現(xiàn)它。
這里你需要一塊開發(fā)板,可以選Altera的cyclone IV系列,或者Xilinx的Spantan 6。還沒掌握HDL之前千萬不要買開發(fā)板,因為你買回來也沒用。
這里你沒必要每次編譯通過就下載代碼,咱們用modelsim仿真(此外還有QuestaSim、NC verilog、Diamond的Active-HDL、VCS、Debussy/Verdi等仿真工具),如果仿真都不能通過那就不用下載了,肯定不行的。在這里先掌握簡單的testbench就可以了。推薦的教材是《WRITING TESTBENCHES Functional Verification of HDL Models》。
3、掌握設(shè)計方法和設(shè)計原則
你可能發(fā)現(xiàn)你綜合出來的電路盡管沒錯,但有很多警告。這個時候,你得學會同步設(shè)計原則、優(yōu)化電路,是速度優(yōu)先還是面積優(yōu)先,時鐘樹應(yīng)該怎樣設(shè)計,怎樣同步兩個異頻時鐘等等。推薦的教材是《FPGA權(quán)威指南》、《IP核芯志-數(shù)字邏輯設(shè)計思想》、《Altera FPGA/CPLD設(shè)計》第二版的基礎(chǔ)篇和高級篇兩本。
學會加快編譯速度(增量式編譯、Logiclock),靜態(tài)時序分析(timequest),嵌入式邏輯分析儀(signaltap)就算是通關(guān)了。如果有不懂的地方可以暫時跳過,因為這部分還需要足量的實踐,才能有較深刻的理解。
4、學會提高開發(fā)效率
因為Quartus和ISE的編輯器功能太弱,影響了開發(fā)效率。所以建議使用Sublime text編輯器中代碼片段的功能,以減少重復性勞動。Modelsim也是常用的仿真工具,學會TCL/TK以編寫適合自己的DO文件,使得仿真變得自動化,推薦的教材是《TCL/TK入門經(jīng)典》。
你可能會手動備份代碼,但是專業(yè)人士都是用版本控制器的,所以,為了提高工作效率,必須掌握GIT。文件比較器Beyond Compare也是個比較常用的工具。
此外,你也可以使用System Verilog來替代testbench,這樣效率會更高一些。如果你是做IC驗證的,就必須掌握System Verilog和驗證方法學(UVM)。推薦的教材是《Writing Testbenches using SystemVerilog》、《The UVM Primer》、《System Verilog1800-2012語法手冊》。
掌握了TCL/TK之后,可以學習虛擬Jtag(ISE也有類似的工具)制作屬于自己的調(diào)試工具,此外,有時間的話,最好再學個python。腳本,意味著一勞永逸。
5、增強理論基礎(chǔ)
這個時候,你已經(jīng)會使用FPGA了,但是還有很多事情做不了(比如,F(xiàn)IR濾波器、PID算法、OFDM等),因為理論沒學好。我大概地分幾個方向供大家參考,后面跟的是要掌握的理論課。
信號處理——信號與系統(tǒng)、數(shù)字信號處理、數(shù)字圖像處理、現(xiàn)代數(shù)字信號處理、盲信號處理、自適應(yīng)濾波器原理、雷達信號處理
接口應(yīng)用——如:UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太網(wǎng)接口)、SATA、光纖、displayPort
無線通信——信號與系統(tǒng)、數(shù)字信號處理、通信原理、移動通信基礎(chǔ)、隨機過程、信息論與編碼
CPU設(shè)計——計算機組成原理、單片機、計算機體系結(jié)構(gòu)、編譯原理
儀器儀表——模擬電子技術(shù)、高頻電子線路、電子測量技術(shù)、智能儀器原理及應(yīng)用
控制系統(tǒng)——自動控制原理、現(xiàn)代控制理論、過程控制工程、模糊控制器理論與應(yīng)用
壓縮、編碼、加密——數(shù)論、抽象代數(shù)、現(xiàn)代編碼技術(shù)、信息論與編碼、數(shù)據(jù)壓縮導論、應(yīng)用密碼學、音頻信息處理技術(shù)、數(shù)字視頻編碼技術(shù)原理
現(xiàn)在你發(fā)現(xiàn),原來FPGA會涉及到那么多知識,你可以選一個感興趣的方向,但是工作中很有可能用到其中幾個方向的知識,所以理論還是學得越多越好。如果你要更上一層,數(shù)學和英語是不可避免的。
6、學會使用matlab仿真
設(shè)計FPGA算法的時候,多多少少都會用到MATLAB,比如CRC的系數(shù)矩陣、數(shù)字濾波器系數(shù)、各種表格和文本處理等。
此外,MATLAB還能用于調(diào)試HDL(用MATLAB的計算結(jié)果跟用HDL算出來的一步步對照,可以知道哪里出問題)。推薦的教材是《MATLAB寶典》和杜勇的《數(shù)字濾波器的MATLAB與FPGA實現(xiàn)》。
7、足量的實踐
這個時候你至少讀過幾遍芯片手冊(官網(wǎng)有),然后可以針對自己的方向,做一定量的實踐了(期間要保持良好的代碼風格,增加元件例化語句的可讀性,繪制流程圖/時序圖,撰寫文檔的習慣)。
比如:通信類的可以做調(diào)制解調(diào)算法,儀表類的可以做總線分析儀等等。不過這些算法,在書上只是給了個公式、框圖而已,跟實際的差距很大,你甚至會覺得書上的東西都很膚淺。
那么,你可以在知網(wǎng)、百度文庫、EETOP論壇、opencores、ChinaAET、Q群共享、博客上面找些相關(guān)資料(校外的朋友可以在淘寶買個知網(wǎng)賬號)。其實,當你到了這個階段,你已經(jīng)達到了職業(yè)級水平,有空就多了解一些前沿技術(shù),這將有助于你的職業(yè)規(guī)劃。
在工作當中,或許你需要關(guān)注很多協(xié)議和行業(yè)標準,協(xié)議可以在EETOP上面找到,而標準(如:國家標準GB和GB/T,國際標準ISO)就推薦《標準網(wǎng)》和《標準分享網(wǎng)》。
8、圖像處理(這部分只寫給想學圖像處理的朋友,也是由淺入深的路線)
Photoshop?;ㄒ?、兩周的時間學習PS,對圖像處理有個大概的了解,知道各種圖片格式、直方圖、色相、通道、濾鏡、拼接等基本概念,并能使用它。這部分是0基礎(chǔ),目的讓大家對圖像處理有個感性的認識,而不是一上來就各種各樣的公式推導。推薦《Photoshop CS6完全自學教程》。
基于MATLAB或OpenCV的圖像處理。有C/C++基礎(chǔ)的可以學習OpenCV,否則的話,建議學MATLAB。這個階段下,只要學會簡單的調(diào)用函數(shù)即可,暫時不用深究實現(xiàn)的細節(jié)。推薦《數(shù)字圖像處理matlab版》、《學習OpenCV》。
圖像處理的基礎(chǔ)理論。這部分的理論是需要高數(shù)、復變、線性代數(shù)、信號與系統(tǒng)、數(shù)字信號處理等基礎(chǔ),基礎(chǔ)不好的話,建議先補補基礎(chǔ)再來??床欢睦碚撘部梢詴簳r先放下,或許學到后面就自然而然地開竅了。推薦《數(shù)字圖像處理》。
基于FPGA的圖像處理。把前面學到的理論運用到FPGA上面,如果這時你有前面第七個階段的水平,你將輕松地獨立完成圖像算法設(shè)計(圖像處理是離不開接口的,上面第五個階段有講)。推薦《基于FPGA的嵌入式圖像處理系統(tǒng)設(shè)計》、《基于FPGA的數(shù)字圖像處理原理及應(yīng)用》。
進一步鉆研數(shù)學。要在算法上更上一層,必然需要更多的數(shù)學,所以這里建議學習實分析、泛涵分析、小波分析等。
下面這兩個階段是給感興趣的朋友介紹的。
9、數(shù)電的盡頭是模電
現(xiàn)在FPGA內(nèi)部的事情是難不倒你的,但是信號出了FPGA,你就沒法控制了。這個時候必須學好模電。比如:電路分析、模擬電子技術(shù)、高頻電子線路、PCB設(shè)計、EMC、SI、PI等等,能設(shè)計出一塊帶兩片ddr3的FPGA開發(fā)板,就算通關(guān)了。
10、學無止境
能到這個境界,說明你已經(jīng)很厲害了,但是還有很多東西要學的,因為FPGA常常要跟CPU交互,也就是說你得經(jīng)常跟軟件工程師交流,所以也得懂點軟件方面的知識。比如ARM(Xilinx的ZYNQ和Altera的SOC會用到ARM的硬核)、DSP、Linux、安卓、上位機(QT、C#、JAVA)都可以學一下,反正學無止境的。

來源:文章來源于網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系刪除。