玩轉FPGA必備基礎
通過(guò)論壇里如火如荼的FPGA DIY活動(dòng)就能看出來(lái)FPGA必然是現今的技術(shù)熱點(diǎn)之一。無(wú)論學(xué)生還是工程師都希望跨進(jìn)FPGA的大門(mén)。網(wǎng)絡(luò )上各種開(kāi)發(fā)板、培訓班更是多如牛毛,仿佛在告訴你不懂FPGA你就OUT啦。那么我們要玩轉FPGA必須具備哪些基礎知識呢?下面我們慢慢道來(lái)。
本文引用地址:http://dyxdggzs.com/article/153426.htm(一) 要了解什么是FPGA
既然要玩轉FPGA,那我們首先最重要的當然是要了解什么FPGA。FPGA(Field-Programmable Gate Array),即現場(chǎng)可編程門(mén)陣列??吹骄幊虄蓚€(gè)字碼農就笑了,不就是編程嘛,那可是我們的強項。且慢,此編程非彼編程。一定要把FPGA的編程和軟件編程區分開(kāi)來(lái)。軟件的編程,處理器會(huì )逐條的把語(yǔ)言翻譯成各種控制信號,去控制內部電路完成一個(gè)個(gè)運算或操作。那么FPGA的編程是怎么實(shí)現的呢?無(wú)論Altera家還是Xlinix家的FPGA,叫法有什么差異,基本單元都相似,都是由真值表和D觸發(fā)器構成。改變真值表的值就改變了邏輯功能,再通過(guò)和D觸發(fā)器組合來(lái)實(shí)現任何時(shí)序邏輯。所以我們對FPGA的編程,實(shí)際上就是去修改這些真值表和連接關(guān)系,使他們組成一張專(zhuān)門(mén)的真值表,去實(shí)現特定的功能。這和軟件編程一步步運行程序有本質(zhì)的區別。要想玩轉FPGA,就必須理解FPGA內部的工作原理,學(xué)習如何利用這些單元實(shí)現復雜的邏輯設計。
(二) 正確理解HDL語(yǔ)言
HDL(Hardware Description Language),硬件描述語(yǔ)言。通過(guò)名稱(chēng)我們能看出來(lái),HDL語(yǔ)言是一種“描述”語(yǔ)言,這一點(diǎn)和C語(yǔ)言是有本質(zhì)區別的。正確理解描述的含義,對學(xué)好HDL語(yǔ)言很有幫助。HDL語(yǔ)言只是用文本的方式把硬件電路描述出來(lái)。我們在閱讀HDL程序的時(shí)候,在腦子里應該能反映出一個(gè)完整的硬件電路結構。從另一方面說(shuō),我們在編寫(xiě)HDL語(yǔ)言之前,就已經(jīng)對要實(shí)現的電路有清晰的概念。所以HDL語(yǔ)言只是一個(gè)描述我們頭腦中具體電路的工具,玩轉FPGA的根本不是語(yǔ)言而是邏輯電路設計。不要再糾結于我應該學(xué)習VHDL還是Verilog,那種語(yǔ)言更好學(xué)這些問(wèn)題。如果把學(xué)習FPGA的重點(diǎn)放在學(xué)習語(yǔ)言上,死記硬背一些語(yǔ)法,那自然是抓錯了重點(diǎn)。語(yǔ)言在日常使用中會(huì )越用越熟練,不需要花很長(cháng)的專(zhuān)門(mén)時(shí)間去學(xué)習。當然一本好的參考資料可以隨時(shí)方便查詢(xún)會(huì )是很有幫助的。
(三) 數字電路基礎
說(shuō)到底,FPGA就是一堆數字邏輯組合在一起實(shí)現特定功能而已。所以數字電路基礎知識是根本。如果你連觸發(fā)器,組合電路,時(shí)序電路,競爭,毛刺等等基本概念還莫能兩可不清不楚的話(huà),那玩轉FPGA只能是癡人說(shuō)夢(mèng)的幻想了。我們必須要好好的學(xué)好數字電路基礎這門(mén)課,基本的數字電路爛熟于心。把這些基礎打牢固,再往更深的方向發(fā)展。什么時(shí)候能夠從抽象的算法中提煉算法的結構,再分解成具體的模塊并通過(guò)硬件電路實(shí)現出來(lái),這時(shí)候就算從菜鳥(niǎo)級別步入老鳥(niǎo)級別了。
(四) 硬件設計思想
這一點(diǎn)應該說(shuō)是重中之重。學(xué)習FPGA,一定要有硬件設計思想。在軟件編程的時(shí)候,比如1秒鐘能實(shí)現5次乘法運算,那系統要求1秒鐘實(shí)現50次乘法運算怎么辦,我們會(huì )盡可能的優(yōu)化代碼,讓代碼更簡(jiǎn)潔更高效,或者提高系統主頻,讓系統跑的更快。但是在FPGA里面我們不是這種思維方式。在FPGA里實(shí)現一個(gè)乘法器不夠用,那我就實(shí)現兩個(gè)實(shí)現三個(gè)去滿(mǎn)足系統要求;我可以進(jìn)行流水線(xiàn)設計;串行運行方式不夠快了,我可以先串并轉換,再并行的做處理……只要FPGA的資源夠用,我可以充分利用資源去滿(mǎn)足系統要求。因為在我手里的就是一堆硬件資源,我要做的是把他們組合成一個(gè)好用的電路。評價(jià)硬件描述語(yǔ)言寫(xiě)的好壞的標準和其他軟件編程語(yǔ)言的標準是完全不同的。因此一定要摒棄軟件編程的一些固有思路,學(xué)會(huì )用硬件的方式去解決問(wèn)題。時(shí)刻提醒自己正在設計的是一個(gè)電路,而不是一行行空洞的代碼。這是很多做軟件編程的人很難跨過(guò)的坎。FPGA學(xué)了很久還在糾結到底是用if_else語(yǔ)句好呢還是用case語(yǔ)句好?而不能透過(guò)這些語(yǔ)句表面看到他們所具體代表的電路。只有建立了硬件設計思想,才有更深入學(xué)習FPGA的可能。
FPGA入門(mén)簡(jiǎn)單精通難。要想入門(mén),買(mǎi)一塊開(kāi)發(fā)板跟著(zhù)例程走一遍,很多人都能在很短的時(shí)間內熟悉開(kāi)發(fā)軟件的操作方法并且點(diǎn)亮開(kāi)發(fā)板上的LED或者再實(shí)現個(gè)跑馬燈什么的。但是再往后進(jìn)步往往就進(jìn)展很慢。上面提到的這四條是玩轉FPGA的基礎,只有打好了堅實(shí)的基礎后面才能一馬平川。希望每個(gè)學(xué)習FPGA的人最后都能成為大牛,設計出自己的完美電路。
DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY
電路相關(guān)文章:電路分析基礎
fpga相關(guān)文章:fpga是什么
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
晶體管相關(guān)文章:晶體管工作原理
晶體管相關(guān)文章:晶體管原理
評論