任曉波,趙文龍,唐 盛,陳思平,
(1.南昌航空大學(xué) 測(cè)試與光電技術(shù)學(xué)院,江西 南昌 330063;2.南昌航空大學(xué) 信息工程學(xué)院,江西 南昌 330063)3.深圳大學(xué) 醫(yī)學(xué)院生物醫(yī)學(xué)工程系,廣東 深圳518060;
實(shí)時(shí)圖像處理、高速數(shù)據(jù)運(yùn)算處理要求其系統(tǒng)具有對(duì)數(shù)據(jù)處理速度快、數(shù)據(jù)吞吐率高以及多任務(wù)處理功能。目前大多數(shù)方案都是采用HPI數(shù)據(jù)傳輸方式,將ARM和DSP進(jìn)行組合完成一些圖像處理,DSP處理器只是完成圖像采集、壓縮、編碼等簡(jiǎn)單的處理[1]工作,不能滿足實(shí)時(shí)的智能識(shí)別或大數(shù)據(jù)量運(yùn)算的視頻處理要求。在應(yīng)用領(lǐng)域方面也會(huì)因其處理速度問題受到一定的限制。
例如,胎兒性別屏蔽項(xiàng)目中,要對(duì)實(shí)時(shí)視頻進(jìn)行性別部位的檢測(cè)和屏蔽,若采用單DSP則會(huì)出現(xiàn)漏幀或視頻不流暢;應(yīng)用于高速運(yùn)動(dòng)物體跟蹤時(shí),單DSP無法實(shí)現(xiàn)實(shí)時(shí)運(yùn)動(dòng)物體跟蹤,例如漢王科技的運(yùn)動(dòng)檢測(cè)和??低曔\(yùn)動(dòng)檢測(cè),都不能實(shí)時(shí)檢測(cè),即使檢測(cè)也會(huì)出現(xiàn)漏檢現(xiàn)象和視頻不流暢。當(dāng)處理4CIF或者更大圖像時(shí),單DSP的處理能力又會(huì)下降,雖然可以將圖像縮小進(jìn)行處理,但是縮小圖像則會(huì)丟失一些重要的圖像信息,使得智能識(shí)別準(zhǔn)確率下降。
針對(duì)上述情況,設(shè)計(jì)一種能夠?qū)崿F(xiàn)進(jìn)行快速信號(hào)處理和數(shù)據(jù)交換的實(shí)時(shí)圖像處理系統(tǒng)很有必要。
系統(tǒng)功能:利用S3C6410進(jìn)行數(shù)據(jù)整合、任務(wù)調(diào)度、人機(jī)交互;利用TMS320C6416進(jìn)行算法運(yùn)算;每個(gè)DSP與FPGA都是無縫連接。設(shè)計(jì)中利用FPGA實(shí)現(xiàn)的FIFO進(jìn)行與DSP之間的高速數(shù)據(jù)傳輸以及ARM對(duì)多個(gè)DSP的任務(wù)調(diào)度處理等。
系統(tǒng)結(jié)構(gòu)如圖1所示。系統(tǒng)由1個(gè)ARM11處理器S3C6410(主處理器)與 4個(gè) TMS320C6416(720 Hz)(從DSP)通過 FPGA(EP2C70~7)實(shí)現(xiàn)互聯(lián)的 ARM+多 DSP的嵌入式圖像處理系統(tǒng)。所有的DSP都通過外部存儲(chǔ)器接口(EMIF)與 FPGA無縫相連,每個(gè) DSP之間的數(shù)據(jù)傳輸是通過FPGA內(nèi)部互聯(lián)FIFO網(wǎng)絡(luò)實(shí)現(xiàn)。
圖1 系統(tǒng)結(jié)構(gòu)
圖2所示是一種互聯(lián)的FIFO網(wǎng)絡(luò)結(jié)構(gòu)和高速數(shù)據(jù)傳輸網(wǎng)絡(luò)結(jié)構(gòu)。主處理器通過DMA數(shù)據(jù)訪問模式與FPGA的雙口FIFO連接,從而實(shí)現(xiàn)與FPGA通過FIFO連接的所有從DSP進(jìn)行通信,所有FIFO都是雙向的,F(xiàn)IFO及其讀寫控制邏輯都在FPGA內(nèi)部實(shí)現(xiàn)。
FPGA中的FIFO讀寫狀態(tài)控制、各從DSP之間通信的同步握手信號(hào)、S3C6410處理器數(shù)據(jù)請(qǐng)求等邏輯信號(hào),都是由每個(gè)DSP的一部分GPIO口與EP2C70的I/O口連接實(shí)現(xiàn)。
圖2 一種高速數(shù)據(jù)傳輸網(wǎng)絡(luò)互聯(lián)結(jié)構(gòu)
系統(tǒng)結(jié)構(gòu)具有可重構(gòu)特性,在硬件平臺(tái)不變情況下,只需通過改變FPGA程序代碼就可以完全改變系統(tǒng)結(jié)構(gòu),以適應(yīng)不同的算法結(jié)構(gòu)。如圖2中屏蔽DSP1~DSP4之間的互相通信,即可組成主從并行的流水線結(jié)構(gòu);若需要串行的流水線結(jié)構(gòu),只需將DSP1~DSP4的其中一個(gè)與S3C6410通信即可;若需要設(shè)計(jì)更復(fù)雜的串并混合性結(jié)構(gòu),也只需改變FPGA的代碼就能夠很容易地實(shí)現(xiàn)。
S3C6410是三星公司的產(chǎn)品采用ARM1176JZF-S核,包含16 KB的指令數(shù)據(jù)Cache和 16 KB的指令數(shù) TCM;ARM Core電壓為1.1 V時(shí),可以在553 MHz下運(yùn)行。在1.2 V時(shí),可以在667 MHz下運(yùn)行。通過AXI、AHB和 APB組成的 64/32 bit內(nèi)部總線與外部模塊相連。SROM Controller:6個(gè)片選,支持SRAM、ROM和 NOR Flash以及支持 8/16 bit,每個(gè)片選支持128 MB。JPEG Codec:支持JPEG編解碼功能,最大尺寸為4 096×4 096。2D GRAPHICS:2D加速,支持畫點(diǎn)/線 ,bitblt功能和Color Expansion。 3D GRAPHICS:3D 加速。
S3C6410可支持4個(gè)DMA控制器,用于系統(tǒng)總線內(nèi)部或與外圍總線之間的數(shù)據(jù)交換,每個(gè)控制器包含8個(gè)通道,支持8/16/32 bit傳輸。現(xiàn)以外部DMA請(qǐng)求為例簡(jiǎn)要介紹DMA的工作過程。圖3所示為DMA基本工作時(shí)序。
圖3 DMA基本工作時(shí)序圖
當(dāng)需要進(jìn)行DMA操作時(shí),外部DMA請(qǐng)求引腳XnXDREQ置為低電平。此時(shí)DMA控制器向CPU發(fā)出占用總線的請(qǐng)求,當(dāng)總線請(qǐng)求成功后,XnXDACK引腳變?yōu)榈碗娖剑硎綜PU已經(jīng)將總線使用權(quán)交給DMA控制器,可以進(jìn)行數(shù)據(jù)傳輸。當(dāng)數(shù)據(jù)傳輸完成后,應(yīng)答信號(hào)XnXDACK置為高電平,通知CPU完成一次DMA操作。
S3C6410提供了三種不同的DMA操作模式:?jiǎn)畏?wù)命令模式、單服務(wù)握手模式和全服務(wù)握手模式。在利用DMA進(jìn)行數(shù)據(jù)傳輸前必須對(duì)其相關(guān)寄存器進(jìn)行設(shè)置,包括源地址寄存器、目的地址寄存器和各自的控制寄存器以及配置DMA模式的控制寄存器等。
采用FPGA實(shí)現(xiàn)多時(shí)鐘電路系統(tǒng)時(shí),需要處理不同的時(shí)鐘域之間速率匹配問題,可利用FPGA內(nèi)部生成的異步FIFO來處理。異步FIFO主要由雙端口RAM、寫地址產(chǎn)生模塊、讀地址產(chǎn)生模塊、滿空標(biāo)志產(chǎn)生模塊組成。雙端口RAM由FPGA的Block RAM塊構(gòu)成,FPGA采用Atera公司的EP2C70-896C7,其Block RAM讀寫時(shí)鐘頻率可以達(dá)到216.73 MHz,因此選用Block RAM作為存儲(chǔ)體,不僅速度快,而且設(shè)計(jì)簡(jiǎn)單。設(shè)計(jì)時(shí),一個(gè)端口配置成寫端口,另一端口配置成讀端口,然后把Block RAM的管腳與相對(duì)應(yīng)的控制信號(hào)相接即可。讀寫地址通過FPGA芯片內(nèi)部的二進(jìn)制進(jìn)位邏輯產(chǎn)生,以對(duì)應(yīng)Read_En/Write_En作為使能信號(hào)在讀/寫時(shí)鐘的控制下進(jìn)行計(jì)數(shù)。空或滿標(biāo)志可以由讀或?qū)懙刂返南鄬?duì)位置來獲得。本系統(tǒng)采用2個(gè)FIFO組成一路數(shù)據(jù)傳輸通道,雙向FIFO的設(shè)計(jì)圖如圖4所示。
根據(jù)DMA接口原理,設(shè)計(jì)S3C6410與FPGA之間的接口簡(jiǎn)圖如圖5所示。
讀時(shí)鐘由ARM的時(shí)鐘輸出引腳CLKOUT0提供。CLKOUT0根據(jù)S3C6410內(nèi)部寄存器的設(shè)置可以輸出不同的時(shí)鐘頻率。FIFO輸出數(shù)據(jù)經(jīng)過以nGCS4為選通信號(hào)的緩沖器 (Buffer)后接到S3C6410的數(shù)據(jù)總線上。nGCS4是S3C6410存儲(chǔ)空間中BNAK4的片選信號(hào),當(dāng)S3C6410對(duì)該信號(hào)對(duì)應(yīng)存儲(chǔ)空間進(jìn)行讀寫操作時(shí),BANK4為低電平,其余時(shí)間均為高電平。
FIFO的寫請(qǐng)求信號(hào)由S3C6410與FIFO的滿狀態(tài)共同控制。當(dāng)S3C6410發(fā)出START信號(hào)并且FIFO未滿時(shí),寫請(qǐng)求信號(hào)為高電平,FIFO在寫時(shí)鐘的控制下寫入數(shù)據(jù);當(dāng)START信號(hào)撤銷或者FIFO滿時(shí),寫請(qǐng)求信號(hào)變?yōu)榈碗娖剑V箤懖僮鳌?/p>
圖4 雙向FIFO設(shè)計(jì)圖
圖5 S3C6410與FPGA接口
FIFO的讀操作與S3C6410的DMA操作配合進(jìn)行。系統(tǒng)采用單服務(wù)命令模式的DMA操作,每次傳輸一個(gè)字節(jié)的數(shù)據(jù)。當(dāng)DREQ0信號(hào)變?yōu)榈碗娖綍r(shí),DMA操作開始,每次傳輸一個(gè)字節(jié)后產(chǎn)生一個(gè)DACK0應(yīng)答信號(hào),而且只要DREQ0為低電平DMA操作就繼續(xù)進(jìn)行,直到DMA控制寄存器中的計(jì)數(shù)器為0,產(chǎn)生DMA中斷。根據(jù)上述時(shí)序特點(diǎn),將FIFO的空信號(hào)作為DMA的請(qǐng)求信號(hào)DREQ0。當(dāng)CCD輸出的數(shù)據(jù)寫入FIFO中時(shí),空信號(hào)跳變?yōu)榈碗娖絾?dòng)DMA操作,同時(shí)以DACK0信號(hào)作為FIFO的讀請(qǐng)求。每次DMA傳輸完成后應(yīng)答信號(hào)使FIFO的讀指針移動(dòng)一位,以實(shí)現(xiàn)數(shù)據(jù)的快速準(zhǔn)確采集。
用可編程視頻輸入處理器SAA7113H進(jìn)行視頻信號(hào)處理。SAA7113H內(nèi)部集成了強(qiáng)大圖像色度、亮度處理功能以及多種輸出模式[3];有32個(gè)工作寄存器,在系統(tǒng)復(fù)位時(shí),必須通過I2C總線對(duì)其進(jìn)行初始化。本系統(tǒng)使用灰度圖像,沒有使用色度信號(hào),所以數(shù)據(jù)線為8 bit。SAA7113H與FPGA的接口如圖6所示。
在本系統(tǒng)中,F(xiàn)PGA內(nèi)部需要設(shè)計(jì)一邏輯時(shí)序完成圖像數(shù)據(jù)的采集,數(shù)據(jù)的傳輸采用異步FIFO完成。采用此方案可以解決CCD輸出數(shù)據(jù)頻率與從DSP和ARM不匹配的問題。
DSP(TMS320DM6416T)之間的通信都是通過外部存儲(chǔ)器接口(EMIFA)訪問片外存儲(chǔ)器進(jìn)行的。EMIFA由64 bit數(shù)據(jù)線D[63:0]、20 bit 地 址 線 A[22:03]、8 bit字節(jié)使能線 BE[7:0]、4 bit地址區(qū)域片選線/CE3~/CE0和各類存儲(chǔ)器的讀/寫控制信號(hào)組成。TMS320DM6416T的每個(gè)/CEx空間都有256 MB尋址空間,并且可配置為與SRAM、SDRAM、ZBTSRAM、Flash、FIFO等各類存儲(chǔ)器接口。EMIFA讀/寫各類存儲(chǔ)器的時(shí)鐘可由軟件配置為 EMIF的 AECLKIN、CPU/4或CPU/6。本設(shè)計(jì)配置為 EMIF的AECLKIN,且為 133 MHz。
圖6 SAA7113H與FPGA的接口
DSP之間通過EMIF口與FPGA實(shí)現(xiàn)的異步FIFO進(jìn)行通信。EMIF異步接口的每個(gè)讀/寫周期分為三個(gè)階段:建立時(shí)間(SETUP)、觸發(fā)時(shí)間(STROBE)、保持時(shí)間(HOLD),且每個(gè)階段時(shí)間可編程設(shè)置,以適應(yīng)不同的讀寫速度。DSP讀寫異步FIFO的時(shí)序圖分別如圖7、圖8所示[6]。DSP讀寫FIFO控制信號(hào)由FPGA產(chǎn)生,其邏輯關(guān)系如下:
寫 FIFO信號(hào):writ_clk=AECLKOUT
writ_req=!(/CE+/AWE)
讀 FIFO信號(hào):read_clk=AECLKOUT
read_req=!(/CE+/ARE)
另外,寫 FIFO的DSP要相應(yīng)為滿狀態(tài)標(biāo)志,讀FIFO的DSP則相應(yīng)為半滿狀態(tài)標(biāo)志。
為了設(shè)計(jì)一款通用性比較強(qiáng)的圖像處理平臺(tái),各處理器間的數(shù)據(jù)傳輸必需達(dá)到通用性,這樣可以針對(duì)不同系統(tǒng)的應(yīng)用,只須修改圖像處理算法代碼,而不須要修改各處理器之間的通信。具體設(shè)計(jì)分為如下兩部分:
(1)數(shù)據(jù)通信協(xié)議說明(x=0,1,2,3)
Se/Re(Send/Receive)[0]:ARM通過 FPGA請(qǐng)求 DSPx接收(該數(shù)據(jù)位為1)或發(fā)送。
ARM[1:3]:該段數(shù)據(jù)為DSPx向FPGA發(fā)出請(qǐng)求數(shù)的DSP編號(hào)。
DSPx[4:6]:ARM處理器向FPGA提出要求響應(yīng)的DSP的編號(hào)。
Da_Le(Data_Leng)[7:18]:ARM請(qǐng)求 DSPx接收或發(fā)送的數(shù)據(jù)長(zhǎng)度。
Da_Un(Data_Unit)[19]:該標(biāo)志位表示是否按照 Data_leng*K(1K=1 024 bit)的數(shù)據(jù)長(zhǎng)度傳輸數(shù)據(jù),若為 1,表示接收或發(fā)送數(shù)據(jù)長(zhǎng)度為Data_leng*K(1K=1024 bit);若為0,表示接收或發(fā)送數(shù)據(jù)長(zhǎng)度為Data_leng。
Da_Bl(Data_Block)[20:27]:該數(shù)據(jù)表示ARM請(qǐng)求DSPx接收或發(fā)送Data_Block個(gè)Data_leng K或Data_leng數(shù)據(jù)塊。
Da_Ch(Data_Result)[7:18]:ARM 請(qǐng)求 DSPx接收或發(fā)送的算法代碼中間運(yùn)行結(jié)果或最終結(jié)果,此數(shù)據(jù)段與Data_Leng共用。
In_Pr(Interrupt_Priority)[27:30]:設(shè)置 DSP的中斷優(yōu)先權(quán)。
Ot_Use(DSP_State)[31:34]:DSP狀態(tài)標(biāo)志信息。
Pa_Ch(Parity_Check)[35]:奇偶校驗(yàn)位。 設(shè) SUM,若為奇數(shù),則 Parity_Check=1;否則為 0。
Ot_Use(Other_Use)[36:47]:用戶自定義數(shù)據(jù)段。
(2)數(shù)據(jù)通信主要流程
首先,F(xiàn)PGA接收到ARM[1:3]處理器的請(qǐng)求信號(hào),然后根據(jù)Data[0:34]計(jì)算出校驗(yàn)數(shù)據(jù)SUM與Parity_Check[35]比較,若不等,則FPGA向ARM處理器重新發(fā)請(qǐng)求信號(hào);若相等、且 DSPx為空閑狀態(tài)時(shí),則FPGA由Send/Receive向DSPx發(fā)送接收或發(fā)送數(shù)據(jù)請(qǐng)求,并將采集到的圖像數(shù)據(jù)傳輸給DSPx,同時(shí)使能對(duì)應(yīng)的FIFO數(shù)據(jù)通道;DSPx根據(jù)收到的數(shù)據(jù)信息,同樣計(jì)算出校驗(yàn)數(shù)據(jù),若與Parity_Check相等,則根據(jù)Send/Receive標(biāo)志位,采用EDMA方式向EMIF口接收或發(fā)送Data_Block*Data_leng(或 Data_Block*Data_leng K)數(shù)據(jù)。 如果 FPGA同時(shí)接收到2個(gè)或2個(gè)以上的DSPx數(shù)據(jù)傳輸請(qǐng)求信號(hào),則FPGA根據(jù)Interrupt_Priority端口數(shù)據(jù)判其執(zhí)行的先后順序。
影響系統(tǒng)性能的主要因素有:ARM處理器協(xié)調(diào)工作的響應(yīng)速度、DSP處理數(shù)據(jù)的速度、數(shù)據(jù)在多處理器之間的傳輸速度。前兩個(gè)因素主要由處理的主頻和處理能力決定,因此不做測(cè)試。數(shù)據(jù)在處理器之間的傳輸速度則是本設(shè)計(jì)的主要部分之一,而數(shù)據(jù)傳輸帶寬和數(shù)據(jù)傳輸延遲是衡量數(shù)據(jù)傳輸速度的重要指標(biāo)。
表1 傳輸不同大小數(shù)據(jù)時(shí)測(cè)得的平均延遲時(shí)間值
若系統(tǒng)中DSP讀寫FIFO的帶寬為B(單位時(shí)間內(nèi)DSP間的數(shù)據(jù)傳輸量),則:
其中,f=133 MHz是 FPGA內(nèi)部軟FIFO的讀寫時(shí)鐘;w=32 bit是軟FIFO數(shù)據(jù)總線寬度。本設(shè)計(jì)配置Nsetup=Nstrobe=1,Nhold=0,因此 B的理論值為 266 Mb/s。 但 DSP間數(shù)據(jù)傳輸?shù)膶?shí)際帶寬主要受握手時(shí)間τhandshake、寫FIFO到半滿時(shí)間 τfifo_hf、響應(yīng)中斷啟動(dòng)讀寫操作時(shí)間 τgpio_interr、接收數(shù)據(jù)時(shí)間 τdata_receive四個(gè)延遲時(shí)間影響。其中,τhandshake、τgpio_interr由系統(tǒng)時(shí)鐘決定,因此本文假設(shè)該值為固定的,而τfifo_hf是由于使用FIFO緩存數(shù)據(jù)引入的額外時(shí)間。FIFO的深度越長(zhǎng),τfifo_hf越大,則實(shí)際帶寬 Bf就越小;反之則越大。
為了保證DSP間正確地?cái)?shù)據(jù)通信,則要求DSPx開始從FIFO讀取數(shù)據(jù)時(shí),ARM還沒有寫滿FIFO,即 τfifo_hf>τfgpio_interr。表示 FIFO 深度,可得
表1是ARM處理器分別與DSP1~DSP4傳輸不同大小數(shù)據(jù)時(shí)測(cè)得的平均延遲時(shí)間,圖9是根據(jù)測(cè)試數(shù)據(jù)繪出的實(shí)際帶寬Bf曲線??梢钥闯觯S著傳輸?shù)臄?shù)據(jù)增大,Bf逐漸逼近B的266 MB/s的理論值。
圖9 根據(jù)表2繪出的實(shí)際帶寬曲線
本文基于 ARM、FPGA、多DSP設(shè)計(jì)的實(shí)時(shí)圖像信號(hào)處理系統(tǒng),使用FPGA芯片設(shè)計(jì)的一種高速數(shù)據(jù)傳輸網(wǎng)絡(luò)互聯(lián)結(jié)構(gòu),使得該系統(tǒng)的數(shù)據(jù)通信能力和DSP的運(yùn)算能力能很好地匹配;通過數(shù)據(jù)傳輸控制總線,使得數(shù)據(jù)傳輸十分靈活;利用S3C6410對(duì)圖像數(shù)據(jù)傳輸?shù)恼{(diào)度,圖像數(shù)據(jù)處理任務(wù)的分配,圖像保存、顯示、網(wǎng)絡(luò)傳輸;利用4個(gè)TMS320C6416T對(duì)圖像做算法處理。經(jīng)測(cè)試,算法代碼在單DSP(TMS320C6416T 1 GHz)平臺(tái)下其處理時(shí)間小于0.2 s,而在本文平臺(tái)下其處理時(shí)間小于40 ms,可以滿足實(shí)時(shí)要求。另外,該系統(tǒng)可廣泛適用于其他圖像處理、電子對(duì)抗、雷達(dá)信號(hào)處理等各個(gè)領(lǐng)域。
[1]曹理發(fā).尹勇.劉恒輝,等.基于 ARM和 DSP的視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子器件,2009,32(1).
[2]Cyclonce Inc.Cyclone II device handbook.2005.
[3]龍?jiān)俅?,趙凱生,洪明堅(jiān),等.ARM系統(tǒng)中 DMA方式在數(shù)據(jù)采集中的應(yīng)用[J].國外電子元器件,2007(2).
[4]Texas Instruments Incorporated.TMS320C6414,TMS320C6415,TMS320C6416FIXED-Point digital signal processor,2007.
[5]李方慧,王飛,何佩琨.TMS320C6000系列 DSPs原理與應(yīng)用(第二版)[M].北京:電子工業(yè)出版社,2005.
[6]Texas Instruments Incorporated.TMS320C6000 EMIF to external FIFO interface.1999.
[7]周委,陳思平,趙文龍,等.基于 DSP EMIF口、FPGA設(shè)計(jì)并實(shí)現(xiàn)的多DSP嵌入式系統(tǒng)[J].電子技術(shù)應(yīng)用,2008,34(12):6-8.