學完基礎的verilog語言後 如何進一步學習fpga?

本人現在是一普通一本的大三女生 想畢業後找fpga的相關工作 自學了verilog語言 安裝了modelsim和quartus II 軟體 但是這兩天學得超級吃力 想問問前輩們都是怎麼學習fpga的?處在我這種階段應該如何繼續學習,需要用什麼樣的參考資料?


軟體只是工具,用來控制晶元;晶元也只是工具,用來實現功能和想法。不要低頭盯著工具,而是要抬頭看著真正的目標和想法。

比如你可以用Verilog把所有數電書上描述的數字電路都實現一遍;大多數學校都有做一個小CPU的課程實驗。跟著做,從需求出發,了解每一個工具的每一個功能在整個設計實現流程中的意義,以上能完成的話我覺得對本科的學習來說就足夠了。


鑒於你想找FPGA相關的工作,那麼,

1.學習模塊的劃分和介面的定義,參考Altera,Xilinx一些IPCore的Block和Interface,不妨想辦法實現一遍,大概你能學到一些解決問題的套路,處理問題的技巧,知道寫一個能用的東西大概需要哪些背景知識;可以參考三大廠商的設計。

2.學習實現一些協議,如UART,SPI,IIC,Modbus,乃至TCP,這裡會對你寫狀態機的能力進行進一步鍛煉,這裡的介面工作上很可能用的上,到時你只要改改就可以了,豈不美哉,所以盡量寫的完善一點,復用性強一點,反正你才大三,時間還有。

3.學習系統架構實現,也就是不同模塊間的配合;或可搭個簡單的CPU,跑指令,並了解異構系統。

4.寫testbench,以及寫模擬模型,會讓你對verilog的語法有更深理解,可以對常規測試方案進行總結;下面是個簡單testbench的套路,初心者或可以減少錯誤,引導思考(填字);

module xxx_tb();

// source define 一般的,在testbench中需要對這一塊定義的信號進行initial賦值,即激勵信號

// probe define 值待觀察

// aux define 只在testbench中出現的一些中間/輔助量定義

// instantiate dut 例化待測設計

// instantiate simulation model 這裡可以不是模擬模型,可以是其他已實現的模塊

// generate clock

// generate reset

// initialize

// task 可能有,為了讓下面testcase的流程看的清晰點,把一些可以打包的操作封裝起來

// load stimulus, testcase

// suspend simulation

endmodule

5.看文章:看 http://sunburst-design.com 上的Paper,並查閱其他資料做理解,這裡的議題基本都是基礎中的基石。

6.學好數學,英語,計算機網路,計算機組成原理,數字信號處理,演算法;說是做FPGA,功夫更在FPGA外。


找個老司機帶帶會比較好點,當然老司機未必有那麼多時間提供免費指導。還是先把知乎上關於fpga的熱帖先看看,還推薦一個材料上網可以搜到《華為同步設計》(入門必看),讓自己對fpga和硬體描述語言有些感覺了,在開始下一步動作吧。下一步當然老生常談了,找個項目整整,項目那麼多,簡單的沒什麼競爭力,難的又做不出來可能,打擊自信心,那還是從簡單的開始吧,建立自信是成功的第一步,當然也可以整個難的,打擊一下,剛好去轉軟體了,走上前途光明的道路。


學fpga,先學寫狀態機,模擬和基礎的i2c之類的協議,這是第一步,基礎打好後,fpga必須會高速介面如ddr,pcie之類,演算法方面至少fft之類的ip核試著用用,這算是進階,然後還有非同步時鐘,布局布線,時序優化等等,技術路線基本就這樣,等這些都掌握了,工作應該妥妥的


自己從事fpga兩年多,體會是如果將自己的格局定在fpga的使用,對自己職業生涯和發現很不利

學習fpga可以從以下幾方面入手:

1.hdl語言及技巧,看幾本語法書和論壇

2.購買開發版,做幾個小項目,訓練寫代碼、開發工具和調板子的能力

3.對常用ip真實操作

4.fpga只是工具,針對fpga所應用的環境,學習相關背景知識(從事圖像處理,如isp演算法)(和別人拉開差距)

5.與背景相關的其他工具的使用(從事圖像處理,需要對opencv,matlab)


如果你手頭缺乏一塊至少是DE2-115級別的開發板,那你這樣學起來有點紙上談兵的感覺。


不請自來

同在校大三,集成電路專業,主要方向為ASIC設計,最近FPGA碰的少了,不過想起當年學FPGA和HDL的時候,關鍵就是搞事。

如果有機會可以聯繫導師進組做項目,最近我做了兩個流片項目覺得自己對HDL的掌握能力又高了一大截。如果沒能進組搞事就自己給自己找事,做點小項目,開始的時候可以就跑個流水燈什麼的,然後就可以考慮試試各種通信協議的實現,再後就可以做做CPU什麼的了。

還有一點就是學習的關鍵在於debug,推薦某寶幾十塊錢買個邏輯分析儀,看看波形有助於提高對時序的感覺和debug效率

搞事

搞事

搞事


Ricky的回答已經很好了 。

如果有項目,做一做項目,進步會很大。不過,這個是不一定的,有些研究生也沒機會好好做一做FPGA的項目。

分享自己當初學習的經體會 看書

學校一個重要的優勢(也許是最大的優勢)是書多,當然好壞都有。

學生階段 時間也相對多。多看看書,等到能快速分辨一本書是否值得你深入閱讀的時候,這個問題的答案也就知道了。

另外,如果有高人帶一帶,出點題目或者解答問題,進步會很快


找個開源的51,狠啃下來


請問你知道DDR2如何配置嗎?


先學好數電


試試找找相關實習工作。實際做相關項目是最好的學習方法。


推薦閱讀:

python中利用循環去掉空格,這端函數如何工作的。希望可以解釋一下思考過程,我是小白不要說的太高深?
自學matlab需要多少線性代數知識?

TAG:學習 | 現場可編輯邏輯門陣列FPGA | 自學編程 | verilog-hdl |