一文带你认识FPGA~
在我們嵌入式中,有這樣一朵奇葩介于軟件與硬件之間,這朵奇葩就是FPGA。可能很多平時玩MCU比較多的朋友不太了解。
之前我也不太了解,但是最近兩年的這兩份工作都有與FPGA掛鉤,所以我精通FPGA程序的燒寫(不僅如此,我還精通電腦的開關(guān)機,哈哈):
下面我們一起來簡單了解一下。
什么是FPGA
FPGA (Field Programmable Gate Array ),即現(xiàn)場可編程邏輯門陣列,屬于專用集成電路中的一種半定制電路,是可編程的邏輯列陣,能夠有效的解決原有的器件門電路數(shù)較少的問題。
FPGA 的基本結(jié)構(gòu)包括可編程輸入輸出單元,可配置邏輯塊,數(shù)字時鐘管理模塊,嵌入式塊RAM,布線資源,內(nèi)嵌專用硬核,底層內(nèi)嵌功能單元。
FPGA說白了就是一顆芯片,只不過是半定制的芯片,它里面的電路可以通過硬件描述語言來設(shè)計,所以靈活性很高。
設(shè)計語言及平臺
為什么說FPGA是一朵介于軟件與硬件之間的一朵奇葩呢。
因為說它屬于硬件吧,但是也是需要寫代碼的,說它是軟件吧,但其思想又與我們一些軟件設(shè)計思想不符(FPGA程序是并行執(zhí)行的),而且又得對一些數(shù)電及一些芯片規(guī)格、芯片內(nèi)部原理等硬件知識了解得很深。綜合來說,我覺得FPGA還是屬于硬件的范疇。
FPGA使用硬件描述語言來開發(fā), 常用的主要有VHDL、Verilog HDL、System Verilog 和 System C。其中,Verilog HDL是廣泛應(yīng)用的硬件描述語言,可以用于硬件設(shè)計流 程的建模、綜合、模擬等多個階段。
Verilog HDL 優(yōu)點:類似C語言,上手容易,靈活。大小寫敏感。在寫激勵和建模方面有優(yōu)勢。缺點:很多錯誤在編譯的時候不能被發(fā)現(xiàn)。
FPGA的應(yīng)用及發(fā)展
FPGA一般應(yīng)用在高性能處理、實時要求高的領(lǐng)域,比如高速接口、報文轉(zhuǎn)發(fā)、圖像處理、視頻傳輸、輔助電機控制(比如伺服驅(qū)動器)等,還可以應(yīng)用在芯片前期驗證。
說個我們MCU玩家可能比較熟悉的:MCU芯片的前期設(shè)計驗證。大家有沒有想過STM32是怎么做出來的呢?
首先,用FPGA來設(shè)計STM32內(nèi)部的電路,設(shè)計完之后就可以把這FPGA芯片當(dāng)成STM32來用,然后就可以寫C代碼去驗證一些外設(shè)。
如果發(fā)現(xiàn)外設(shè)功能不正常,那又可以用硬件描述語言來修改FPGA內(nèi)部電路,不斷修改直到FPGA的功能都正常(具有與一般MCU芯片一樣的功能),然后再拿去封裝成一顆顆芯片,就是我們在用的STM32。
大家不要誤以為我是ST的工程師哈,以上只是一些自己接觸到的東西加上自己的一些之前的學(xué)習(xí)了解到的東西。
上面用到的相關(guān)是SOPC技術(shù)。什么是SOPC技術(shù)呢?
SOPC技術(shù)簡介
SOPC是在單純的FPGA芯片上使用FPGA的邏輯和存儲器資源搭建一個軟核CPU系統(tǒng),由該軟核CPU實現(xiàn)所需處理器的完整功能。
由于是使用FPGA的通用邏輯搭建的CPU,因此具有一定的靈活性,用戶可以根據(jù)自己的需求對CPU進行定制裁剪,增加一些專用功能,例如除法或浮點運算單元,用于提升CPU在某些專用運算方面的性能,或者刪除一些在系統(tǒng)里面使用不到的功能,以節(jié)約邏輯資源。
另外也可以根據(jù)用戶的實際需求,為CPU添加各種標(biāo)準(zhǔn)或定制的外設(shè),例如UART,SPI,IIC等標(biāo)準(zhǔn)接口外設(shè),同時,用戶也可以自己使用FPGA的邏輯資源,編寫各種專用的外設(shè),然后連接到CPU總線上,由CPU進行控制,以實現(xiàn)軟硬件的協(xié)同工作。
在保證系統(tǒng)性能的同時,增加了系統(tǒng)的靈活性。而且,如果單個的軟核CPU無法滿足用戶需求,可以添加多個CPU軟核,搭建多核系統(tǒng),通過多核CPU協(xié)同工作,讓系統(tǒng)擁有更加靈活便捷的控制能力。
由于CPU是使用FPGA的通用邏輯資源搭建的,相較使用經(jīng)過布局布線優(yōu)化的硬核處理器來說,軟核處理器夠運行的最高實時鐘主頻要低一些,而且也會相應(yīng)的消耗較多的FPGA邏輯資源以及片上存儲器資源。
因此SOPC方案僅適用于對于數(shù)處理器整體性能要求不高的應(yīng)用,例如整個系統(tǒng)的初始化配置,人機交互,多個功能模塊間的協(xié)調(diào)控制等功能。再如在芯片的設(shè)計驗證階段,主要保證芯片功能沒問題即可。
在高端應(yīng)用上,比如視覺、機器人的應(yīng)用上,會用到SoC FPGA技術(shù)。什么又是SoC FPGA技術(shù)呢?
SoC FPGA技術(shù)簡介
從架構(gòu)的角度來說,SOPC和SOPC FPGA是統(tǒng)一的,都是由FPGA部分和處理器部分組成。在SoC FPGA 中,嵌入的是ARM公司的Cortex-A9硬核處理器,簡稱HPS(Hardware Processor System)。
而SOPC技術(shù)中,嵌入的是NIOS II 軟核處理器,兩者指令集不一樣,處理器性能也不一樣。Cortex-A9硬核處理器性能遠(yuǎn)遠(yuǎn)高于NIOS II 軟核處理器。
相關(guān)芯片就是Altera公司的Cyclone V SoC FPGA芯片。Cyclone V SoC FPGA 片上的HPS部分,不僅集成了有雙核的Cortex-A9硬核處理器,還集成了各種高性能外設(shè),如MMU、DDR3控制器、Nand FLASH控制器等,有這些外設(shè),HPS部分就可以運行成熟的Linux操作系統(tǒng)。
NIOS II軟核CPU雖然可以通過配置,用邏輯資源來搭建相應(yīng)的控制器以支持相應(yīng)功能,但是從性能和開發(fā)難度上來說,基于SoC FPGA架構(gòu)進行設(shè)計開發(fā)是比較好的選擇。
雖然SoC FPGA芯片上既包含了有ARM,又包含了有FPGA,但是兩者一定程度上是相互獨立的,SoC芯片上的ARM處理器核并非是包含于FPGA邏輯單元內(nèi)部的,FPGA和ARM(HPS)處理器只是封裝到同一個芯片中,JTAG接口、電源引腳和外設(shè)的接口引腳都是獨立的。
因此,如果使用SoC FPGA芯片進行設(shè)計,即使不使用到片上的ARM處理器,ARM處理器部分占用的芯片資源也無法釋放出來,不能用作通用的FPGA資源。而SOPC則是使用FPGA通用邏輯和存儲器資源搭建的CPU,當(dāng)不使用CPU時,CPU部分占用的資源可以被釋放,重新用作通用FPGA資源。
相關(guān)資料:
《阿東 手把手教你學(xué)FPGA》《小梅哥 基于SoC FPGA的嵌入式設(shè)計和開發(fā)教程》最后
FPGA技術(shù)是一項很熱門、很吃香的技術(shù),但也是有門檻的。比如學(xué)歷,很多FPGA相關(guān)得崗位,都需要研究生學(xué)歷。FPGA一般研究生階段會接觸得比較多,如果本科階段能接觸到,那就太幸福了,可以學(xué)一學(xué)。正點原子和野火也在做這方面的教程吧。正點原子的做FPGA教程的好像是《手把手教你學(xué)FPGA》這本書的作者,很好的書。
FPGA在高端領(lǐng)域用得多,什么是高端領(lǐng)域前面介紹的時候已經(jīng)有說,工業(yè)機器人、圖像處理等。有機會可以去大廠走一遭(大廠也有容易進的),接觸一些一般在一般公司接觸不到的東西,可以刷新我們的認(rèn)知。大廠的特點就是有錢、任性,用的都是高端芯片。
之前的公司用的都是Altera的Cyclone V SoC FPGA芯片、TI的DSP28377、AM5728等高端芯片,有的項目甚至幾塊高端芯片一起上,但是并沒有用到那么多的芯片資源。那時候發(fā)現(xiàn)STM32好low啊,但現(xiàn)在是真香,哈哈。
大家都知道我們做嵌入式的,要涉及的東西都很雜,在專注于一個方向的前提下多了解一些其它知識也是很有幫助的。關(guān)于FPGA相關(guān)的筆記我是寫不動了,因為我這方面學(xué)得不多,也基本都忘了。
-END-
往期好文合集
電路與愛情<<戳這里
是否要從單片機轉(zhuǎn)嵌入式Linux?<<戳這里
分享GitHub上一些嵌入式相關(guān)的高星開源項目<<戳這里
??最 后??
?若覺得文章不錯,轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動力。
5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機、等等!
在公眾號內(nèi)回復(fù)「更多資源」,即可免費獲取,期待你的關(guān)注~
長按識別圖中二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的一文带你认识FPGA~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度网盘下载文件保存在哪?下载文件保存位
- 下一篇: 关于「无人驾驶」的学习路线...