學完基礎的verilog語言後如何進一步學習fpga?
學fpga,先學寫狀態機,仿真和基礎的i2c之類的協議,這是第一步,基礎打好後,fpga必須會高速接口如ddr,pcie之類,算法方面至少fft之類的ip核試著用用,這算是進階,然後還有異步時鐘,布局布線,時序優化等等,技術路線基本就這樣,等這些都掌握了,工作應該妥妥的
verilog是目前數字電路的通用(主流)描述語言,必學的。
但是數字IC/FPGA設計,絕不止是verilog。就像軟體開發,絕不止是C++。
還有很多基礎知識,專業知識技能是需要學習掌握的。自己可以對照下。
A:電子工程師(Electronics Engineer)基礎知識
1:電路分析,數字電路基礎;
2:微機原理,彙編語言;
3:C/C++語言,數據結構;
4:Verilog語言(比如Michael, D.Cilette的《Verilog HDL高級數字設計》或夏宇聞老師的《Verilog數字系統設計教程》);
5:電晶體原理;(做數字IC/FPGA設計,只需大致了解)
B:數字IC設計專業知識
1:進數字IC前端/FPGA設計的專業知識學習,sky推薦這本書:《CMOS VLSI Design A Circuits and Systems Perspective》。自認為是數字IC設計入門「聖經」。基本電路結構,加減法器結構,組合邏輯,時序邏輯,跨時鐘設計都有涉及。
2:在此還需要理解On-Chip-Bus的基本知識與一個數字系統的基本結構,建議學習理解:AMBA總線,含:APB/AHB/AXI。由於ARM在數字IP領域的領導低位,AMBA總線事實上已經成為數字IC的通用總線結構,必學。
3:現在可以開始做數字IP的設計了,涉及到使用相關EDA tool。
a):功能驗證:對於初學者(在校生),能modelsim/questasim上做仿真測試,熟悉波形窗口;debug RTL code。再使用下windows版的nLint/Debussy就能完成數字IP功能設計驗證了。
b):綜合與實現:這部分首先(重點)要掌握STA原理,比如:cell delay在cell library裡面是怎麼標定的,tool是怎麼計算delay的,setup/hold timing check的計算公式是什麼;clk skew, clk uncertainty, create_clock, create_generateclock, set_ideal_network, set_input_delay, set_false_path, set_multi_cycle_path,OCV , ....是什麼意思,對STA有何作用。懂了STA原理,就可以用TCL語言寫SDC(DC綜合)/XDC(vivado綜合實現)timing constraint了。目前XDC/SDC的語法已經基本統一了。
C:進階知識、技能
1:算法方向:信號與系統,數位訊號處理(DSP);
2:接口方向:UART/IIC/SPI/DDR等常用接口協議;如有餘力,可以看看USB/PCIE/SATA/MIPI;
3:日常工作的OS平台:linux作業系統使用;vim(emac)使用;bash(csh);makefile;
4:腳本語言:Perl(Python)/TCL;
5:版本管理工具:SVN/Git;
D:項目鍛鍊
1:小數字IP的設計、驗證(UART/SPI/Timer/AHB-SRAM);
2:小數字IP在FPGA上的實際運行;
3:HW/SW的協同運作(試試zynq FPGA上PS-PL的協同);
4:中大數字IP的設計、驗證(AXI-DMA,圖像ISP處理,CNN加速器等);
5:中大型FPGA項目開發(導師項目);
6:參與一個數字IC項目的設計、驗證、FPGA emulation、流片(這個目前在校參與的機會很小);
建議補充數字IC設計基本知識,比如:rtl代碼與電路結構的關係(了解基本組合邏輯,比如加減法,乘法器的結構),跨時鐘域電路原理域設計,STA原理與timing約束,BUS(AHB/APB/AXI)的知識。
如果搞fpga,還得熟悉下廠商提供的IP的實用,比如:內置CPU,網絡接口等。
然後就是實際寫代碼上fpga板子試試。