入門首先要掌握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》,以便遇到一些語法問題的時候能查一下,。
二
獨立完成中小規(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 TESTBENCHESFunctional Verification of HDL Models》。
三
掌握設(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)了。如果有不懂的地方可以暫時跳過,,因為這部分還需要足量的實踐,,才能有較深刻的理解。
四
學會提高開發(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 usingSystemVerilog》,、《The UVM Primer》,、《System Verilog1800-2012語法手冊》。
掌握了TCL/TK之后,,可以學習虛擬Jtag(ISE也有類似的工具)制作屬于自己的調(diào)試工具,,此外,有時間的話,,最好再學個python,。腳本,意味著一勞永逸,。
五
增強理論基礎(chǔ)
這個時候,,你已經(jīng)會使用FPGA了,但是還有很多事情做不了(比如,,F(xiàn)IR濾波器,、PID算法、OFDM等),,因為理論沒學好,。我大概地分幾個方向供大家參考,后面跟的是要掌握的理論課,。
1、信號處理——信號與系統(tǒng),、數(shù)字信號處理,、數(shù)字圖像處理、現(xiàn)代數(shù)字信號處理,、盲信號處理,、自適應(yīng)濾波器原理、雷達信號處理
2,、接口應(yīng)用——如:UART,、SPI、IIC,、USB,、CAN、PCIE,、Rapid IO,、DDR、TCP/IP,、SPI4.2(10G以太網(wǎng)接口),、SATA、光纖,、DisplayPort
3,、無線通信——信號與系統(tǒng),、數(shù)字信號處理、通信原理,、移動通信基礎(chǔ),、隨機過程、信息論與編碼
4,、CPU設(shè)計——計算機組成原理,、單片機、計算機體系結(jié)構(gòu),、編譯原理
5,、儀器儀表——模擬電子技術(shù)、高頻電子線路,、電子測量技術(shù),、智能儀器原理及應(yīng)用
6、控制系統(tǒng)——自動控制原理,、現(xiàn)代控制理論,、過程控制工程、模糊控制器理論與應(yīng)用
7,、壓縮,、編碼、加密——數(shù)論,、抽象代數(shù),、現(xiàn)代編碼技術(shù)、信息論與編碼,、數(shù)據(jù)壓縮導論,、應(yīng)用密碼學、音頻信息處理技術(shù),、數(shù)字視頻編碼技術(shù)原理
現(xiàn)在你發(fā)現(xiàn),,原來FPGA會涉及到那么多知識,你可以選一個感興趣的方向,,但是工作中很有可能用到其中幾個方向的知識,,所以理論還是學得越多越好。如果你要更上一層,,數(shù)學和英語是不可避免的,。
六
學無止境
能到這個境界,說明你已經(jīng)很厲害了,,但是還有很多東西要學的,,因為FPGA常常要跟CPU交互,也就是說你得經(jīng)常跟軟件工程師交流,所以也得懂點軟件方面的知識,。比如ARM(Xilinx的ZYNQ和Altera的SOC會用到ARM的硬核,,請參考本博客的《如何學習嵌入式軟件》)、DSP,、Linux,、安卓、上位機(QT,、C#,、JAVA)都可以學一下,反正學無止境的,。