林振鈺,張志杰,劉佳琪
(中北大學(xué) 儀器科學(xué)與動態(tài)測試教育部重點實驗室,太原 030051)
圖像包含大量的信息,對于人類而言視覺信息利用率最高,人類對數(shù)字圖像顯示的效果的判斷會受到各種外部環(huán)境和主觀意識等因素的影響。隨著信息技術(shù)的飛速發(fā)展,在工農(nóng)業(yè)生產(chǎn)中通過加入圖像系統(tǒng)提取有用信息進行處理[1],從而輸出檢測結(jié)果或者控制信號,來提高系統(tǒng)的智能化和自動化。在某些特定場景下,如交通運輸、精密測控、顯微醫(yī)學(xué)操作、工業(yè)探傷以及農(nóng)田作業(yè)等領(lǐng)域[2],對圖像有實時性和高精度檢測要求,而在圖像顯示及處理的過程中要占用大量資源和時間,例如,尺寸為1 920×1 080的8/24 bit 的BMP圖像大小為 5.93 MB[3],連續(xù)的圖像數(shù)據(jù)頻帶較寬,數(shù)據(jù)量大,像素相關(guān)性大。傳統(tǒng)的DSP或ARM處理器取樣速率較低,且系統(tǒng)使用浮點,很難對其進行直接的處理,且成本較高。FPGA適用于高速采樣頻率且任務(wù)比較固定或重復(fù)的情況,系統(tǒng)使用定點,可靈活試制樣機。本文基于Xilinx公司ARM + FPGA 體系結(jié)構(gòu)的Zynq高性能芯片,在AXI協(xié)議框架下設(shè)計了自定義數(shù)據(jù)存儲傳輸?shù)腎P核,實現(xiàn)了處理速度與帶寬最大化。利用HLS工具將圖像預(yù)處理算法快速打包生成IP核[4],為各種中端圖像處理算法提供了可擴展的 FPGA 硬件加速通道,利用軟硬協(xié)同設(shè)計的方法完成了HDMI接口的高清圖像顯示系統(tǒng)平臺的原型機設(shè)計。有效解決了低延時低功耗與高數(shù)據(jù)帶寬和處理速度之間的矛盾[5],為后端結(jié)果處理與應(yīng)用提供了良好支持。
基于ZYNQ的實時視頻高速采集處理系統(tǒng)原理如圖1所示,系統(tǒng)平臺主要由圖像采集模塊、數(shù)據(jù)存儲模塊、硬件加速模塊、內(nèi)部傳輸互聯(lián)模塊、HDMI高清顯示模塊組成。Zynq-7000SoC可擴展平臺作為整個實時處理系統(tǒng)的核心,上方矩形為FPGA可編程邏輯(PL,programmable logic)部分,下方矩形為ARM處理系統(tǒng)(PS,processing system)。其中PS部分的高性能DDR3存儲單元通過AXI內(nèi)部互聯(lián)與PL端進行大吞吐量的高速數(shù)據(jù)通信,其片內(nèi)帶寬足夠大,消除了芯片間互聯(lián)存在的帶寬瓶頸問題[6]。

圖1 系統(tǒng)結(jié)構(gòu)原理框圖
根據(jù)系統(tǒng)讀取外界視頻數(shù)據(jù)信息的數(shù)據(jù)流向,從軟硬件功能層面具體劃分為:
1)采集部分:視頻通過位于PL側(cè)的500萬像素的cmos攝像頭進行采集,PS側(cè)引出EMIO引腳通過軟件模擬SCCB協(xié)議對cmos攝像頭進行配置。將采集到的圖像數(shù)據(jù)送入PL中使用Verilog HDL編程封裝的圖像采集模塊將數(shù)據(jù)位寬整合成24位。
2)硬件加速部分:將RGB數(shù)據(jù)格式傳送到圖像預(yù)處理模塊,實現(xiàn)對RGB像素信息的各種預(yù)處理,如灰度化、濾波、邊緣化等,此模塊利用Xilinx的HLS工具,通過C語言編程實現(xiàn)各種圖像預(yù)處理IP核的快速定制。在PL端實現(xiàn)硬件加速功能,提高圖像處理的實時性。
3)存儲傳輸模塊:自定義AXI_DMA_WR寫模塊將數(shù)據(jù)通過HP口與PS端的DDR進行高數(shù)數(shù)據(jù)交互,將處理后的視頻數(shù)據(jù)傳輸至DDR3內(nèi)存芯片中存儲,最后由PS端發(fā)出讀信號控制AXI_DMA_RD讀模塊將DDR3中的圖像數(shù)據(jù)讀出并緩存到PL端的FIFO模塊。
4)高清顯示模塊: 實現(xiàn)HDMI接口驅(qū)動邏輯,完成圖像顯示功能。根據(jù)差分信號高速數(shù)據(jù)傳輸技術(shù)TMDS(transition minimized differential signaling),編碼驅(qū)動圖像輸出到 HDMI 接口,實現(xiàn)較傳統(tǒng)VGA接口更為高清的圖像實時顯示功能。
視頻采集模塊選用OmniVision公司OV5640攝像頭作為數(shù)據(jù)采集前端,它是一款1/4英寸單芯片圖像傳感器,其感光陣列2 592*1 944(即500 W像素),能實現(xiàn)最快15 fps QSXVGA(2 592*1 944)或者90 fps VGA(640*480)分辨率的圖像采集。具有高靈敏度、低串?dāng)_和低噪聲的優(yōu)質(zhì)性能。傳感器內(nèi)部集成了圖像處理的功能,包括自動曝光控制(AEC)、自動白平衡(AWB)等。同時該傳感器支持LED補光、MIPI(移動產(chǎn)業(yè)處理器接口)輸出接口和DVP(數(shù)字視頻并行)輸出接口選擇、ISP(圖像信號處理)以及AFC(自動聚焦控制)等功能[7]。本系統(tǒng)中選擇 DVP 接口模式[8],在PS端通過 SCCB協(xié)議將傳感器視頻分辨率配置為1 920×1 080,視頻幀率配置為30 f/s。時鐘頻率為74.25 MHz(2 200×1 125×30)。
為了匹配適應(yīng)顯示模塊HDMI接口輸入端RGB888格式,在PL端使用Verilog HDL描述圖像采集模塊實現(xiàn)將8位原始圖像數(shù)據(jù)轉(zhuǎn)換為24位RGB數(shù)據(jù)的功能。攝像頭采集模塊在像素時鐘的驅(qū)動下將傳感器輸出的場同步信號、行同步信號以及8位數(shù)據(jù)轉(zhuǎn)換成讀寫控制模塊的寫使能信號和24位寫數(shù)據(jù)信號,完成對CMOS傳感器圖像的采集。對圖像采集模塊進行測試仿真效果如圖2所示,在幀同步信號激勵下RGB顏色分量各占8位位寬輸出。

圖2 圖像采集模塊測試仿真圖
數(shù)據(jù)讀寫模塊即FPGA與ARM的數(shù)據(jù)交換,不同工藝特征的處理器與FPGA融合在一個芯片上之后,片內(nèi)處理器與FPGA之間的互聯(lián)通路就成了ZYNQ芯片設(shè)計的重中之重。如果Cotex-A9與FPGA之間的數(shù)據(jù)交互成為瓶頸[9],那么處理器與FPGA結(jié)合的性能優(yōu)勢就不能發(fā)揮出來。在ZYNQ-7000AOSOC器件中, PS和PL之間的主要連接是通過一組AXI(Advanced extensible Interface)接口, AXI協(xié)議是基于猝發(fā)式傳輸機制的一種高性能、高帶寬、低延遲的片內(nèi)總線,總線由5個獨立的通道構(gòu)成:1)讀地址;2)讀數(shù)據(jù);3)寫地址;4)寫數(shù)據(jù);5)寫響應(yīng)。5個通道都有各自的源端產(chǎn)生的VALID信號和目的端產(chǎn)生的READY信號組成的握手機制,如圖3所示。

圖3 AXI協(xié)議的握手信號對
在地址通道上,每個交易有地址和控制信息,這些信息描述了需要傳輸?shù)臄?shù)據(jù)性質(zhì)。在主從設(shè)備之間傳輸數(shù)據(jù),分別使用從設(shè)備的寫數(shù)據(jù)通道和到主設(shè)備的讀數(shù)據(jù)通道。在主設(shè)備到從設(shè)備的寫數(shù)據(jù)交易中,AXI有一個額外的寫響應(yīng)通道。從設(shè)備通過響應(yīng)通道向主設(shè)備發(fā)出信號表示寫交易完成。
2.2.1 AXI_DMA_RD讀模塊
由于實時連續(xù)圖像數(shù)據(jù)量大,本設(shè)計利用片內(nèi)提供的的HP口即AXI的高性能端口(high performance ports)進行數(shù)據(jù)交互,對DDR3進行直接存儲映射訪問,其可設(shè)FIFO緩沖來提供“批量”讀寫操作,數(shù)據(jù)寬度是32或64位,適用于大塊數(shù)據(jù)的高性能傳輸,帶寬高。吞吐量最高,由于4個HP接口中PL都是做主機的,故創(chuàng)建一個master接口的AXI_DMA_RD讀模塊。主機首先在讀地址通道給出讀地址和控制信號,然后從機由讀數(shù)據(jù)通道返回讀出的數(shù)據(jù),如圖4所示。突發(fā)讀操作主機只給出一個地址,從該地址連續(xù)突發(fā)讀出數(shù)據(jù)。

圖4 突發(fā)讀操作過程
通過編輯IP保留模塊接口信息,將AXI_DMA_RD讀模塊突發(fā)長度M_AXI_LAST改為256,數(shù)據(jù)位寬設(shè)為64,從而提高AXI訪問DDR3的效率,將帶寬做到最大,通過AXI總線把DDR3的數(shù)據(jù)讀出來進入FIFO緩存。

圖5 AXI_DMA_RD讀模塊時序圖
具體設(shè)計時序如圖5所示,在PS端控制讀數(shù)據(jù)初始化脈沖TXN后,進入讀數(shù)據(jù)階段,使read_cycle_fl-ag拉高并一直保持。Read_cmd_flag開始發(fā)送讀地址給從機,從機反饋數(shù)據(jù)read_data_flag,數(shù)據(jù)接收完畢后產(chǎn)生一個flase結(jié)束信號。256個數(shù)據(jù)讀完之后讀結(jié)束rea-d_data_flag拉低,地址清零,每個像素點占4個字節(jié),則有結(jié)束地址READ_END_ADDR為8 294 400(1 920*1 080*4)。在read_cycle_flag一直保持高電平狀態(tài)下循化再讀。內(nèi)部生成位寬為64,深度為4 096的異步FIFO。為了保證FIFO內(nèi)部一直有數(shù)據(jù),在FIFO緩存接口添加count計數(shù)器,當(dāng)FIFO數(shù)據(jù)小于2 047就開始從DD-R讀數(shù)據(jù)。由于突發(fā)長度為256,故將地址遞增參數(shù)b-urst_size_bytes設(shè)為2 048(256*8)。最后通過添加例化RGB時序模塊,將讀模塊封裝成以RGB時序輸出的模塊,顯示模塊給內(nèi)部FIFO讀使能,當(dāng)FIFO內(nèi)數(shù)據(jù)量大于2 047時候讀使能信號拉高,將讀出數(shù)據(jù)緩存到F-IFO送給顯示器。
2.2.2 AXI_DMA_WD寫模塊
同理,在編輯AXI_DMA_WD寫模塊時例化一個位寬32,深8 192的FIFO。圖像采集模塊幀同步信號作為內(nèi)部FIFO寫使能,讀端口則設(shè)置為64位位寬,當(dāng)FIFO讀counter大于2 047時把W_axi_flag拉高開始寫數(shù)據(jù)。

圖6 寫傳輸過程
寫傳輸過程如圖6所示,它用到了寫地址、寫數(shù)據(jù)和寫響應(yīng)3個通道。主機在寫地址通道給出寫地址和控制信號,然后在寫數(shù)據(jù)通道連續(xù)突發(fā)寫4個數(shù)據(jù)。從機在接收數(shù)據(jù)之后,在寫響應(yīng)通道給出響應(yīng)信號。
2.2.3 讀寫傳輸測試
在VIVADO工具中創(chuàng)建一個BD文件,添加ZYN-Q7處理系統(tǒng)IP,通過配置ZYNQ7處理系統(tǒng)IP進行讀寫傳輸功能測試,引出一個GPIO接口作為AXI_DMA_RD讀模塊的啟動信號,在PS端設(shè)定一個TXN啟動脈沖信號,內(nèi)存基地址即訪問DDR3的起始地址設(shè)為0X01000_000。PS端通過C代碼模擬生成從1開始累加的測試數(shù)據(jù)寫入DDR3并讀出,PL端添加邏輯分析儀監(jiān)測IP 檢測,從而實現(xiàn)通過軟件觸發(fā)硬件運行,抓取片內(nèi)實時信號的自回環(huán)測試功能,如圖7所示。

圖7 邏輯分析儀抓取的實時信號
在SDK工具中添加Memory監(jiān)視器,可實時查看DDR內(nèi)存測試數(shù)據(jù)動態(tài),如圖8所示。結(jié)果表明,該模塊可實現(xiàn)預(yù)期功能。

圖8 DDR3中的實時數(shù)據(jù)
顯示終端采用帶有HDMI接口的設(shè)備,HDMI既高清晰度多媒體接口(high definition multimedia inter-face),是新一代的一種數(shù)字音視頻接口,較傳統(tǒng)的V-GA接口有數(shù)據(jù)傳輸帶寬高、色彩度高及傳輸速度快等顯著優(yōu)點。本設(shè)計僅使用 HDMI 接口顯示圖像,不傳輸音頻,因此只實現(xiàn) DVI 接口驅(qū)動邏輯完成圖像顯示功能。DVI 和 HDMI 接口協(xié)議在物理層都使用 TM-DS 標準傳輸音視頻數(shù)據(jù)。TMDS(transition minimized differential signaling)是一項使用差分信號高速數(shù)據(jù)傳輸技術(shù)[10]。
由于每個像素點的顏色深度為24位,即RGB每個顏色分量各占8位,通過添加一個 RGB2DVI 模塊,將 RGB888 格式的視頻圖像轉(zhuǎn)換成TMDS 數(shù)據(jù)輸出。每個通道上的顏色數(shù)據(jù)通過一個8B/10B的Encoder編碼器來轉(zhuǎn)換成一個10位的像素字符。10位的字符通過Serializer并串轉(zhuǎn)換器轉(zhuǎn)換成串行數(shù)據(jù),最后經(jīng)過信號輸出時的OBUFDS差分信號緩沖器由TMDS數(shù)據(jù)通道發(fā)送出去[11],OBUFDS模塊在 FPGA 內(nèi)通過添加例化原語實現(xiàn),將內(nèi)部邏輯信號轉(zhuǎn)換成差分信號輸出。上述過程的具體實現(xiàn)流程如圖9所示。

圖9 RGB2DVI 模塊框圖
需要注意的是,10∶1的并轉(zhuǎn)串過程所生成的串行數(shù)據(jù)速率是實際像素時鐘速率的10倍,實現(xiàn)的是10∶1的轉(zhuǎn)換率。整個系統(tǒng)需要兩個輸入時鐘,一個是視頻的像素時鐘 Pixel Clk(74.25 MHz),另外一個時鐘 Pixel Clk x5(371.25 MHz)的頻率是像素時鐘的5倍。在此頻率基礎(chǔ)上實現(xiàn)雙邊沿采樣,即在5倍時鐘頻率的基礎(chǔ)上又實現(xiàn)了雙倍數(shù)據(jù)速率。
在支持HDMI接口的1 080 p分辨率的顯示器上對高清顯示模塊進行測試,測試結(jié)果如圖10所示。測試過程中,系統(tǒng)內(nèi)部產(chǎn)生三基色、棋盤格圖像數(shù)據(jù)源,結(jié)果表明,顯示效果符合系統(tǒng)要求。

圖10 高清顯示模塊測試效果圖
對圖像預(yù)處理的算法常見的有中指濾波,均值濾波,高斯濾波,直方圖均衡化等[12]。在工業(yè)生產(chǎn)中,圖像的特征信息顯得尤為重要。工業(yè)電子顯微鏡單一的圖像顯示對焦,不能實時迅速地對其進行處理與特征提取。通過某種方式對圖像中的每一個像素點進行遍歷,判斷每個像素點是一個圖像特征,從而減少冗余信息,可直觀地評估圖像為后續(xù)提供有效信息。
邊緣檢測即可標識數(shù)字圖像中亮度變化明顯的點,大幅度地減少數(shù)據(jù)量,剔除不相關(guān)的信息,保留圖像重要的結(jié)構(gòu)屬性。在邊緣檢測算法中,Sobel邊緣檢測算子采用2個方向的3*3模板檢測水平和垂直方向的邊緣,如表1、2所示,其計算簡單、速度快,滿足實時性的要求。

表1 濾波模板

表2 濾波模板
將上述3*3濾波模板與圖像作平面卷積,即可分別求得橫向和縱向的亮度差分近似值。以A代表原始圖像,GX和GY分別代表經(jīng)橫向和縱向邊緣檢測的圖像灰度值[13],其卷積因子計算公式如下:
(1)
以f(x,y)表示圖像(x,y)點的灰度值,則有:
(2)
(3)
圖像的每一個像素點的橫向和縱向灰度值均通過以下公式來計算:
(4)
通過將數(shù)值與提前設(shè)定好的合理閾值比較來判定該點是否為邊緣信息點。
Xilinx推出的高層次綜合工具HLS中包含大量的視頻庫函數(shù),大部分圖像處理模塊函數(shù)和OpenCV庫函數(shù)一致。本文利用視頻處理庫中的sobel函數(shù),通過C++代碼綜合、仿真生成RTL電路,將其快速封裝生成IP核,在PL端對圖像處理算法進行硬件并行處理加速。
其具體開發(fā)流程中的關(guān)鍵語句如圖11所示。首先,將視頻流格式數(shù)據(jù)轉(zhuǎn)換成mat類型,mat類型的RGB888格式的彩色圖像再轉(zhuǎn)換成單通道的灰度圖像,用灰度數(shù)據(jù)與Sobel算子卷積;其次,將灰度數(shù)據(jù)轉(zhuǎn)換成3個通道的灰度圖像;最后,將mat類型的圖像數(shù)據(jù)轉(zhuǎn)換成視頻流格式輸出,完成處理功能。經(jīng)仿真、綜合完成后,將其打包生成IP核在PL中調(diào)用。在視頻處理功能和數(shù)據(jù)結(jié)構(gòu)方面,被綜合后的代碼與OpenCV基本對應(yīng),該方法極具靈活性、可擴展性,加快了圖形處理模塊設(shè)計的開發(fā)時間。顯著提高了設(shè)計效率。

圖11 基于HLS實現(xiàn)Sobel算子的設(shè)計流程
用Vivado工具的IP集成器將上述生成的IP核添加到系統(tǒng)Block Design中,對本設(shè)計進行最后的綜合、實現(xiàn)、并生成比特流文件。導(dǎo)出最新的硬件平臺即BSP板級支持包后啟動SDK開發(fā)平臺進行設(shè)計,利用C語言編程依次配置GPIO輸入輸出端口信息,設(shè)定系統(tǒng)初始化脈沖TXN。并通過SCCB協(xié)議配置攝像頭參數(shù)信息。在SDK中對其進行單步調(diào)試,直到程序進入while主循環(huán),周而復(fù)始地對DDR中起始地址0×1000000開始不斷進行讀寫操作,處理連續(xù)的完整圖像數(shù)據(jù)。
功能測試:采用兩種不同場景對系統(tǒng)平臺進行功能測試。
1)關(guān)閉圖像處理通道,顯示原始高清圖像,采用一支偶絲直徑為0.25 mm的高溫?zé)犭娕紝ο到y(tǒng)平臺的高清顯示功能進行測試,測試結(jié)果如圖12所示。結(jié)果表明,該系統(tǒng)可直接對焦熱電偶結(jié)點,清晰地顯示肉眼不方便觀察的偶結(jié)狀態(tài),對熱電偶頭部的損壞程度做出評估。

圖12 原始圖像高清顯示的測試結(jié)果
2)開啟圖像預(yù)處理硬件加速通道,采用帶有激光燒蝕痕跡和受電火花侵蝕而形成槽形缺陷的特殊板材奧氏體鋼對系統(tǒng)平臺的圖像實時處理功能進行測試。結(jié)果表明,通過調(diào)整檢測閾值,可有效辨別出激光燒蝕痕跡與板材裂縫,如圖13(c)中的小圓點為激光燒蝕痕跡,圖13(d)為調(diào)整閾值后板材裂縫缺陷的檢測效果,該結(jié)果可為板材的完好性評估提供有效參考價值。

圖13 圖像處理功能測試結(jié)果
性能測試:在兩種不同的平臺上對系統(tǒng)平臺的性能進行對比測試,即將在ARM處理器上通過軟件的方式直接調(diào)用由 OpenCV自帶函數(shù)處理的結(jié)果和在本系統(tǒng)硬件平臺上進行處理的結(jié)果進行速度比對。其性能比對效果如表3所示。

表3 軟硬件邊緣檢測耗時比較
對系統(tǒng)占用資源進行匯總,片內(nèi)資源使用情況如表4所示。

表4 片內(nèi)資源使用情況
通過資源占用比和檢測耗時比對結(jié)果可以看出, 軟硬件協(xié)同處理與純軟件處理相比,速度提高了6倍左右,且片內(nèi)資源使用合理,留有豐富剩余資源為后續(xù)開發(fā)提供支撐。可見本文提出的系統(tǒng)硬件平臺實時視頻圖像處理的實時性和實用性較好。
針對傳統(tǒng)處理器平臺對圖像數(shù)據(jù)采集與處理存在高時延與低吞吐量的問題,設(shè)計完成了集圖像高速采集、特征提取硬件加速、圖像實時高清顯示為一體系統(tǒng)平臺。系統(tǒng)充分結(jié)合FPGA與ARM的優(yōu)勢,減小了體積和功耗、降低了設(shè)計風(fēng)險。通過自定義IP核有效提升數(shù)據(jù)帶寬,并采用典型的圖像處理算法驗證了其高效可行性。硬件加速部分可以顯著降低圖像數(shù)據(jù)的處理耗時,使圖像處理原型驗證更具靈活性。系統(tǒng)平臺資源利用合理,易于擴展,可為邊緣終端數(shù)據(jù)處理加速和更復(fù)雜的圖像處理應(yīng)用系統(tǒng)提供可靈活配置的基礎(chǔ)平臺。系統(tǒng)可應(yīng)用于工業(yè)監(jiān)控探傷系統(tǒng)、民用多媒體系統(tǒng)以及醫(yī)學(xué)等領(lǐng)域。