作者:JPaul Carpenter 之前的文章: 從MCU到FPGA:第1部分 從MCU到FPGA:第2部分 當(dāng)我開始這個項(xiàng)目的時(shí)候,我已經(jīng)了解到FPGA的好處在于它可以將多種功能集成到單一的芯片中,并可以通過重配置而修改芯片功能。但是這種靈活性也讓我想知道:我應(yīng)該如何處理FPGA與外部組件的接口以及接口連線等問題呢?由于FPGA的平均設(shè)計(jì)周期為兩到三年,并且考慮到諸如USB 3.0到USB Type-C等通信技術(shù)的更新?lián)Q代,我很難理解FPGA如何才能真正地帶來好處。 和處理大多數(shù)MCU項(xiàng)目時(shí)一樣,我打算從示例代碼開始,然后通過各種示例搭建自己的項(xiàng)目。但是對于每一個例子,我發(fā)現(xiàn)越來越不熟悉,并且結(jié)果也越來越混亂。在這里代碼被用來定義對象和調(diào)用函數(shù),這在MCU里倒是很常見,但是有些定義是在高階函數(shù)里進(jìn)行的,而其他的則是在另一個地方。像往常一樣,這些函數(shù)被用來執(zhí)行一個功能或任務(wù),但有一些函數(shù)要依賴于其他函數(shù)而另一些函數(shù)則是獨(dú)立的。正如我試圖對它們發(fā)表評論時(shí)所發(fā)現(xiàn)的那樣,那些沒有被直接調(diào)用的代碼仍然是代碼功能的關(guān)鍵。 我決定在YouTube上搜索“Intel FPGA Setup Cyclone V”來尋找示例和“Setup&Go”培訓(xùn)。當(dāng)我瀏覽這些內(nèi)容時(shí),我發(fā)現(xiàn)一個共同的主題(圖1): 看似不連貫的一組命令仍然有效,但似乎并不完整。 缺乏不支持FPGA的外部模塊或組件。 有了這些觀察,我回顧了更多設(shè)計(jì)樣本和代碼,并發(fā)現(xiàn)了英特爾Cyclone V和HPS FPGA架構(gòu)顯著的優(yōu)勢。圖1顯示了HDMI命令集,其中包括一系列未被調(diào)用的代碼。它們不是按順序運(yùn)行的,而是并行運(yùn)行的。它們的功能很像回調(diào)函數(shù),在HPS中如果有來自較高級別控制器的數(shù)據(jù)調(diào)用時(shí),這些回調(diào)函數(shù)就會被激活。然后編譯器就會提高向MCU傳遞信息的能力,反之亦然。在這兩者之間需要做的就是協(xié)調(diào)定義和時(shí)間安排。 ![]() 圖1:HDMI命令集,其中包括一系列未被調(diào)用的代碼。 項(xiàng)目流程如下所示: Linux HPS抓取圖像。 Linux將OpenCV處理過程移交給FPGA。 Linux調(diào)整圖像。 FPGA接收原始圖像信息,并將其編碼為HDMI接口。 這是使用HPS和FPGA的完美示例。FPGA能夠處理大量重復(fù)的運(yùn)算并實(shí)現(xiàn)協(xié)議,而Linux和MCU則處理了程序的動態(tài)元素。這讓我看到了FPGA的優(yōu)勢。 當(dāng)我深入研究僅含有MCU的設(shè)計(jì)時(shí),我發(fā)現(xiàn)了FPGA的其他優(yōu)點(diǎn):它需要很少的元件,而且可以使成本更低,性能更好的MCU獲得非常好的效果。例如,僅含MCU的設(shè)計(jì)將需要更高的A52等條件來進(jìn)行圖像處理,此外還需要一個GPU來進(jìn)行圖形加速處理和更多的RAM來完成整個設(shè)計(jì)。設(shè)計(jì)完成后,最終結(jié)果仍然是一個鎖定的,有限的可升級模塊。有了FPGA,這些組件便可以被引入同一個芯片,所以產(chǎn)品級PCB設(shè)計(jì)更為簡單,因?yàn)樗枰^少的的組件接口,而且由此產(chǎn)生的模塊仍然可以升級或優(yōu)化。 我頭頂上的燈泡在幾英里外都可能被看到。 將多功能集成到單個電路上,減少接口數(shù)量,或者根據(jù)線路修改功能等這些都是FPGA的優(yōu)勢,但它的好處遠(yuǎn)不止這些。FPGA改變了我為了高效完成任務(wù)而增加外部組件的方式:不是“按順序執(zhí)行步驟1,步驟2,步驟3”,現(xiàn)在我正在考慮這樣完成任務(wù):“執(zhí)行步驟A,B,C,并且當(dāng)執(zhí)行完B之后,就執(zhí)行D”,F(xiàn)在,為什么要花時(shí)間來研究MCU到FPGA開發(fā)轉(zhuǎn)換的原因也已變得越來越明晰了。 請繼續(xù)關(guān)注第4部分文章:從MCU到FPGA: 第4部分 原文鏈接:https://www.mouser.cn/blog/intro ... to-fpga-part-3-of-6 |