以下文章來源于OpenFPGA,作者碎碎思
基于 MicroBlaze V 的 FPGA 視覺平臺:通過以太網(wǎng)實時捕獲、調(diào)試和傳輸 MIPI 相機數(shù)據(jù),支持全幀或高速 ROI 范圍。
介紹
圖像處理是FPGA的常見應(yīng)用之一。其靈活的I/O接口使其能夠與各種攝像頭和傳感器進行交互,包括MIPI、Camera Link、并行接口以及DVI/HDMI接口。
可編程邏輯的并行特性使得圖像處理流水線能夠直接并行實現(xiàn),從而提高確定性并降低延遲。
在開發(fā)圖像處理算法時,我們通??梢允褂酶呒墑e的框架,例如 Vitis HLS 或 MathWorks Simulink。
雖然看到算法在模擬環(huán)境中運行很棒,但最好還是看到它們在實際硬件上運行,才能確定自己設(shè)計的算法是否合理。
所以決定創(chuàng)建一個圖像處理系統(tǒng),方便隨時添加新的圖像處理核心。該系統(tǒng)能夠利用多個MIPI攝像頭。
圖像處理流程對圖像執(zhí)行簡單的處理階段,例如去馬賽克,然后通過以太網(wǎng)提供圖像,以便檢查算法性能。
由于目的是評估算法性能,因此通過以太網(wǎng)鏈路發(fā)送的圖像數(shù)據(jù)沒有進行壓縮。
為了能夠評估來自攝像機的實時視頻,該設(shè)計將能夠從整體圖像中抽取較小的窗口進行流式傳輸。
硬件選擇
在這個項目中,將使用 Artix UltraScale+ 15P FPGA,以及 2GB DDR4、10/100 以太網(wǎng)、SFP+ 插槽和 HDMI Rx 和 Tx。
在外部連接方面,還會利用 FMC LPC(https://camerafmc.com/)。

為了使 FPGA 板上最多可連接兩個 MIPI 攝像頭,我們使用了攝像頭 FMC模塊。該 FMC 模塊最多可連接四個 MIPI 攝像頭到 AMD 開發(fā)板上,具體數(shù)量取決于所用開發(fā)板,因為不同開發(fā)板的 I/O 引腳排列方式不同。
架構(gòu)
該解決方案的整體架構(gòu)如下所示。其中包括樹莓派攝像頭、Demosaic 和 AXI VDMA,后者將圖像存儲在 DDR4 幀緩沖區(qū)中。

然后,MicroBlaze V 處理器將使用 LWIP 從幀緩沖區(qū)讀取圖像,并通過 AXI Ethernet Lite 以以太網(wǎng)方式輸出。
MicroBlaze V 還將負責(zé)啟用和配置 樹莓派 攝像頭。為此,它使用了 AXI IIC 和 GPIO 模塊。
幀的抓取、顯示和控制流幀由運行在客戶端 PC 上的 Python 應(yīng)用程序控制。
硬件設(shè)計
該項目以 MicroBlaze V 處理器為核心構(gòu)建,該處理器本身連接到以下 IP 核。
AXI UART Lite - 支持狀態(tài)報告
AXI Ethernet Lite - 以 100 Mbps 的速度連接到主機
AXI timer - 輕量級 IP 堆棧的必需組件
AXI GPIO - 控制樹莓派攝像頭的電源啟用
AXI IIC - 配置 RPI 攝像頭。
AXI Interrupt Controller - 處理來自IIC、以太網(wǎng)精簡版和定時器的中斷
完整的設(shè)計如下所示,也可在Github上找到(鏈接在最后)。

圖像處理流程包括:
MIPI CSI2 RX Subsystem - 該子系統(tǒng)配置為支持 RAW10 位像素和 2 條 MIPI 通道。該模塊在 PL 設(shè)計中也直接啟用。
Demosaic - 配置為將 RAW10 像素轉(zhuǎn)換為 30 位(RGB)顏色通道
AXIS Subset Convertor - 該轉(zhuǎn)換器接收 30 位像素,并提取綠色通道的 8 位最高有效位。綠色通道包含灰度圖像所需的大部分光照強度信息。
VDMA - 配置為寫入 DDR4 幀緩沖區(qū)。
時鐘頻率分配很簡單,MicroBlaze V 的時鐘頻率為 300 MHz,由 DDR MIG 輸出(圖中以綠色顯示)。DPHY 和視頻流水線使用 200 MHz(圖中以粉色顯示),100 MHz(圖中以藍色顯示)也需要使用。
下一步是設(shè)計運行在 MicroBlaze V 上的嵌入式軟件。
嵌入式軟件
該應(yīng)用軟件其中最重要的包括配置 RPI 攝像頭和運行用于以太網(wǎng)通信的 LWIP 協(xié)議棧。
軟件應(yīng)用程序的概覽如下所示,其結(jié)構(gòu)簡單明了:首先初始化 LWIP 和相機,然后再啟動圖像處理流程。流程初始化完成后,程序?qū)⒉杉瘓D像,并運行主 LWIP 處理器,等待 Python 應(yīng)用程序的指令。

應(yīng)用程序軟件已上傳至GitHub(鏈接在最后) ,其中包含四個主要文件:app.c、app.h、imx_219_cam.c 和 imx219_cam.h。
imx219_cam.c 和 imx219_cam.h
通過 AXI IIC 處理 IMX219 相機傳感器的啟動。
初始化序列通過 AXI GPIO 對攝像頭進行斷電重啟,并初始化 AXI IIC 內(nèi)核。然后,它通過讀取型號 ID (0x0219) 來驗證傳感器是否響應(yīng) IIC 命令。
app.c和app.h
該主要應(yīng)用程序包含五個主要要素:
平臺初始化程序會設(shè)置 AXI 中斷控制器并將其連接到 MicroBlaze-V 異常處理系統(tǒng)。該程序未使用定時器,lwIP 以純輪詢模式運行,這足以滿足 UDP 的需求。
網(wǎng)絡(luò)初始化函數(shù)在啟動序列的早期被調(diào)用,因為在 PHY 自動協(xié)商期間 xemac_add 會阻塞。通過先執(zhí)行此操作,可以在相機上電和配置期間建立以太網(wǎng)鏈路。lwIP RAW API 與綁定到端口 5001 的 UDP PCB 一起使用。
Camera Init調(diào)用 IMX219_Init,該 IMX219_Init 處理完整的電源循環(huán)和 I2C 配置序列。
捕獲數(shù)據(jù)流初始化首先啟動去馬賽克(以便在 VDMA 讀取視頻流之前正確格式化視頻流),等待 100 ms使其同步,然后配置并啟動 VDMA S2MM 通道,該通道使用 DDR4 內(nèi)存和三幀緩沖區(qū)。如果 VDMA 報告 IntErr(由于捕獲到部分首幀),它會自動重置并重新啟動 VDMA 以進行恢復(fù)。
主循環(huán)輪詢 xemacif_input 以獲取傳入的 UDP 數(shù)據(jù)包。
UDP幀協(xié)議使用帶有每個數(shù)據(jù)包序列號和字節(jié)偏移量的格式,以便即使數(shù)據(jù)包丟失,接收方也能正確放置數(shù)據(jù)。
每個數(shù)據(jù)包包含一個 12 字節(jié)的頭部,后跟最多 1460 字節(jié)的像素數(shù)據(jù)。幀頭部包含數(shù)據(jù)包總數(shù)和幀大小,以便接收器了解預(yù)期接收的數(shù)據(jù)。由于 AXI Ethernet Lite 只有一個發(fā)送緩沖區(qū),因此數(shù)據(jù)包以 2 毫秒的間隔發(fā)送。

這種方法可以實現(xiàn)更強大的應(yīng)用程序,并防止除丟包之外的圖像損壞(在這種配置下,丟包的情況很少見)。

Python應(yīng)用程序
Python 應(yīng)用程序旨在抓取幀并將其存儲為 PNG 或流式傳輸可選擇感興趣區(qū)域的圖像。
在流式傳輸過程中,Python 應(yīng)用程序?qū)⒚?10 秒抓取一次全幀圖像,并進行更新,以便隨著場景的變化更新感興趣的區(qū)域。
Python客戶端是一個單文件程序,它通過UDP協(xié)議與MicroBlaze-V通信,并使用OpenCV將接收到的像素數(shù)據(jù)重新組裝成可查看的圖像。它有三種運行模式,這些模式的設(shè)計都考慮到了100Mbps鏈路和單緩沖區(qū)以太網(wǎng)MAC的限制。

首先要進行的是Socket建立。客戶端創(chuàng)建一個具有 8 MB 接收緩沖區(qū)的 UDP Socket。
接收引擎 是客戶端的核心。它等待 FRMB 頭部數(shù)據(jù)包,提取幀尺寸、數(shù)據(jù)包總數(shù)和快照大小,然后預(yù)先分配一個大小恰好為該值的零字節(jié)數(shù)組。當(dāng)數(shù)據(jù)包到達時,每個數(shù)據(jù)包都會被放置在其聲明的字節(jié)偏移量處。這使得整個系統(tǒng)具有容錯能力。
每種模式的關(guān)鍵設(shè)計選擇都歸結(jié)于相同的限制,AXI Ethernet Lite 的單個 TX 緩沖區(qū)在 100 Mbps 時無法處理連續(xù)的密集傳輸。
GRAB 模式通過重試機制解決這個問題,最多嘗試三次,并保留完成度最高的嘗試。
窗口模式通過減小傳輸幀的大小來解決這個問題,是速度最快的傳輸方式。一個 128×128 的窗口只有 16 KB,大約相當(dāng)于 12 個數(shù)據(jù)包。
流模式通過不斷地從圖像中傳輸完整幀來解決這個問題,但是幀速率受到限制。

測試
在硬件上運行 pythn 應(yīng)用程序,結(jié)果顯示應(yīng)用程序運行正常,符合預(yù)期。
窗口模式下運行時幀率約為 20-30 FPS,對于 100 MBps 的以太網(wǎng)連接來說還不錯。

總結(jié)
該項目演示了如何創(chuàng)建一個簡單的幀捕獲解決方案,使我們能夠在硬件上測試圖像處理算法,并將處理后的幀存儲起來以進行進一步分析。
本項目采用了純FPGA方案。還可以添加一些擴展功能,例如使用PCIe進行幀采集。
-
FPGA
+關(guān)注
關(guān)注
1664文章
22497瀏覽量
639002 -
圖像處理
+關(guān)注
關(guān)注
29文章
1346瀏覽量
59692 -
MIPI
+關(guān)注
關(guān)注
11文章
364瀏覽量
51084
原文標(biāo)題:FPGA圖像處理平臺搭建:MIPI + VDMA + Ethernet全流程
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于FPGA的實時邊緣檢測系統(tǒng)設(shè)計,Sobel圖像邊緣檢測,FPGA圖像處理
基于DSP和FPGA的通用圖像處理平臺設(shè)計
基于DSP和FPGA的通用圖像處理平臺設(shè)計
基于FPGA的LCoS驅(qū)動和圖像處理系統(tǒng)設(shè)計
實時圖像邊緣檢測的設(shè)計及FPGA實現(xiàn)
基于FPGA的紅外圖像處理系統(tǒng)及算法設(shè)計
數(shù)字圖像處理平臺系統(tǒng)方案詳解
略談FPGA圖像處理
基于ARM與FPGA的嵌入式實時圖像處理平臺
FPGA圖像處理平臺搭建方案
評論