0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

fpga論壇推薦_fpga開發(fā)難嗎

姚小熊27 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2020-11-10 14:29 ? 次閱讀

fpga論壇推薦

第一名

http://bbs.elecfans.com/zhuti_fpga_1.html

elecfans論壇的FPGA模塊還是比較活躍的,有各種FPGA工具使用問題的一些討論。

第二名

hifpga.com

準(zhǔn)確地說這是一個FPGA論壇,更是一個FPGA的問答社區(qū),整個社區(qū)非?;钴S,它鼓勵人們更快更準(zhǔn)確地提問和回答問題,避免FPGA技術(shù)論壇中常見的無意義的頂帖和COPY式回帖。整個論壇的主題都是FPGA相關(guān)的,是一個專注于FPGA的論壇。這個論壇中大都是一些具體的解決FPGA相關(guān)問題的辦法,也會有一些FPGA相關(guān)的技術(shù)細節(jié)文章進行分享,當(dāng)然還有XILINX、ALTERA、LATTICEMICROSEMIC等FPGA器件的維基(wiki),對了這個論壇還有一個優(yōu)點就是可以在手機端進行瀏覽的問答,整站界面做了移動自適應(yīng)匹配。

第三名

http://bbs.eetop.cn/forum-68-1.html

這個論壇主要是偏向IC設(shè)計的,由于FPGA在IC設(shè)計中往往屬于前端設(shè)計,因此其前端設(shè)計板塊有一些FPGA的相關(guān)討論,里面有一些非常不錯的分享,但是論壇這兩年活躍度有點低。

第四名

http://bbs.21ic.com/icfilter-typeid-119-83.html

21IC是一個很老的電子社區(qū)了,F(xiàn)PGA在這個網(wǎng)站是一個子板塊,由于網(wǎng)站本身是單片機起家,里面更多的聊的是一些比較低端的FPGA或者CPLD相關(guān)器件,這兩年氣氛也不是很活躍。

第五名

http://blog.chinaaet.com/fpga

電子技術(shù)應(yīng)用期刊的網(wǎng)站,準(zhǔn)確地講它不算一個論壇,里面有一個不錯的FPGA博客版塊,有比較多的FPGA相關(guān)文章,大部分文章是有干貨的,當(dāng)然也有一些夾雜不少的培訓(xùn)班的廣告。

第六名

http://www.eda365.com/forum-50-1.html

這是一個討論PCB技術(shù)起家的論壇,F(xiàn)PGA在里面是一個版塊,整個版塊的活躍度比較高,提問比較基礎(chǔ)。

第七名

www.heijin.org/

這是黑金開發(fā)板的論壇,如果你買了他們家的板子可以去這個論壇提問看看。

第八名

www.fpgaw.com/

這是一個培訓(xùn)機構(gòu)的FPGA論壇,有一些基礎(chǔ)的FPGA學(xué)習(xí)資料

第九名

http://www.openhw.org/

這個論壇有不少的FPGA開源項目,很多很有意思,可以學(xué)到不少東西。

第十名

http://forums.xilinx.com/

這是xilinx的官方討論區(qū),論壇本身是英語的,但是有一些人在里面用中文提問也得到了答復(fù)。

fpga開發(fā)難嗎

問:零基礎(chǔ),想學(xué)FPGA,應(yīng)該從哪入手?應(yīng)該看什么教程?應(yīng)該用什么學(xué)習(xí)板和開發(fā)板?看什么書等?

如果想速成,那就上網(wǎng)看視頻吧,這樣主要是面對應(yīng)用的,一個小時內(nèi)讓你的板子運行起來。早期起來的快,活學(xué)活用,就是后期沒有系統(tǒng)理論支持,會有些吃力,特別是大項目,那完全是個悲劇。國內(nèi)做的可以的,周立功算一個了,艾米電子也可以。這兩家都有學(xué)習(xí)板,不過后者的教程抄襲的前者的。前者功底深厚些,資金不緊張就買前者吧。速成的話,數(shù)電書一定一定必備,邊看邊學(xué)比較好,其余的書可以適量買點。

前方知識點高能預(yù)警:

1、看代碼,建模型

只有在腦海中建立了一個個邏輯模型,理解FPGA內(nèi)部邏輯結(jié)構(gòu)實現(xiàn)的基礎(chǔ),才能明白為什么寫Verilog和寫C整體思路是不一樣的,才能理解順序執(zhí)行語言和并行執(zhí)行語言的設(shè)計方法上的差異。在看到一段簡單程序的時候應(yīng)該想到是什么樣的功能電路。

2、用數(shù)學(xué)思維來簡化設(shè)計邏輯

學(xué)習(xí)FPGA不僅邏輯思維很重要,好的數(shù)學(xué)思維也能讓你的設(shè)計化繁為簡,所以啊,那些看見高數(shù)就頭疼的童鞋需要重視一下這門課哦。舉個簡單的例子,比如有兩個32bit的數(shù)據(jù)X[31:0]與Y[31:0]相乘。當(dāng)然,無論Altera還是Xilinx都有現(xiàn)成的乘法器IP核可以調(diào)用,這也是最簡單的方法,但是兩個32bit的乘法器將耗費大量的資源。那么有沒有節(jié)省資源,又不太復(fù)雜的方式來實現(xiàn)呢?我們可以稍做修改:

將X[31:0]拆成兩部分X1[15:0]和X2[15:0],令X1[15:0]=X[31:16],X2[15:0]=X[15:0],則X1左移16位后與X2相加可以得到X;同樣將Y[31:0]拆成兩部分Y1[15:0]和Y2[15:0],令 Y1[15:0]=Y[31:16],Y2[15:0]=Y[15:0],則Y1左移16位后與Y2相加可以得到Y(jié);則X與Y的相乘可以轉(zhuǎn)化為X1和X2 分別與Y1和Y2相乘,這樣一個32bit*32bit的乘法運算轉(zhuǎn)換成了四個16bit*16bit的乘法運算和三個32bit的加法運算。轉(zhuǎn)換后的占用資源將會減少很多,有興趣的童鞋,不妨綜合一下看看,看看兩者差多少。

3、時鐘與觸發(fā)器的關(guān)系

“時鐘是時序電路的控制者”這句話太經(jīng)典了,可以說是FPGA設(shè)計的圣言。FPGA的設(shè)計主要是以時序電路為主,因為組合邏輯電路再怎么復(fù)雜也變不出太多花樣,理解起來也不沒太多困難。但是時序電路就不同了,它的所有動作都是在時鐘一拍一拍的節(jié)奏下轉(zhuǎn)變觸發(fā),可以說時鐘就是整個電路的控制者,控制不好,電路功能就會混亂。

打個比方,時鐘就相當(dāng)于人體的心臟,它每一次的跳動就是觸發(fā)一個 CLK,向身體的各個器官供血,維持著機體的正常運作,每一個器官體統(tǒng)正常工作少不了組織細胞的構(gòu)成,那么觸發(fā)器就可以比作基本單元組織細胞。時序邏輯電路的時鐘是控制時序邏輯電路狀態(tài)轉(zhuǎn)換的“發(fā)動機”,沒有它時序邏輯電路就不能正常工作,因為時序邏輯電路主要是利用觸發(fā)器存儲電路的狀態(tài),而觸發(fā)器狀態(tài)變換需要時鐘的上升或下降沿!由此可見時鐘在時序電路中的核心作用!

最后簡單說一下體會吧,歸結(jié)起來就是多實踐、多思考、多問。實踐出真知,看100遍別人的方案不如自己去實踐一下。實踐的動力一方面來自興趣,一方面來自壓力,個人覺得后者更重要。有需求會容易形成壓力,也就是說最好能在實際的項目開發(fā)中鍛煉,而不是為了學(xué)習(xí)而學(xué)習(xí)。在實踐的過程中要多思考,多想想問題出現(xiàn)的原因,問題解決后要多問幾個為什么,這也是經(jīng)驗積累的過程,如果有寫項目日志的習(xí)慣更好,把問題及原因、解決的辦法都寫進去。最后還要多問,遇到問題思索后還得不到解決就要問了,畢竟個人的力量是有限的,問同學(xué)同事、問搜索引擎、問網(wǎng)友都可以,一篇文章、朋友們的點撥都可能幫助自己快速解決問題。

為什么大量的人會覺得FPGA難學(xué)?

1、不熟悉FPGA的內(nèi)部結(jié)構(gòu),不了解可編程邏輯器件的基本原理

FPGA為什么是可以編程的?恐怕很多菜鳥不知道,他們也不想知道。因為他們覺得這是無關(guān)緊要的。他們潛意識的認(rèn)為可編程嘛,肯定就是像寫軟件一樣啦。軟件編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語言或者其它軟件編程語言一樣。一條條的讀,一條條的分析。如果這些菜鳥們始終拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內(nèi)部結(jié)構(gòu),要想學(xué)會FPGA 恐怕是天方夜譚。雖然現(xiàn)在EDA軟件已經(jīng)非常先進,像寫軟件那樣照貓畫虎也能綜合出點東西,但也許只有天知道EDA軟件最后綜合出來的到底是什么。也許點個燈,跑個馬還行。這樣就是為什么很多菜鳥學(xué)了N久以后依然是一個菜鳥的原因。那么FPGA為什么是可以“編程”的呢?首先來了解一下什么叫“程”。啟示 “程”只不過是一堆具有一定含義的01編碼而已。

編程,其實就是編寫這些01編碼。只不過我們現(xiàn)在有了很多開發(fā)工具運算或者是其它操作。所以軟件是一條一條的,通常都不是直接編寫這些01編碼,而是以高級語言的形式來編寫,最后由開發(fā)工具轉(zhuǎn)換為這種01編碼而已。對于軟件編程而言,處理器會有一個專門的譯碼電路逐條把這些01編碼翻譯為各種控制信號,然后控制其內(nèi)部的電路完成一個個的讀,因為軟件的操作是一步一步完成的。而FPGA的可編程,本質(zhì)也是依靠這些01編碼實現(xiàn)其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來再去控制一個運算電路,F(xiàn)PGA里面沒有這些東西。

FPGA內(nèi)部主要三塊:可編程的邏輯單元、可編程的連線和可編程的IO模塊??删幊痰倪壿媶卧鞘裁矗科浠窘Y(jié)構(gòu)某種存儲器(SRAM、 FLASH等)制成的4輸入或6輸入1輸出地“真值表”加上一個D觸發(fā)器構(gòu)成。任何一個4輸入1輸出組合邏輯電路,都有一張對應(yīng)的“真值表”,同樣的如果用這么一個存儲器制成的4輸入1輸出地“真值表”,只需要修改其“真值表”內(nèi)部值就可以等效出任意4輸入1輸出的組合邏輯。這些“真值表”內(nèi)部值是什么?就是那些01編碼而已。如果要實現(xiàn)時序邏輯電路怎么辦?這不又D觸發(fā)器嘛,任何的時序邏輯都可以轉(zhuǎn)換為組合邏輯+D觸發(fā)器來完成。但這畢竟只實現(xiàn)了4輸入1輸出的邏輯電路而已,通常邏輯電路的規(guī)模那是相當(dāng)?shù)拇笈丁?/p>

那怎么辦呢?這個時候就需要用到可編程連線了。在這些連線上有很多用存儲器控制的鏈接點,通過改寫對應(yīng)存儲器的值就可以確定哪些線是連上的而哪些線是斷開的。這就可以把很多可編程邏輯單元組合起來形成大型的邏輯電路。最后就是可編程的IO,這其實是FPGA作為芯片級使用必須要注意的。

任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個非專用引腳(FPGA中有專門的非用戶可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標(biāo)準(zhǔn)進行設(shè)置??倸w一句話,F(xiàn)PGA之所以可編程是因為可以通過特殊的01代碼制作成一張張 “真值表”,并將這些“真值表”組合起來以實現(xiàn)大規(guī)模的邏輯功能。

不了解FPGA內(nèi)部結(jié)構(gòu),就不能明白最終代碼如何變到FPGA里面去的。也就無法深入的了解如何能夠充分運用FPGA。現(xiàn)在的FPGA,不單單是有前面講的那三塊,還有很多專用的硬件功能單元,如何利用好這些單元實現(xiàn)復(fù)雜的邏輯電路設(shè)計,是從菜鳥邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內(nèi)部邏輯及其工作原理做起。

2、錯誤理解HDL語言,怎么看都看不出硬件結(jié)構(gòu)

HDL語言的英語全稱是:Hardware Deion Language,注意這個單詞Deion,而不是Design。老外為什么要用Deion這個詞而不是Design呢?因為HDL確實不是用用來設(shè)計硬件的,而僅僅是用來描述硬件的。描述這個詞精確地反映了HDL語言的本質(zhì),HDL語言不過是已知硬件電路的文本表現(xiàn)形式而已,只是將以后的電路用文本的形式描述出來而已。而在編寫語言之前,硬件電路應(yīng)該已經(jīng)被設(shè)計出來了。語言只不過是將這種設(shè)計轉(zhuǎn)化為文字表達形式而已。但是很多人就不理解了,既然硬件都已經(jīng)被設(shè)計出來了,直接拿去制作部就完了,為什么還要轉(zhuǎn)化為文字表達形式再通過EDA工具這些麻煩的流程呢?其實這就是很多菜鳥沒有了解設(shè)計的抽象層次的問題,任何設(shè)計包括什么服裝、機械、廣告設(shè)計都有一個抽象層次的問題。就拿廣告設(shè)計來說吧,最初的設(shè)計也許就是一個概念,設(shè)計出這個概念也是就是一個點子而已,離最終拍成廣告還差得很遠。

硬件設(shè)計也是有不同的抽象層次,每一個層次都需要設(shè)計。最高的抽象層次為算法級、然后依次是體系結(jié)構(gòu)級、寄存器傳輸級、門級、物理版圖級。使用HDL的好處在于我們已經(jīng)設(shè)計好了一個寄存器傳輸級的電路,那么用HDL描述以后轉(zhuǎn)化為文本的形式,剩下的向更低層次的轉(zhuǎn)換就可以讓EDA工具去做了,這就大大的降低了工作量。這就是可綜合的概念,也就是說在對這一抽象層次上硬件單元進行描述可以被EDA工具理解并轉(zhuǎn)化為底層的門級電路或其他結(jié)構(gòu)的電路。

在FPGA設(shè)計中,就是在將這以抽象層級的意見描述成HDL語言,就可以通過FPGA開發(fā)軟件轉(zhuǎn)化為問題1中所述的FPGA內(nèi)部邏輯功能實現(xiàn)形式。HDL也可以描述更高的抽象層級如算法級或者是體系結(jié)構(gòu)級,但目前受限于EDA軟件的發(fā)展,EDA軟件還無法理解這么高的抽象層次,所以 HDL描述這樣抽象層級是無法被轉(zhuǎn)化為較低的抽象層級的,這也就是所謂的不可綜合。所以在閱讀或編寫HDL語言,尤其是可綜合的HDL,不應(yīng)該看到的是語言本身,而是要看到語言背后所對應(yīng)的硬件電路結(jié)構(gòu)。如果看到的HDL始終是一條條的代碼,那么這種人永遠擺脫不了菜鳥的宿命。假如哪一天看到的代碼不再是一行行的代碼而是一塊一塊的硬件模塊,那么恭喜脫離了菜鳥的級別,進入不那么菜的鳥級別。

3、FPGA本身不算什么,一切皆在FPGA之外,這一點恐怕也是很多學(xué)FPGA的菜鳥最難理解的地方

FPGA是給誰用的?很多學(xué)校解釋為給學(xué)微電子專業(yè)或者集成電路設(shè)計專業(yè)的學(xué)生用的,其實這不過是很多學(xué)校受資金限制,買不起專業(yè)的集成電路設(shè)計工具而用FPGA工具替代而已。其實FPGA是給設(shè)計電子系統(tǒng)的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個電子設(shè)備,如基站、機頂盒、視頻監(jiān)控設(shè)備等。當(dāng)現(xiàn)有芯片無法滿足系統(tǒng)的需求時,就需要用FPGA來快速的定義一個能用的芯片。

前面說了,F(xiàn)PGA里面無法就是一些“真值表”、觸發(fā)器、各種連線以及一些硬件資源,電子系統(tǒng)工程師使用FPGA進行設(shè)計時無非就是考慮如何將這些以后資源組合起來實現(xiàn)一定的邏輯功能而已,而不必像IC設(shè)計工程師那樣一直要關(guān)注到最后芯片是不是能夠被制造出來。本質(zhì)上和利用現(xiàn)有芯片組合成不同的電子系統(tǒng)沒有區(qū)別,只是需要關(guān)注更底層的資源而已。要想把FPGA用起來還是簡單的,因為無非就是那些資源,在理解了前面兩點再搞個實驗板,跑跑實驗,做點簡單的東西是可以的。而真正要把FPGA用好,那光懂點FPGA知識就遠遠不夠了。因為最終要讓FPGA里面的資源如何組合,實現(xiàn)何種功能才能滿足系統(tǒng)的需要,那就需要懂得更多更廣泛的知識。

目前FPGA的應(yīng)用主要是三個方向:

第一個方向:也是傳統(tǒng)方向主要用于通信設(shè)備的高速接口電路設(shè)計,這一方向主要是用FPGA處理高速接口的協(xié)議,并完成高速的數(shù)據(jù)收發(fā)和交換。這類應(yīng)用通常要求采用具備高速收發(fā)接口的 FPGA,同時要求設(shè)計者懂得高速接口電路設(shè)計和高速數(shù)字電路板級設(shè)計,具備EMC/EMI設(shè)計知識,以及較好的模擬電路基礎(chǔ),需要解決在高速收發(fā)過程中產(chǎn)生的信號完整性問題。FPGA最初以及到目前最廣的應(yīng)用就是在通信領(lǐng)域,一方面通信領(lǐng)域需要高速的通信協(xié)議處理方式,另一方面通信協(xié)議隨時在修改,非常不適合做成專門的芯片。因此能夠靈活改變功能的FPGA就成為首選。到目前為止FPGA的一半以上的應(yīng)用也是在通信行業(yè)。

第二個方向:可以稱為數(shù)字信號處理方向或者數(shù)學(xué)計算方向,因為很大程度上這一方向已經(jīng)大大超出了信號處理的范疇。例如早就在2006年就聽說老美將FPGA用于金融數(shù)據(jù)分析,后來又見到有將FPGA用于醫(yī)學(xué)數(shù)據(jù)分析的案例。在這一方向要求FPGA設(shè)計者有一定的數(shù)學(xué)功底,能夠理解并改進較為復(fù)雜的數(shù)學(xué)算法,并利用FPGA內(nèi)部的各種資源使之能夠變?yōu)閷嶋H的運算電路。目前真正投入實用的還是在通信領(lǐng)域的無線信號處理、信道編解碼以及圖像信號處理等領(lǐng)域,其它領(lǐng)域的研究正在開展中,之所以沒有大量實用的主要原因還是因為學(xué)金融的、學(xué)醫(yī)學(xué)的不了解這玩意。不過最近發(fā)現(xiàn)歐美有很多電子工程、計算機類的博士轉(zhuǎn)入到金融行業(yè),開展金融信號處理,相信隨著轉(zhuǎn)入的人增加,F(xiàn)PGA在其它領(lǐng)域的數(shù)學(xué)計算功能會更好的發(fā)揮出來,而我也有意做一些這些方面的研究。不過國內(nèi)學(xué)金融的、學(xué)醫(yī)的恐怕連數(shù)學(xué)都很少用到,就不用說用FPGA來幫助他們完成數(shù)學(xué)運算了,這個問題只有再議了。

第三個方向:所謂的SOPC方向,其實嚴(yán)格意義上來說這個已經(jīng)在FPGA設(shè)計的范疇之內(nèi),只不過是利用FPGA這個平臺搭建的一個嵌入式系統(tǒng)的底層硬件環(huán)境,然后設(shè)計者主要是在上面進行嵌入式軟件開發(fā)而已。設(shè)計對于FPGA本身的設(shè)計時相當(dāng)少的。但如果涉及到需要在FPGA做專門的算法加速,實際上需要用到第二個方向的知識,而如果需要設(shè)計專用的接口電路則需要用到第一個方向的知識。就目前SOPC方向發(fā)展其實遠不如第一和第二個方向,其主要原因是因為SOPC以FPGA為主,或者是在FPGA內(nèi)部的資源實現(xiàn)一個“軟”的處理器,或者是在FPGA內(nèi)部嵌入一個處理器核。但大多數(shù)的嵌入式設(shè)計卻是以軟件為核心,以現(xiàn)有的硬件發(fā)展情況來看,多數(shù)情況下的接口都已經(jīng)標(biāo)準(zhǔn)化,并不需要那么大的FPGA邏輯資源去設(shè)計太過復(fù)雜的接口。

而且就目前看來SOPC相關(guān)的開發(fā)工具還非常的不完善,以ARM為代表的各類嵌入式處理器開發(fā)工具卻早已深入人心,大多數(shù)以ARM為核心的SOC芯片提供了大多數(shù)標(biāo)準(zhǔn)的接口,大量成系列的單片機/嵌入式處理器提供了相關(guān)行業(yè)所需要的硬件加速電路,需要專門定制硬件場合確實很少。

通常是在一些特種行業(yè)才會在這方面有非常迫切的需求。即使目前Xilinx將ARM的硬核加入到FPGA里面,相信目前的情況不會有太大改觀,不要忘了很多老掉牙的8位單片機還在嵌入式領(lǐng)域混呢,嵌入式主要不是靠硬件的差異而更多的是靠軟件的差異來體現(xiàn)價值的。

曾經(jīng)看好的是 cypressPsoc這一想法。和SOPC系列不同,Psoc的思想史載SOC芯片里面去嵌入那么一小塊FPGA,那這樣其實可以滿足嵌入式的那些微小的硬件接口差異,比如某個運用需要4個USB,而通常的處理器不會提供那么多,就可以用這么一塊FPGA來提供多的USB接口。而另一種運用需要6個 UART,也可以用同樣的方法完成。

對于嵌入式設(shè)計公司來說他們只需要備貨一種芯片,就可以滿足這些設(shè)計中各種微小的差異變化。其主要的差異化仍然是通過軟件來完成。但目前cypress過于封閉,如果其采用ARM作為處理器內(nèi)核,借助其完整的工具鏈。同時開放IP合作,讓大量的第三方為它提供IP設(shè)計,其實是很有希望的。但目前cypress的日子怕不太好過,Psoc的思想也不知道何時能夠發(fā)光。

第四個方向:數(shù)字邏輯知識是根本。無論是FPGA的哪個方向,都離不開數(shù)字邏輯知識的支撐。FPGA說白了是一種實現(xiàn)數(shù)字邏輯的方式而已。如果連最基本的數(shù)字邏輯的知識都有問題,學(xué)習(xí)FPGA的愿望只是空中樓閣而已。而這,恰恰是很多菜鳥最不愿意去面對的問題。數(shù)字邏輯是任何電子電氣類專業(yè)的專業(yè)基礎(chǔ)知識,也是必須要學(xué)好的一門課。很多人無非是學(xué)習(xí)了,考個試,完了。

如果不能將數(shù)字邏輯知識爛熟于心,養(yǎng)成良好的設(shè)計習(xí)慣,學(xué)FPGA到最后仍然是霧里看花水中望月,始終是一場空的。以上四條只是我目前總結(jié)菜鳥們在學(xué)習(xí)FPGA時所最容易跑偏的地方,F(xiàn)PGA的學(xué)習(xí)其實就像學(xué)習(xí)圍棋一樣,學(xué)會如何在棋盤上落子很容易,成為一位高手卻是難上加難。要真成為李昌鎬那樣的神一般的選手,除了靠刻苦專研,恐怕還確實得要一點天賦。

劃重點內(nèi)容:

1、入門首先要掌握HDL(HDL=verilog+VHDL)

第一句話是:還沒學(xué)數(shù)電的先學(xué)數(shù)電。然后你可以選擇verilog或者VHDL,有C語言基礎(chǔ)的,建議選擇VHDL。因為verilog太像C了,很容易混淆,最后你會發(fā)現(xiàn),你花了大量時間去區(qū)分這兩種語言,而不是在學(xué)習(xí)如何使用它。當(dāng)然,你思維能轉(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)機就可以進入下一階段了。

此外,你手上必須準(zhǔn)備Verilog或者VHDL的官方文檔,《verilog_IEEE官方標(biāo)準(zhǔn)手冊-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》,以便遇到一些語法問題的時候能查一下。

2、獨立完成中小規(guī)模的數(shù)字電路設(shè)計

現(xiàn)在,你可以設(shè)計一些數(shù)字電路了,像交通燈、電子琴、DDS等等,推薦的教材是夏老《Verilog 數(shù)字系統(tǒng)設(shè)計教程》(第三版)。在這一階段,你要做到的是:給你一個指標(biāo)要求或者時序圖,你能用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)你綜合出來的電路盡管沒錯,但有很多警告。這個時候,你得學(xué)會同步設(shè)計原則、優(yōu)化電路,是速度優(yōu)先還是面積優(yōu)先,時鐘樹應(yīng)該怎樣設(shè)計,怎樣同步兩個異頻時鐘等等。推薦的教材是《FPGA權(quán)威指南》、《IP核芯志-數(shù)字邏輯設(shè)計思想》、《Altera FPGA/CPLD設(shè)計》第二版的基礎(chǔ)篇和高級篇兩本。學(xué)會加快編譯速度(增量式編譯、LogicLock),靜態(tài)時序分析(timequest),嵌入式邏輯分析儀(signaltap)就算是通關(guān)了。如果有不懂的地方可以暫時跳過,因為這部分還需要足量的實踐,才能有較深刻的理解。

4、學(xué)會提高開發(fā)效率

因為Quartus和ISE的編輯器功能太弱,影響了開發(fā)效率。所以建議使用Sublime text編輯器中代碼片段的功能,以減少重復(fù)性勞動。Modelsim也是常用的仿真工具,學(xué)會TCL/TK以編寫適合自己的DO文件,使得仿真變得自動化,推薦的教材是《TCL/TK入門經(jīng)典》。你可能會手動備份代碼,但是專業(yè)人士都是用版本控制器的,所以,為了提高工作效率,必須掌握GIT。文件比較器Beyond Compare也是個比較常用的工具。此外,你也可以使用System Verilog來替代testbench,這樣效率會更高一些。如果你是做IC驗證的,就必須掌握System Verilog和驗證方法學(xué)(UVM)。推薦的教材是《Writing Testbenches using SystemVerilog》、《The UVM Primer》、《System Verilog1800-2012語法手冊》。

掌握了TCL/TK之后,可以學(xué)習(xí)虛擬Jtag(ISE也有類似的工具)制作屬于自己的調(diào)試工具,此外,有時間的話,最好再學(xué)個python。腳本,意味著一勞永逸。

5、增強理論基礎(chǔ)

這個時候,你已經(jīng)會使用FPGA了,但是還有很多事情做不了(比如,F(xiàn)IR濾波器、PID算法、OFDM等),因為理論沒學(xué)好。我大概地分幾個方向供大家參考,后面跟的是要掌握的理論課。

信號處理——信號與系統(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ù)壓縮導(dǎo)論、應(yīng)用密碼學(xué)、音頻信息處理技術(shù)、數(shù)字視頻編碼技術(shù)原理

現(xiàn)在你發(fā)現(xiàn),原來FPGA會涉及到那么多知識,你可以選一個感興趣的方向,但是工作中很有可能用到其中幾個方向的知識,所以理論還是學(xué)得越多越好。如果你要更上一層,數(shù)學(xué)和英語是不可避免的。

6、學(xué)會使用matlab仿真

設(shè)計FPGA算法的時候,多多少少都會用到MATLAB,比如CRC的系數(shù)矩陣、數(shù)字濾波器系數(shù)、各種表格和文本處理等。此外,MATLAB還能用于調(diào)試HDL(用MATLAB的計算結(jié)果跟用HDL算出來的一步步對照,可以知道哪里出問題)。推薦的教材是《MATLAB寶典》和杜勇的《數(shù)字濾波器的MATLAB與FPGA實現(xiàn)》。

7、足量的實踐

這個時候你至少讀過幾遍芯片手冊(官網(wǎng)有),然后可以針對自己的方向,做一定量的實踐了(期間要保持良好的代碼風(fēng)格,增加元件例化語句的可讀性,繪制流程圖/時序圖,撰寫文檔的習(xí)慣)。比如:通信類的可以做調(diào)制解調(diào)算法,儀表類的可以做總線分析儀等等。不過這些算法,在書上只是給了個公式、框圖而已,跟實際的差距很大,你甚至?xí)X得書上的東西都很膚淺。那么,你可以在知網(wǎng)、百度文庫、EETOP論壇、opencores、ChinaAET、Q群共享、博客上面找些相關(guān)資料(校外的朋友可以在淘寶買個知網(wǎng)賬號)。其實,當(dāng)你到了這個階段,你已經(jīng)達到了職業(yè)級水平,有空就多了解一些前沿技術(shù),這將有助于你的職業(yè)規(guī)劃。

在工作當(dāng)中,或許你需要關(guān)注很多協(xié)議和行業(yè)標(biāo)準(zhǔn),協(xié)議可以在EETOP上面找到,而標(biāo)準(zhǔn)(如:國家標(biāo)準(zhǔn)GB和GB/T,國際標(biāo)準(zhǔn)ISO)就推薦《標(biāo)準(zhǔn)網(wǎng)》和《標(biāo)準(zhǔn)分享網(wǎng)》。

8、圖像處理(這部分只寫給想學(xué)圖像處理的朋友,也是由淺入深的路線)

Photoshop?;ㄒ?、兩周的時間學(xué)習(xí)PS,對圖像處理有個大概的了解,知道各種圖片格式、直方圖、色相、通道、濾鏡、拼接等基本概念,并能使用它。這部分是0基礎(chǔ),目的讓大家對圖像處理有個感性的認(rèn)識,而不是一上來就各種各樣的公式推導(dǎo)。推薦《Photoshop CS6完全自學(xué)教程》。

基于MATLAB或OpenCV的圖像處理。有C/C++基礎(chǔ)的可以學(xué)習(xí)OpenCV,否則的話,建議學(xué)MATLAB。這個階段下,只要學(xué)會簡單的調(diào)用函數(shù)即可,暫時不用深究實現(xiàn)的細節(jié)。推薦《數(shù)字圖像處理matlab版》、《學(xué)習(xí)OpenCV》。

圖像處理的基礎(chǔ)理論。這部分的理論是需要高數(shù)、復(fù)變、線性代數(shù)、信號與系統(tǒng)、數(shù)字信號處理等基礎(chǔ),基礎(chǔ)不好的話,建議先補補基礎(chǔ)再來??床欢睦碚撘部梢詴簳r先放下,或許學(xué)到后面就自然而然地開竅了。推薦《數(shù)字圖像處理》。

基于FPGA的圖像處理。把前面學(xué)到的理論運用到FPGA上面,如果這時你有前面第七個階段的水平,你將輕松地獨立完成圖像算法設(shè)計(圖像處理是離不開接口的,上面第五個階段有講)。推薦《基于FPGA的嵌入式圖像處理系統(tǒng)設(shè)計》、《基于FPGA的數(shù)字圖像處理原理及應(yīng)用》。

進一步鉆研數(shù)學(xué)。要在算法上更上一層,必然需要更多的數(shù)學(xué),所以這里建議學(xué)習(xí)實分析、泛涵分析、小波分析等。
責(zé)任編輯:YYX

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21539

    瀏覽量

    600528
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    324

    瀏覽量

    47285
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3544

    瀏覽量

    93475
收藏 人收藏

    評論

    相關(guān)推薦

    如何快速入門FPGA?

    。 學(xué)習(xí)Verilog的語法、結(jié)構(gòu)以及如何使用它進行算法級、門級、開關(guān)級等多種抽象設(shè)計層次的建模。 掌握FPGA開發(fā)工具: 選擇一款適合你的FPGA開發(fā)工具,如Xilinx或Alter
    發(fā)表于 04-28 08:54

    3568F-FPGA案例開發(fā)手冊

    3568F-FPGA案例開發(fā)手冊
    的頭像 發(fā)表于 04-16 11:30 ?1163次閱讀
    3568F-<b class='flag-5'>FPGA</b>案例<b class='flag-5'>開發(fā)</b>手冊

    fpga開發(fā)需要掌握哪些編程語言

    FPGA(現(xiàn)場可編程門陣列)開發(fā)涉及多種編程語言和技術(shù).
    的頭像 發(fā)表于 03-27 14:34 ?1275次閱讀

    fpga開發(fā)一般用什么軟件

    FPGA(現(xiàn)場可編程門陣列)開發(fā)通常使用一系列專門的軟件工具,這些工具涵蓋了從設(shè)計、仿真到編譯和調(diào)試的整個流程。
    的頭像 發(fā)表于 03-15 14:43 ?3086次閱讀

    fpga開發(fā)是什么意思

    FPGA開發(fā)是指利用現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,簡稱FPGA)進行硬件設(shè)計和實現(xiàn)的過程。FPGA是一種可編程的邏輯器件,它允許用戶
    的頭像 發(fā)表于 03-15 14:28 ?997次閱讀

    fpga軟件是什么意思

    FPGA軟件通常指的是用于編程、配置和管理FPGA(現(xiàn)場可編程門陣列)芯片的工具和應(yīng)用程序的集合。FPGA是一種可編程的集成電路,它允許用戶通過編程來改變其硬件功能,以滿足各種不同的應(yīng)用需求。因此,
    的頭像 發(fā)表于 03-15 14:28 ?978次閱讀

    fpga開發(fā)板是什么?fpga開發(fā)板有哪些?

    FPGA開發(fā)板是一種基于FPGA(現(xiàn)場可編程門陣列)技術(shù)的開發(fā)平臺,它允許工程師通過編程來定義和配置FPGA芯片上的邏輯電路,以實現(xiàn)各種數(shù)字
    的頭像 發(fā)表于 03-14 18:20 ?1666次閱讀

    fpga用的是什么編程語言 fpga用什么語言開發(fā)

    和VHDL都是用于邏輯設(shè)計的硬件描述語言,并且都已成為IEEE標(biāo)準(zhǔn)。它們能形式化地抽象表示電路的結(jié)構(gòu)和行為,支持邏輯設(shè)計中層次與領(lǐng)域的描述,具有電路仿真與驗證機制以保證設(shè)計的正確性,并便于文檔管理和設(shè)計重用。 fpga用什么語言開發(fā) F
    的頭像 發(fā)表于 03-14 17:09 ?3126次閱讀

    fpga與嵌入式的區(qū)別 嵌入式和fpga開發(fā)有什么關(guān)系

    的,無法進行大規(guī)模的硬件級別的修改。這意味著FPGA能更靈活地適應(yīng)不同的應(yīng)用場景和變化的需求。 開發(fā)周期:FPGA開發(fā)周期相對較短,因為它可以通過重新編程來實現(xiàn)新功能。相比之下,嵌入
    的頭像 發(fā)表于 03-14 17:04 ?6481次閱讀

    fpga開發(fā)板使用教程

    FPGA開發(fā)板的使用教程主要包括以下幾個關(guān)鍵步驟。
    的頭像 發(fā)表于 03-14 15:50 ?889次閱讀

    Lattice Insights 簡化FPGA設(shè)計和開發(fā)

    通過萊迪思Insights簡化FPGA設(shè)計和開發(fā) 人工智能和機器學(xué)習(xí)的持續(xù)發(fā)展正在重塑生活方式和工作場所,現(xiàn)在隨著基礎(chǔ)模型和生成式人工智能(AI)的出現(xiàn),這種重塑更為明顯。數(shù)字化轉(zhuǎn)型的深入會帶來
    的頭像 發(fā)表于 02-20 17:22 ?1988次閱讀
    Lattice Insights 簡化<b class='flag-5'>FPGA</b>設(shè)計和<b class='flag-5'>開發(fā)</b>

    fpga開發(fā)板與linux開發(fā)板區(qū)別

    FPGA開發(fā)板與Linux開發(fā)板是兩種不同的硬件開發(fā)平臺,各自具有不同的特點和應(yīng)用場景。在以下的文章中,我將詳細介紹FPGA
    的頭像 發(fā)表于 02-01 17:09 ?1922次閱讀

    RK3568-ARM+FPGA通信案例開發(fā)手冊 (一)

    RK3568-ARM+FPGA通信案例開發(fā)手冊 (一)
    的頭像 發(fā)表于 01-19 10:31 ?929次閱讀
    RK3568-ARM+<b class='flag-5'>FPGA</b>通信案例<b class='flag-5'>開發(fā)</b>手冊 (一)

    FPGA是什么?FPGA的工作原理和應(yīng)用

    你是否好奇過FPGA技術(shù)是如何影響日常使用的設(shè)備的?在當(dāng)今快節(jié)奏的技術(shù)領(lǐng)域中,FPGA變得越來越重要。FPGA擁有強大的功能和廣泛的應(yīng)用,驅(qū)動著現(xiàn)代科技的進步。
    的頭像 發(fā)表于 11-02 10:06 ?2890次閱讀

    如何學(xué)習(xí)FPGA?FPGA學(xué)習(xí)必備的基礎(chǔ)知識

    FPGA已成為現(xiàn)今的技術(shù)熱點之一,無論學(xué)生還是工程師都希望跨進FPGA的大門。網(wǎng)絡(luò)上各種開發(fā)板、培訓(xùn)班更是多如牛毛,仿佛在告訴你不懂FPGA你就OUT啦。那么我們要玩轉(zhuǎn)
    的頭像 發(fā)表于 10-27 17:43 ?732次閱讀