「超級干貨」初學(xué)者如何開(kāi)始學(xué)習FPGA?
作為一名初學(xué)者,如果你始終拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內部結構,要想學(xué)會(huì )FPGA恐怕是天方夜譚。
FPGA為什么是可以編程的?
恐怕很多初學(xué)者不知道,他們也不想知道。因為他們覺(jué)得這是無(wú)關(guān)緊要的。他們潛意識的認為可編程嘛,肯定就是像寫(xiě)軟件一樣啦。軟件編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語(yǔ)言或者其它軟件編程語(yǔ)言一樣。一條條的讀,一條條的分析。
如果始終拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內部結構,要想學(xué)會(huì )FPGA恐怕是天方夜譚。雖然現在EDA軟件已經(jīng)非常先進(jìn),像寫(xiě)軟件那樣照貓畫(huà)虎也能綜合出點(diǎn)東西,但也許只有天知道EDA軟件最后綜合出來(lái)的到底是什么。也許點(diǎn)個(gè)燈,跑個(gè)馬還行。這樣就是為什么很多菜鳥(niǎo)學(xué)了N久以后依然是一個(gè)菜鳥(niǎo)的原因。那么FPGA為什么是可以“編程”的呢?
首先,來(lái)了解一下什么叫“程”。
其實(shí)“程”只不過(guò)是一堆具有一定含義的01編碼而已。
編程,其實(shí)就是編寫(xiě)這些01編碼。只不過(guò)我們現在有了很多開(kāi)發(fā)工具運算或者是其它操作。所以軟件是一條一條的,通常都不是直接編寫(xiě)這些01編碼,而是以高級語(yǔ)言的形式來(lái)編寫(xiě),最后由開(kāi)發(fā)工具轉換為這種01編碼而已。對于軟件編程而言,處理器會(huì )有一個(gè)專(zhuān)門(mén)的譯碼電路逐條把這些01編碼翻譯為各種控制信號,然后控制其內部的電路完成一個(gè)個(gè)的讀,因為軟件的操作是一步一步完成的。而FPGA的可編程,本質(zhì)也是依靠這些01編碼實(shí)現其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來(lái)再去控制一個(gè)運算電路,FPGA里面沒(méi)有這些東西。
FPGA內部主要三塊:可編程的邏輯單元、可編程的連線(xiàn)和可編程的IO模塊。
其次,再來(lái)了解下可編程的邏輯單元是什么?
其基本結構某種存儲器(SRAM、FLASH等)制成的4輸入或6輸入1輸出地“真值表”加上一個(gè)D觸發(fā)器構成。任何一個(gè)4輸入1輸出組合邏輯電路,都有一張對應的“真值表”,同樣的如果用這么一個(gè)存儲器制成的4輸入1輸出地“真值表”,只需要修改其“真值表”內部值就可以等效出任意4輸入1輸出的組合邏輯。這些“真值表”內部值是什么?就是那些01編碼而已。
如果要實(shí)現時(shí)序邏輯電路怎么辦?
這不有D觸發(fā)器嘛,任何的時(shí)序邏輯都可以轉換為組合邏輯+D觸發(fā)器來(lái)完成。但這畢竟只實(shí)現了4輸入1輸出的邏輯電路而已,通常邏輯電路的規模那是相當的大哦。
那怎么辦呢?
這個(gè)時(shí)候就需要用到可編程連線(xiàn)了。在這些連線(xiàn)上有很多用存儲器控制的鏈接點(diǎn),通過(guò)改寫(xiě)對應存儲器的值就可以確定哪些線(xiàn)是連上的而哪些線(xiàn)是斷開(kāi)的。這就可以把很多可編程邏輯單元組合起來(lái)形成大型的邏輯電路。最后就是可編程的IO,這其實(shí)是FPGA作為芯片級使用必須要注意的。任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個(gè)非專(zhuān)用引腳(FPGA中有專(zhuān)門(mén)的非用戶(hù)可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標準進(jìn)行設置。
總歸一句話(huà),FPGA之所以可編程是因為可以通過(guò)特殊的01代碼制作成一張張“真值表”,并將這些“真值表”組合起來(lái)以實(shí)現大規模的邏輯功能。不了解FPGA內部結構,就不能明白最終代碼如何變到FPGA里面去的。也就無(wú)法深入的了解如何能夠充分運用FPGA。
現在的FPGA,不單單是有前面講的那三塊,還有很多專(zhuān)用的硬件功能單元,如何利用好這些單元實(shí)現復雜的邏輯電路設計,是從菜鳥(niǎo)邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內部邏輯及其工作原理做起。
另外,FPGA本身不算什么,一切皆在FPGA之外這一點(diǎn)恐怕也是很多學(xué)FPGA的初學(xué)者最難理解的地方。
FPGA是給誰(shuí)用的?
很多學(xué)校解釋為給學(xué)微電子專(zhuān)業(yè)或者集成電路設計專(zhuān)業(yè)的學(xué)生用的,其實(shí)這不過(guò)是很多學(xué)校受資金限制,買(mǎi)不起專(zhuān)業(yè)的集成電路設計工具而用FPGA工具替代而已。
其實(shí),FPGA是給設計電子系統的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個(gè)電子設備,如****、機頂盒、視頻監控設備等。當現有芯片無(wú)法滿(mǎn)足系統的需求時(shí),就需要用FPGA來(lái)快速的定義一個(gè)能用的芯片。前面說(shuō)了,FPGA里面無(wú)非就是一些“真值表”、觸發(fā)器、各種連線(xiàn)以及一些硬件資源,電子系統工程師使用FPGA進(jìn)行設計時(shí)無(wú)非就是考慮如何將這些以后資源組合起來(lái)實(shí)現一定的邏輯功能而已,而不必像IC設計工程師那樣一直要關(guān)注到最后芯片是不是能夠被制造出來(lái)。
本質(zhì)上和利用現有芯片組合成不同的電子系統沒(méi)有區別,只是需要關(guān)注更底層的資源而已。要想把FPGA用起來(lái)還是簡(jiǎn)單的,因為無(wú)非就是那些資源,在理解了前面兩點(diǎn)再搞個(gè)實(shí)驗板,跑跑實(shí)驗,做點(diǎn)簡(jiǎn)單的東西是可以的。
而真正要把FPGA用好,那光懂點(diǎn)FPGA知識就遠遠不夠。因為最終要讓FPGA里面的資源如何組合,實(shí)現何種功能才能滿(mǎn)足系統的需要,那就需要懂得更多更廣泛的知識。
最后,推薦一個(gè)我覺(jué)得非常不錯的開(kāi)源智能硬件開(kāi)發(fā)平臺,還在學(xué)校的時(shí)候就用它開(kāi)發(fā)過(guò)不少能用手機App/智能音箱控制的作品,平臺上還有sdk和電路原理圖可以查看,自己DIY智能硬件非常方便,也可以幫助你了解如何畫(huà)PCB。作為一名初學(xué)者,如果你始終拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內部結構,要想學(xué)會(huì )FPGA恐怕是天方夜譚。
FPGA為什么是可以編程的?
恐怕很多初學(xué)者不知道,他們也不想知道。因為他們覺(jué)得這是無(wú)關(guān)緊要的。他們潛意識的認為可編程嘛,肯定就是像寫(xiě)軟件一樣啦。軟件編程的思想根深蒂固,看到Verilog或者VHDL就像看到C語(yǔ)言或者其它軟件編程語(yǔ)言一樣。一條條的讀,一條條的分析。
如果始終拒絕去了解為什么FPGA是可以編程的,不去了解FPGA的內部結構,要想學(xué)會(huì )FPGA恐怕是天方夜譚。雖然現在EDA軟件已經(jīng)非常先進(jìn),像寫(xiě)軟件那樣照貓畫(huà)虎也能綜合出點(diǎn)東西,但也許只有天知道EDA軟件最后綜合出來(lái)的到底是什么。也許點(diǎn)個(gè)燈,跑個(gè)馬還行。這樣就是為什么很多菜鳥(niǎo)學(xué)了N久以后依然是一個(gè)菜鳥(niǎo)的原因。那么FPGA為什么是可以“編程”的呢?
首先,來(lái)了解一下什么叫“程”。
其實(shí)“程”只不過(guò)是一堆具有一定含義的01編碼而已。
編程,其實(shí)就是編寫(xiě)這些01編碼。只不過(guò)我們現在有了很多開(kāi)發(fā)工具運算或者是其它操作。所以軟件是一條一條的,通常都不是直接編寫(xiě)這些01編碼,而是以高級語(yǔ)言的形式來(lái)編寫(xiě),最后由開(kāi)發(fā)工具轉換為這種01編碼而已。對于軟件編程而言,處理器會(huì )有一個(gè)專(zhuān)門(mén)的譯碼電路逐條把這些01編碼翻譯為各種控制信號,然后控制其內部的電路完成一個(gè)個(gè)的讀,因為軟件的操作是一步一步完成的。而FPGA的可編程,本質(zhì)也是依靠這些01編碼實(shí)現其功能的改變,但不同的是FPGA之所以可以完成不同的功能,不是依靠像軟件那樣將01編碼翻譯出來(lái)再去控制一個(gè)運算電路,FPGA里面沒(méi)有這些東西。
FPGA內部主要三塊:可編程的邏輯單元、可編程的連線(xiàn)和可編程的IO模塊。
其次,再來(lái)了解下可編程的邏輯單元是什么?
其基本結構某種存儲器(SRAM、FLASH等)制成的4輸入或6輸入1輸出地“真值表”加上一個(gè)D觸發(fā)器構成。任何一個(gè)4輸入1輸出組合邏輯電路,都有一張對應的“真值表”,同樣的如果用這么一個(gè)存儲器制成的4輸入1輸出地“真值表”,只需要修改其“真值表”內部值就可以等效出任意4輸入1輸出的組合邏輯。這些“真值表”內部值是什么?就是那些01編碼而已。
如果要實(shí)現時(shí)序邏輯電路怎么辦?
這不有D觸發(fā)器嘛,任何的時(shí)序邏輯都可以轉換為組合邏輯+D觸發(fā)器來(lái)完成。但這畢竟只實(shí)現了4輸入1輸出的邏輯電路而已,通常邏輯電路的規模那是相當的大哦。
那怎么辦呢?
這個(gè)時(shí)候就需要用到可編程連線(xiàn)了。在這些連線(xiàn)上有很多用存儲器控制的鏈接點(diǎn),通過(guò)改寫(xiě)對應存儲器的值就可以確定哪些線(xiàn)是連上的而哪些線(xiàn)是斷開(kāi)的。這就可以把很多可編程邏輯單元組合起來(lái)形成大型的邏輯電路。最后就是可編程的IO,這其實(shí)是FPGA作為芯片級使用必須要注意的。任何芯片都必然有輸入引腳和輸出引腳。有可編程的IO可以任意的定義某個(gè)非專(zhuān)用引腳(FPGA中有專(zhuān)門(mén)的非用戶(hù)可使用的測試、下載用引腳)為輸入還是輸出,還可以對IO的電平標準進(jìn)行設置。
總歸一句話(huà),FPGA之所以可編程是因為可以通過(guò)特殊的01代碼制作成一張張“真值表”,并將這些“真值表”組合起來(lái)以實(shí)現大規模的邏輯功能。不了解FPGA內部結構,就不能明白最終代碼如何變到FPGA里面去的。也就無(wú)法深入的了解如何能夠充分運用FPGA。
現在的FPGA,不單單是有前面講的那三塊,還有很多專(zhuān)用的硬件功能單元,如何利用好這些單元實(shí)現復雜的邏輯電路設計,是從菜鳥(niǎo)邁向高手的路上必須要克服的障礙。而這一切,還是必須先從了解FPGA內部邏輯及其工作原理做起。
另外,FPGA本身不算什么,一切皆在FPGA之外這一點(diǎn)恐怕也是很多學(xué)FPGA的初學(xué)者最難理解的地方。
FPGA是給誰(shuí)用的?
很多學(xué)校解釋為給學(xué)微電子專(zhuān)業(yè)或者集成電路設計專(zhuān)業(yè)的學(xué)生用的,其實(shí)這不過(guò)是很多學(xué)校受資金限制,買(mǎi)不起專(zhuān)業(yè)的集成電路設計工具而用FPGA工具替代而已。
其實(shí),FPGA是給設計電子系統的工程師使用的。這些工程師通常是使用已有的芯片搭配在一起完成一個(gè)電子設備,如****、機頂盒、視頻監控設備等。當現有芯片無(wú)法滿(mǎn)足系統的需求時(shí),就需要用FPGA來(lái)快速的定義一個(gè)能用的芯片。前面說(shuō)了,FPGA里面無(wú)非就是一些“真值表”、觸發(fā)器、各種連線(xiàn)以及一些硬件資源,電子系統工程師使用FPGA進(jìn)行設計時(shí)無(wú)非就是考慮如何將這些以后資源組合起來(lái)實(shí)現一定的邏輯功能而已,而不必像IC設計工程師那樣一直要關(guān)注到最后芯片是不是能夠被制造出來(lái)。
本質(zhì)上和利用現有芯片組合成不同的電子系統沒(méi)有區別,只是需要關(guān)注更底層的資源而已。要想把FPGA用起來(lái)還是簡(jiǎn)單的,因為無(wú)非就是那些資源,在理解了前面兩點(diǎn)再搞個(gè)實(shí)驗板,跑跑實(shí)驗,做點(diǎn)簡(jiǎn)單的東西是可以的。
而真正要把FPGA用好,那光懂點(diǎn)FPGA知識就遠遠不夠。因為最終要讓FPGA里面的資源如何組合,實(shí)現何種功能才能滿(mǎn)足系統的需要,那就需要懂得更多更廣泛的知識。
最后,推薦一個(gè)我覺(jué)得非常不錯的開(kāi)源智能硬件開(kāi)發(fā)平臺,還在學(xué)校的時(shí)候就用它開(kāi)發(fā)過(guò)不少能用手機App/智能音箱控制的作品,平臺上還有sdk和電路原理圖可以查看,自己DIY智能硬件非常方便,也可以幫助你了解如何畫(huà)PCB。
理論不及實(shí)踐,下面推薦一個(gè)開(kāi)發(fā)平臺,親測好用:
https://auth.tuya.com/?_source=32fe8c33b5a2a7c071f562063e20fd8a
原文來(lái)源:硬件發(fā)燒友-知乎
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。