吳良晶,曹云峰,丁萌,莊麗葵
(1.南京航空航天大學航天學院,南京210016;2.南京航空航天大學民航學院)
SoC FPGA的視覺算法加速系統(tǒng)設計
吳良晶1,曹云峰1,丁萌2,莊麗葵1
(1.南京航空航天大學航天學院,南京210016;2.南京航空航天大學民航學院)
提出一種基于Altera SoC FPGA進行硬件加速的方案,該方案為運行在ARM端Linux系統(tǒng)的視覺算法利用FPGA進行加速提供傳輸通道。首先把ARM端的圖像數(shù)據(jù)傳輸?shù)紽PGA部分的SDRAM中,接著控制FPGA相關IP核讀取SDRAM中的數(shù)據(jù),然后視覺算法IP核接收圖像數(shù)據(jù)并對其進行加速處理,最后把處理后的圖像數(shù)據(jù)通過特定的IP核傳回Linux系統(tǒng)。實驗驗證了該方案的可行性、可靠性和加速性能。
SoC FPGA;視覺算法;硬件加速;嵌入式Linux
隨著圖像處理技術和檢測識別等技術的發(fā)展,其實用價值越來越高,目前主要的檢測識別算法已經(jīng)能夠非常精確地檢測識別出目標,但計算速度是影響實時檢測(如高速無人機自主著陸跑道檢測、車載行人檢測)等算法應用的關鍵因素[1]。在無法提高計算速度的前提下,使用高性能的硬件平臺實現(xiàn)算法是解決計算速度問題的一個方法。
FPGA具有很強的并行處理能力和實時處理速度,非常適合處理單位時間內(nèi)數(shù)據(jù)量大、要求數(shù)據(jù)運算速度快,但速度運算過程相對簡單的數(shù)字圖像處理;但FPGA控制能力不強,無法承擔整個系統(tǒng)的控制工作,而ARM處理器具有較多的外設接口,同時能夠搭載嵌入式操作系統(tǒng),其能夠完成整個嵌入式系統(tǒng)的全部軟/硬件資源的分配、調(diào)試并控制整個系統(tǒng)的運行。故采用ARM+FPGA的設計方法能有效地解決問題,但如果采用單獨的ARM處理器和FPGA,則設計復雜、成本較高。因此采用SoC FPGA成為了理想的選擇,在一個器件中集成ARM和FPGA,能夠把視覺算法中耗時的部分轉(zhuǎn)移到FPGA進行處理,從而提升算法運行速度。本文設計了從ARM到FPGA再到ARM的數(shù)據(jù)通道,并采用IP核設計,只要把視覺算法中需要加速的代碼編寫成符合Avalon總線規(guī)范的IP核即可使用本系統(tǒng)。
系統(tǒng)采用Altera公司推出的Cyclone V system-on-achip(SoC)FPGA,其由一個雙核的ARM Cortex-A9處理器和一個FPGA組成[2],結(jié)構圖如圖1所示。Altera SoC將ARM的硬核處理器系統(tǒng)(HPS)集成在FPGA架構中,使之具備可編程邏輯的靈活性和低功耗,也可以發(fā)揮硬核知識產(chǎn)權(IP)的性能[3-4]。
系統(tǒng)結(jié)構框圖如圖2所示,由HPS端的Linux系統(tǒng)讀圖像源,之后通過HPS的h2f_axi_master傳輸?shù)絊DRAM中,再由frame reader IP在HPS通過lw_h2f_axi_master的控制從SDRAM讀取數(shù)據(jù),并從Avalon Streaming Source端口傳輸給下一個模塊,即算法模塊,因此要求算法模塊具有Avalon Streaming Sink端口。算法模塊通過同樣的端口把處理過的數(shù)據(jù)傳輸給CAPTURE IP,該IP在HSP通過lw_h2f_axi_master控制捕獲從上一個IP傳輸?shù)臄?shù)據(jù),經(jīng)過FIFO緩存后,通過Avalon Memory Mapped(Avalon-MM)總線傳輸給HPS的f2h_axi_ slave接口,因為Altera開發(fā)的片內(nèi)總線Avalon-MM和AXI總線能夠自動轉(zhuǎn)換,所以可以直接相連[5]。Linux系統(tǒng)以字符設備驅(qū)動的方式為f2h_axi_slave開辟內(nèi)存,使之把數(shù)據(jù)傳輸?shù)絃inux系統(tǒng)指定的內(nèi)存空間中,Linux系統(tǒng)通過字符設備的read函數(shù)把內(nèi)存區(qū)域的數(shù)據(jù)傳輸?shù)接脩艨臻g,之后可以根據(jù)需要對傳入的數(shù)據(jù)進行下一步處理。
圖1 Altera SoC結(jié)構圖
圖2 系統(tǒng)結(jié)構框圖
2.1 FPGA與HPS通信
為實現(xiàn)FPGA與HPS之間的數(shù)據(jù)傳輸以及存儲器共享,Altera SoC FPGA提供兩種方式實現(xiàn)FPGA與HPS之間的通信,分別是FPGA to SDRAM和AXI Bridge接口。FPGA to SDRAM接口是HPS內(nèi)部SDRAM控制器提供給FPGA訪問HPS內(nèi)存的接口。AXI Bridge是FPGA和HPS總線之間的數(shù)據(jù)交互接口,包括FPGA-to-HPS AXI、HPS-to-FPGA AXI和Light-weight HPS-to-FPGA AXI。
在通信過程中,若使用FPGA-to-HPS Bridge, FPGA作為主端(Master)可以訪問HPS的內(nèi)存以及外設。FPGA-to-HPS Bridge的位寬可以設置為32位、64位和128位。若使用HPS-to-HPS Bridge或者Light-weight HPS-to-FPGA Bridge,FPGA作為從端(slave)供HPS訪問,Light-weight HPS-to-FPGA Bridge性能比較低,尋址空間只有2 MB,位寬固定為32位,HPS-to-FPGA Bridge具有0x3FFF 0000尋址空間。HPS-to-FPGA Bridge的位寬也可以設置為32位、64位和128位[2]。本系統(tǒng)需要使用3種總線, Light-weight HPS-to-FPGA Bridge用于Linux系統(tǒng)控制frame reader IP和CAPYURE IP的總線,HPS-to-FPGA Bridge用于Linux系統(tǒng)傳輸數(shù)據(jù)進入SDRAM,FPGA-to-HPS Bridge用作接收CAPTURE IP數(shù)據(jù)。FPGA-to-HPS AXI設置為32位,HPS-to-FPGA AXI設置為128位,如圖3所示。
圖3 AXI Bridge設置
2.2 幀讀取器(frame reader)IP核
本文使用了Altera公司提供的視頻和圖像處理IP核套件中的幀讀取器IP核[6-7]。幀讀取器IP核讀取在SDRAM的視頻幀并通過Avalon-ST視頻協(xié)議輸出,幀讀取器有一個Avalon-MM讀主端口,用于從SDRAM讀取數(shù)據(jù);一個Avalon-ST源端口,其上的數(shù)據(jù)流使用Avalon-ST協(xié)議。幀讀取器還有一個Avalon從端口,為IP核提供配置數(shù)據(jù)。SDRAM中的圖像是以像素值形式存儲,在幀讀取器讀取SDRAM中的數(shù)據(jù)之前,先在Avalon-ST源端口上生成一個控制包和數(shù)據(jù)包的包頭,從SDRAM中輸入的是數(shù)據(jù)包的載荷,控制數(shù)據(jù)包的內(nèi)容通過Avalon從端口設置。
為了使該IP核能夠準確地讀取一幀視頻或者一幅圖片,不僅需要HPS通過Light-weight HPS-to-FPGA Bridge控制幀讀取器的地址和數(shù)據(jù)位寬,而且需要根據(jù)視頻/圖片信息對幀讀取器作一些設置,若輸入的是640×480分辨率、8位RGB圖片,幀讀取器的設置可以如圖4所示。
2.3 CAPTURE IP核
本文開發(fā)CAPTURE IP核用于捕獲來自圖像處理算法輸出的數(shù)據(jù)并傳輸給f2h_axi_slave端口。CAPTURE用于接收8位RGB格式的視頻/圖片信息,因此輸入的數(shù)據(jù)只有24位,而FPGA-to-HPS AXI為32位,因此需要添加8位數(shù)據(jù)才能夠傳輸,CAPTURE設計添加8位0來滿足傳輸需求,雖然FPGA-to-HPS AXI可以設置為64位或者128位,因為輸入的數(shù)據(jù)只有24位,因此FPGA-to-HPS AXI如果設置為更高的位數(shù)不能提高傳輸速度,反而為開發(fā)帶來了一些麻煩。CAPTURE IP核Qsys軟件如圖5所示。
圖4 幀讀取器設置
圖5 CAPTURE IP核Qsys軟件
軟件部分需要完成4個主要功能:一是獲取圖像源并轉(zhuǎn)換為RGB格式,傳輸?shù)紽PGA部分SDRAM;二是控制Frame Reader和CAPTURE的工作;三是將編寫的f2h_ axi_slave設備驅(qū)動完整地加載到內(nèi)核當中;四是等待CAPTURE完成數(shù)據(jù)傳輸后,把數(shù)據(jù)從內(nèi)存中讀取出來。
程序中首先使用mmap()函數(shù)把HPS-to-FPGA和Light-weight HPS-to-FPGA Bridge的物理地址空間映射到Linux內(nèi)核虛擬地址空間,以便應用程序可以通過訪問虛擬地址來訪問FPGA資源。
完成映射后,通過IP模塊在Qsys中分配的基地址訪問IP模塊。由于HPS-to-FPGA Bridge為32位總線,因此需要把RGB數(shù)據(jù)按照RGBX 4字節(jié)的方式傳送到SDRAM,所以在寫數(shù)據(jù)的時候需要填補1字節(jié)的空字節(jié)。
Linux系統(tǒng)通過虛擬地址訪問到IP基地址后,加上一定的偏移地址訪問IP模塊的寄存器,Linux系統(tǒng)通過對寄存器寫入和讀取控制Frame Reader IP和CAPTURE IP并觀測IP所處的狀態(tài)為控制提供依據(jù)。在運行應用程序之前,需要把編寫的內(nèi)核模塊通過insmod命令來向內(nèi)核空間安裝內(nèi)核模塊,之后通過mknod命令來創(chuàng)建一個設備文件節(jié)點[8],該設備文件節(jié)點是應用程序訪問該內(nèi)核模塊的符號。之后通過字符設備的read函數(shù)把內(nèi)存區(qū)域的數(shù)據(jù)傳送到應用程序。由于FPGA-to-HPS Bridge的位寬設置為32位,因此CAPTURE需要將寫數(shù)據(jù)按照RGBX格式寫入,X為填充的0字節(jié),分配的內(nèi)存區(qū)域根據(jù)一幀視頻或一幅圖片的大小設定。讀取數(shù)據(jù)后需要把填充的1字節(jié)數(shù)據(jù)舍棄后再合成圖像。
本系統(tǒng)的實驗平臺為友晶(terasic)公司開發(fā)的DE1-SoC開發(fā)板,該實驗平臺集成了Altera CycloneⅤSE 5CSEMA5F32C6N器件,在FPGA部分擁有64 MB SDRAM;JTAG模式的USB-Blaster II集成在開發(fā)板上,方便燒寫FPGA工程。在HPS部分集成了一個800 MHz雙核ARM Cortex-A9 MPCore處理器,一個1 GB DDR3 SDRAM,一個SD卡槽,最高支持128 GB SD卡,用來裝載Linux系統(tǒng),其他本文不涉及的功能模塊在這里不作介紹,具體配置可以訪問友晶官網(wǎng)查看。
在不添加需要加速的IP模塊時,對FPGA資源消耗統(tǒng)計如表1所列。
表1 FPGA資源消耗統(tǒng)計表
從表1中可以看出,整個系統(tǒng)的搭建占用FPGA資源很少,其還有大量資源可以用于視覺算法的開發(fā)。
4.1 閾值分割IP驗證測試
本文開發(fā)閾值分割IP核驗證系統(tǒng)功能,并簡要論述硬件加速的效果,閾值分割IP在Qsys中如圖6所示,圖中閾值默認設置為128。
使用modelsim軟件對IP核進行仿真[9],仿真結(jié)果如圖7所示。
圖6 閾值分割IP
圖7 閾值分割IP仿真結(jié)果圖
仿真周期設置為20 ps,閾值設置為默認128,分割方式設為小于閾值歸0;輸入3個RGB像素值,分別為[158, 110,56]、[254,250,153]、[10,120,56],在圖7中以sink_ data信號表示,表現(xiàn)形式為二進制??梢钥闯?在經(jīng)過一個時鐘周期之后,source_data接收到經(jīng)過閾值分割處理過的數(shù)據(jù),表現(xiàn)形式為二進制,分別為[158,0,0]、[254, 250,153]、[0,0,0],仿真結(jié)果驗證了該IP核的功能,需要說明的是,該IP核以Avalon流[10]的形式輸入輸出數(shù)據(jù),數(shù)據(jù)位為24位,用于處理8位RGB圖像。
4.2 硬件加速實驗驗證
從圖7可以分析出處理一個RGB像素需要一個時鐘周期,因此處理一幅640×480像素值的RGB圖像的時間t可以通過計算得到:
f為閾值分割IP核的時鐘頻率。若f=100 MHz,則t= 3.072 ms;若f=200 MHz,則t=1.536 ms。使用Altera PLL可以配置閾值分割IP的時鐘頻率。
在HPS端實現(xiàn)閾值分割,實驗使用ubuntu 12.04系統(tǒng)并配置opencv3.0,雙核ARM Cortex A9時鐘頻率為800 MHz。使用opencv中閾值分割threshold()函數(shù)來驗證在ARM中實現(xiàn)閾值分割的使用時間,并使用clock_ gettime()函數(shù)來計算使用時間,clock_gettime()是基于Linux C語言的時間函數(shù),可以用于計算精度和納秒。測試部分代碼如下:
由于opencv threshold()函數(shù)不能同時處理RGB圖像,因此使用了split函數(shù)分離RGB圖像為3個單通道圖像,處理完之后使用merge()函數(shù)把3個單通道函數(shù)合并成RGB圖像[11],在程序中使用clock_gettime()函數(shù)計算單通道閾值分割使用時間和三通道閾值分割使用時間,使用納秒計數(shù)計算使用時間,程序運行結(jié)果如圖8所示。
圖8 閾值分割函數(shù)使用時間
從圖中可以看出,單通道運行時間約為2.55 ms,整個RGB圖像閾值分割使用時間約為5.86 ms;若threshold_Segmengtation IP時鐘使用200 MHz,則RGB圖像處理比ARM端閾值分割處理快3.8倍。
因此可以看出,FPGA可以同時處理RGB 3個通道圖像,而ARM只能順序執(zhí)行3個單通道圖像閾值分割,因此雖然使用了高性能高優(yōu)化的opencv函數(shù)處理,卻依然沒有FPGA快,當遇到更復雜的算法的時候,FPGA可以利用大量FPGA邏輯資源并行執(zhí)行更多的操作,可以加速更多倍,這就是使用FPGA開發(fā)視覺算法的魅力所在。
4.3 系統(tǒng)測試
本文使用從文件中讀取10張圖片通過FPGA進行閾值分割后再保存到文件中的方式驗證整個系統(tǒng)功能。
實驗配置DE1-SoC MESL[4:0]=10010設定模式為AS,即FPGA從EPCQ配置,使用串口對Linux系統(tǒng)進行操作。
測試過程如圖9所示,源圖像存于input文件夾,處理后的圖像存儲在output文件夾,取其中5組圖片,結(jié)果如圖10所示,上面5幅為原圖(即input中的圖片),下面5幅圖是處理后的圖(即output中的圖片)。測試結(jié)果驗證了本文提出方案的正確性。
圖9 系統(tǒng)測試過程
圖10 系統(tǒng)測試結(jié)果
本文根據(jù)目前視覺算法的局限性,提出使用SoC FPGA硬件加速的方案提高算法的速度,并就此提出適用于C/C++視覺算法通過FPGA進行加速的系統(tǒng),為后續(xù)的視覺算法移植到FPGA提供了保證,并用一個簡單的圖像分割IP論證將視覺算法部分從ARM轉(zhuǎn)移到FPGA的可行性和速度優(yōu)勢。同時值得注意的是,ARM和FPGA之間的高速/低延時互聯(lián)是在SoC FPGA系統(tǒng)中實現(xiàn)這一性能優(yōu)勢的關鍵因素。
[1]Duc Thanh Nguyen,Wanqing Li,Philip,et al.Human detection from images and videos:A survey[J].Pattern Recognition,2016(51):148-175.
[2]Altera Corporation.Cyclone V Hard Processor System Technical Reference Manual,2015.
[3]白月明.基于SoC FPGA的視頻播放器設計[D].西安:西安電子科技大學,2014.
[4]Chien-chuang Wu,Kaiwen Weng.The Development and Implementation of a Real-time Depth Image Capturing System using SoC FPGA[C]//30th International Conference on Advanced Information Networking and Applications Workshops,2016:934-938.
[5]康維新.SOPC技術與應用[M].哈爾濱:哈爾濱工程大學出版社,2015.
[6]Altera Corporation.Video and Image Processing Suite User Guide,2015.
[7]劉東華.Altera系列FPGA芯片IP核詳解[M].北京:電子工業(yè)出版社,2014.
[8]陳學松.深入linux設備驅(qū)動程序內(nèi)核機制[M].北京:電子工業(yè)出版社,2012.
[9]Altera Corporation.Quartus II Handbook Version 13.1,2013. [10]Altera Corporation.Avalon Interface Specifications,2015.
[11]毛星云,冷雪飛.OpenCV3.0編程入門[M].北京:電子工業(yè)出版社,2015.
吳良晶(碩士研究生),主要研究方向為計算機視覺;曹云峰(教授),主要研究方向為飛行控制、計算機視覺、數(shù)字化設計。
Vision Algorithm Acceleration System Based on SoC FPGA
Wu Liangjing1,Cao Yunfeng1,Ding Meng2,Zhuang Likui1
(1.College of Civil Astronautics,Nanjing University of Aeronautics and Astronautics,Nanjing 210016,China; 2.College of Civil Aviation,Nanjing University of Aeronautics and Astronautics)
A hardware acceleration system based on Altera SoC FPGA is proposed,which provides a transport channel for accelerating vision algorithm that runs on the Linux operation system based on ARM and uses FPGA to acceleration.Firstly,the image data from the ARM side is transferred to the SDRAM of FPGA region,then the related IP core in FPGA is controlled to read the data of SDRAM,the IP core of vision algorithm receives and accelerates the image data,finally the processed image data is transported back to the Linux operation system by the specific IP core.The feasibility,reliability and acceleration performance of the method are demonstrated by the experiment.
SoC FPGA;vision algorithm;hardware acceleration;embedded Linux
TP274
:A
薛士然
2016-06-07)