陳冠成 吳貴燕
關鍵詞: ZYNQ芯片; 視頻處理; 實時性; ARM處理器; FPGA; Vivado HLS
中圖分類號: TN948.4?34; TP391.4 ? ? ? ? ? ? 文獻標識碼: A ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2019)06?0076?03
Abstract: The ARM+FPGA architecture of the Xilinx Zynq platform is studied, and a hardware and software co?processing real?time video processing system based on the ZYNQ chip is proposed in this paper. In the system, the ARM processor is used for the graphical interface program development, so as to realize task scheduling. The image processing algorithm is developed by using the Vivado HLS tool, which is integrated into the FPGA IP core to achieve the hardware acceleration processing. The data interaction in the DDR cache is realized by using the Xilinx Vdma IP. The test results show that the hardware and software co?processing system based on the ARM+FPGA can significantly improve the video processing speed, which satisfies the real?time requirement.
Keywords: ZYNQ chip; video processing; real?time performance; ARM processor; FPGA; Vivado HLS
隨著計算機視覺技術和電子技術的飛速發(fā)展,圖像視頻處理技術得到了迅速發(fā)展和廣泛應用,越來越多的計算機視覺應用可以在嵌入式系統(tǒng)上得以實現(xiàn)。傳統(tǒng)的嵌入式ARM視頻處理平臺存在計算能力有限、響應速度慢等問題[1];FPGA憑借并行結構獲得速度上的優(yōu)勢,且功耗較低,但其使用硬件描述語言開發(fā)復雜圖像處理算法難度較大[2?3]。針對以上問題,本文采用Zynq?7000系列的ARM+FPGA可編程片上系統(tǒng),運用軟硬件協(xié)同設計的方法搭建了圖像視頻采集與處理系統(tǒng)。
在ZYNQ芯片內(nèi),PS的互聯(lián)由多個開關組成,通過使用AXI點對點通道連接系統(tǒng)資源,用于在主設備和從設備之間實現(xiàn)通信地址、數(shù)據(jù)和響應交易。在ARM CPU和PL主設備控制器之間,該互聯(lián)結構的三種PS?PL接口(AXI_GP,AXI_HP,AXI_ACP)提供了低延遲、高吞吐量和緩存一致性的數(shù)據(jù)路徑[4]。
根據(jù)ZYNQ內(nèi)部互聯(lián)結構設計視頻處理系統(tǒng)的FPGA硬件框圖如圖1所示。FPGA硬件框圖可以分為視頻捕獲、處理和顯示三個部分。
1) 視頻通過位于PS側的USB攝像頭進行捕獲,由于Linux內(nèi)核帶有V4L2(Video for Linux)庫,而OpenCV在其基礎上封裝了VideoCapture類,因此可以方便地操作攝像頭捕獲視頻流。
2) 攝像頭獲得視頻流后存入DDR3緩存,并通過AXI_HP高速數(shù)據(jù)通道送入VDMA的MM2S端口,轉換為AXI4?Stream數(shù)據(jù)后進入PL端的HLS視頻處理IP進行處理。處理完成后再通過AXI_HP高速數(shù)據(jù)通道從VDMA的S2MM端口讀出,重新轉換為內(nèi)存數(shù)據(jù)存入DDR3緩存。
3) 視頻顯示模塊以及為顯示模塊提供標準時序數(shù)據(jù)的VDMA均由Linux系統(tǒng)控制,負責圖形界面的輸出顯示。
2.1 ?嵌入式Linux系統(tǒng)搭建
為了在ARM處理器上進行圖形界面程序開發(fā),需要進行嵌入式Linux系統(tǒng)的移植。首先在宿主機上安裝Xilinx SDK軟件開發(fā)套件搭建起交叉編譯環(huán)境,借助其中的交叉編譯鏈arm?xilinx?linux?gnueabi?gcc分別對裁剪后的U?Boot,Kernel(Linux內(nèi)核)源碼進行交叉編譯,生成二進制可執(zhí)行文件[5]。其次,使用Vivado設計套件進行可配置硬件電路開發(fā)?;赬ilinx IP核可以方便進行嵌入式Linux硬件系統(tǒng)的構建,其中主要包括ZYNQ7 IP,VDMA IP,AXI Display Controller IP等。在硬件電路設計通過驗證后即可生成用于PL初始化的比特流文件。最后,使用SDK工具制作系統(tǒng)啟動文件BOOT.bin。
2.2 ?VDMA驅(qū)動設計
Linux操作系統(tǒng)的內(nèi)存空間分為內(nèi)核空間和用戶空間兩個部分。前者運行操作系統(tǒng)的核心軟件,擁有訪問硬件設備的所有權限;后者運行普通應用程序,不能直接訪問內(nèi)核空間和硬件設備。在基于ZYNQ的嵌入式操作系統(tǒng)下,應用程序是不能夠直接訪問FPGA中的硬件邏輯資源的。因而應用程序需要通過使用內(nèi)核的應用程序編程接口或系統(tǒng)調(diào)用間接與FPGA硬件邏輯進行交互[6]。使用HLS[7]技術綜合而成的硬件加速IP屬于硬件邏輯資源,因此需要設計VDMA驅(qū)動程序,使應用程序方便控制HLS硬件邏輯資源。AXI VDMA結構框圖如圖2所示。通過圖2可知,VDMA驅(qū)動程序?qū)嵸|(zhì)上是通過AXI4?Lite接口向VDMA IP中不同功能的寄存器進行賦值實現(xiàn)[8]。
2.3 ?應用軟件設計
通過移植Qt(圖形界面庫)及OpenCV[9](計算機視覺庫),搭建視頻采集與顯示界面如圖3所示。
視頻流數(shù)據(jù)的處理流程圖如圖4所示。由流程圖可知,視頻圖像采集后,先進行軟件的預處理,接著通過VDMA的MM2S數(shù)據(jù)通道傳輸至HLS硬件加速IP進行處理,最后通過VDMA的S2MM數(shù)據(jù)通道返回用戶空間進行下一步處理。
為了對搭建的視頻處理系統(tǒng)進行功能及性能測試,對采集到的視頻圖像進行邊緣檢測,分別以軟件和軟硬件結合的方式予以實現(xiàn)。邊緣檢測是圖像處理中的基本問題,可以大幅度地減少數(shù)據(jù)量,保留圖像重要的結構屬性。這里實現(xiàn)的是Sobel[10]邊緣檢測算法,效果對比如圖5所示。
針對分辨率為640×480的視頻數(shù)據(jù)進行處理,獲得處理速度如表1所示。由表中結果可以看出,采用軟硬件結合設計方法實現(xiàn)的圖像處理算法效果不變,但是處理速度上有了很大提升。在本次圖像邊緣檢測實驗中,軟硬件協(xié)同處理與純軟件處理相比速度提高了10.98倍。
針對嵌入式視覺系統(tǒng)開發(fā)中ARM與FPGA傳統(tǒng)開發(fā)方案的缺點,本文提出基于ZYNQ芯片的實時視頻處理系統(tǒng),不僅為視頻的采集、處理與顯示提供完整的實現(xiàn)方案,而且應用軟硬件協(xié)同設計方法,充分發(fā)揮ARM+FPGA體系結構對于實現(xiàn)復雜圖像處理算法的優(yōu)勢,為進一步開發(fā)復雜功能的嵌入式視覺系統(tǒng)奠定了基礎。
參考文獻
[1] 鄧健峰,謝云.基于FPGA+ARM的視頻采集平臺設計與實現(xiàn)[J].工業(yè)控制計算機,2017,30(12):97?98.
DENG Jianfeng, XIE Yun. Design and implementation of video capture system based on FPGA+ARM [J]. Industrial control computer, 2017, 30(12): 97?98.
[2] 楊曉安,羅杰,蘇豪,等.基于Zynq?7000高速圖像采集與實時處理系統(tǒng)[J].電子科技,2014,27(7):151?154.
YANG Xiaoan, LUO Jie, SU Hao, et al. High?speed image acquisition and real?time processing system based on Zynq?7000 [J]. Electronic science and technology, 2014, 27(7): 151?154.
[3] 李朗,張索非,楊浩.基于Zynq?7000的視頻處理系統(tǒng)框架設計[J].計算機技術與發(fā)展,2017,27(5):192?195.
LI Lang, ZHANG Suofei, YANG Hao. Design of video processing system framework with Zynq?7000 [J]. Computer technology and development, 2017, 27(5): 192?195.
[4] 何賓,張艷輝.Xilinx Zynq?7000嵌入式系統(tǒng)設計與實現(xiàn)[M].北京:電子工業(yè)出版社,2016.
HE Bin, ZHANG Yanhui. Design and implementation of Xilinx Zynq?7000 embedded system [M]. Beijing: Publishing House of Electronics Industry, 2016.
[5] 陸佳華,潘祖龍,彭競宇.嵌入式系統(tǒng)軟硬件協(xié)同設計實戰(zhàn)指南[M].北京:機械工業(yè)出版社,2016.
LU Jiahua, PAN Zulong, PENG Jingyu. Practical guide for hardware and software collaborative design of embedded systems [M]. Beijing: China Machine Press, 2016.
[6] 梁新宇.基于ZYNQ的行人檢測系統(tǒng)軟硬件協(xié)同實現(xiàn)[D].大連:大連海事大學,2016.
LIANG Xinyu. Implementation with software and hardware of pedestrian detection system based on ZYNQ [D]. Dalian: Dalian Maritime University, 2016.
[7] Xilinx Inc. Vivado design suite tutorial: high?level synthesis [EB/OL]. [2017?12?20]. http://china.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug871?vivado?high?level?synthesis?tutorial.pdf.
[8] Xilinx Inc. AXI video direct memory access v6.3: LogiCORE IP product guide [EB/OL]. [2017?10?04]. http://china.xilinx.com/support/documentation/ip_documentation/axi_vdma/v6_3/pg020_axi_vdma.pdf.
[9] 毛星云,冷雪飛.OpenCV3編程入門[M].北京:電子工業(yè)出版社,2015.
MAO Xingyun, LENG Xuefei. Getting started with OpenCV3 programming [M]. Beijing: Publishing House of Electronics Industry, 2015.
[10] 沈德海,侯建,鄂旭,等.基于Sobel的多方向算子模板邊緣檢測算法[J].現(xiàn)代電子技術,2015,38(4):91?93.
SHEN Dehai, HOU Jian, E Xu, et al. Sobel?based edge detection algorithm for multi?direction template [J]. Modern electronics technique, 2015, 38(4): 91?93.