這個(gè)問題讓我回憶起了十年前自己剛學(xué)FPGA時(shí)的難忘經(jīng)歷。 那是大三上學(xué)期FPGA的第一節(jié)課。 老師說,F(xiàn)PGA功能非常強(qiáng)大。硬件可編程,用代碼定義硬件邏輯。 任何單片機(jī)能實(shí)現(xiàn)的功能,F(xiàn)PGA都能實(shí)現(xiàn)。 甚至可以在一個(gè)FPGA內(nèi)實(shí)現(xiàn)多個(gè)8位或32位的單片機(jī)。 自己就這樣帶著一種高大上的感覺入坑了FPGA。 當(dāng)時(shí)自認(rèn)為c語言功底還可以,還參加過c語言程序設(shè)計(jì)大賽,覺得FPGA 肯定能學(xué)好。 后來才發(fā)現(xiàn)硬件和軟件的思維方式完全不一樣。 軟件是一條條代碼順序執(zhí)行,而硬件完全則是并行處理。 VHDL里沒有主函數(shù),只有不同功能的電路模塊。 不過思維模式切換回硬件后,之前很多的編程訓(xùn)練對學(xué)習(xí)VHDL和verilog 還是很有幫助的。 FPGA確實(shí)遠(yuǎn)比單片機(jī)靈活和強(qiáng)大,自從接觸了FPGA,自己的單片機(jī)開發(fā)板就失寵并開始吃灰了。。。 當(dāng)時(shí)沒錢買FPGA開發(fā)板,平時(shí)只能在Quartus II上做個(gè)仿真,看看波形。 只有FPGA的實(shí)驗(yàn)課上才能過把癮。 不過老師的實(shí)驗(yàn)課安排的非常好。 最令我影響深刻的一個(gè)實(shí)驗(yàn)是用FPGA控制16*16的點(diǎn)陣顯示自己的姓名。 老師事先給了代碼,只不過是顯示的學(xué)校名稱,所以需要學(xué)生把學(xué)校名稱改成自己的名字。 自己自認(rèn)為編程基礎(chǔ)很好,當(dāng)然不愿意就這樣簡單改一下老師的代碼。 要做就做一個(gè)更酷的:像廣告牌一樣滾動(dòng)顯示自己的名字。 那幾天的腦子完全被FPGA占據(jù)了。 稍微有點(diǎn)課余時(shí)間就開始寫代碼。 然后就是盼著實(shí)驗(yàn)課快點(diǎn)到來,以便驗(yàn)證自己的設(shè)計(jì)。 終于盼到了,實(shí)驗(yàn)課上自己帶著略微緊張的心情開始用 quartus 綜合自己的代碼。。。 剛開始有幾個(gè)ERROR,很快改好了。 終于RTL綜合完了,沒有報(bào)錯(cuò)。 接著是布局布線和生成下載文件。 等了半天,跳出一個(gè) ERROR: 邏輯資源超出限制。。。 因?yàn)樽约寒?dāng)時(shí)用軟件的思維方式去寫VHDL,沒有考慮任何硬件復(fù)用,結(jié)果編譯出來的代碼巨耗資源。 而實(shí)驗(yàn)室的實(shí)驗(yàn)箱比較落后,F(xiàn)PGA的邏輯資源不過幾百K。 接下來的幾天,自己重新思考整個(gè)邏輯,把原來的代碼推倒重來。 這次的思路更加清晰,代碼也更加簡潔。 經(jīng)過反復(fù)debug ,終于實(shí)現(xiàn)了預(yù)期的效果。 現(xiàn)在還記得老師看到自己的demo時(shí)充滿欣賞的表情。 老師還專門把代碼拷貝走,說要給下一屆學(xué)生看看。 一不小心扯了這么多。不知道對各位學(xué)FPGA 有沒有幫助。 下面步入正題: 首先,很高興你喜歡FPGA,這是嵌入式領(lǐng)域比較好就業(yè)的一個(gè)方向,而且待遇不錯(cuò)。 我將入門學(xué)習(xí)分為四個(gè)部分,干貨滿滿,推薦收藏。 第一部分 基礎(chǔ)知識學(xué)習(xí) 1.《數(shù)字電路設(shè)計(jì)》,必備知識 當(dāng)時(shí)自己學(xué)的是閆石老師寫的這本書。比較經(jīng)典。 看書的時(shí)候沒必要糾結(jié)細(xì)節(jié),知道常用的邏輯電路極其原理,知道什么是組合邏輯,什么是時(shí)序邏輯,以及同步和異步電路即可 2.《verilog 程序設(shè)計(jì)》,必備知識 我當(dāng)時(shí)用的是夏宇聞老師的書。如果有數(shù)字電路和c語言的基礎(chǔ),學(xué)verilog 會很快。因?yàn)関erilog 語法和c很像。但切記你寫的是電路,不是程序。 學(xué)習(xí)的時(shí)候在電腦上裝一個(gè)modelsim 或vivado ,一邊學(xué)verilog 語法一邊寫代碼做電路仿真。這樣不至于太乏味,同時(shí)還能學(xué)會如何看波形和時(shí)序。 3.《c語言程序設(shè)計(jì)》,推薦學(xué)但非必須。推薦學(xué)的原因如下: c語言是非?;A(chǔ),且靠近底層硬件的語言,將來無論做硬件還是軟件,c都能用的上。 比如,現(xiàn)在很多高端FPGA都集成了arm核,可以直接用c編程。 而且學(xué)好了c,其它高級語言學(xué)起來也會快很多。 推薦譚浩強(qiáng)老師的《C語言程序設(shè)計(jì)》。這本書應(yīng)該是中文書籍中最適合初學(xué)者的。 我是高三暑假看譚浩強(qiáng)老師的書入門的c 。自己看了好幾遍。大一時(shí),當(dāng)班里很多人還不知道什么是c語言時(shí),自己已經(jīng)過了計(jì)算機(jī)二級。 這也為后來參加各種專業(yè)比賽打下了良好的基礎(chǔ)。至今仍然很感激譚浩強(qiáng)老師這本書。 第二部分 FPGA實(shí)踐 (與第一部分同步進(jìn)行) 在學(xué)習(xí)以上知識的同時(shí),買一塊配有豐富學(xué)習(xí)資料的FPGA開發(fā)板。邊看書邊做開發(fā)板的配套實(shí)驗(yàn)。 所做的實(shí)驗(yàn)務(wù)必親手敲一遍代碼,并理解清楚每行代碼的含義。然后再適當(dāng)對代碼進(jìn)行修改,驗(yàn)證所學(xué)。 除了做實(shí)驗(yàn)之外,把常用的邏輯電路都寫一遍(做仿真即可),比如: 1. 加法器 2. 乘法器 3. 計(jì)數(shù)器(最常用的電路之一) 4. 同步復(fù)位電路/異步復(fù)位電路 5. 譯碼器 6. 多路選擇器 7. 移位寄存器 8. 狀態(tài)機(jī)(這里面的學(xué)問很多) 9. 同步FIFO 10. 異步FIFO 等等 第三部分 做DIY設(shè)計(jì) 基本功打好以后,可以再根據(jù)自己的興趣做一些有趣的小項(xiàng)目,比如: 1. SPI 2. UART 3. FIR濾波器 4. FFT快速傅里葉變換 5. AES/SM4等分組密碼算法的硬件實(shí)現(xiàn) 6. Cordic (這是一個(gè)非常有趣的算法,可計(jì)算sin/cos/sinh/cosh/ln/exp等很多數(shù)學(xué)運(yùn)算) 7. cpu(可以參考開源risc-v項(xiàng)目的源碼) 等等。。。 中途不斷學(xué)習(xí)積累,相信你能做的越來越好。 第四部分 FPGA學(xué)習(xí)網(wǎng)站 1、opencores 開源IP最多的網(wǎng)站,我以前經(jīng)常在上面找源碼?,F(xiàn)在好像國內(nèi)注冊不了,需要外網(wǎng)IP才能下載注冊。 Home :: OpenCores 2、黑金動(dòng)力社區(qū) 黑金開發(fā)板的官方博客,博客有FPGA的教程。 FPGA黑金開發(fā)板 - 博客園 3、FPGA官網(wǎng) 毫無疑問,F(xiàn)PGA的兩大主力廠商的主頁有非常多官方技術(shù)資料。 很多復(fù)雜的或是不常見的問題都可以在上面找到解決方法。 http://www.xilinx.com/ http://www.altera.com.cn/ 我有時(shí)候遇到難以解決的問題會在官網(wǎng)上提問或者發(fā)郵件,基本上都有回復(fù)。 4. ZipCPU About ZipCPU 討論 FPGA 和軟核 CPU 設(shè)計(jì)。該站點(diǎn)專注于 Verilog 解決方案,專門使用用于 FPGA 設(shè)計(jì)的開源 IP 產(chǎn)品。 如果本文對你有幫助,記得點(diǎn)贊、關(guān)注! |
19款電子扎帶
電路板識別電子標(biāo)簽