基于DSP EMIF口及FPGA設(shè)計(jì)并實(shí)現(xiàn)多DSP嵌入式系統(tǒng)
實(shí)時(shí)圖像處理及高速數(shù)據(jù)運(yùn)算處理要求系統(tǒng)設(shè)計(jì)具有數(shù)據(jù)處理速度快、數(shù)據(jù)吞吐率高等特點(diǎn),并具有多任務(wù)處理功能。針對(duì)這些特點(diǎn),本文設(shè)計(jì)并實(shí)現(xiàn)了基于DSP EMIF接口及FPGA的8個(gè)DSP(7個(gè)TMS320C6416T、1 個(gè) TMS320DM642)通信的嵌入式系統(tǒng)。設(shè)計(jì)中利用TMS320DM642進(jìn)行數(shù)字視頻信號(hào)捕獲、顯示、保存以及圖像信號(hào)的預(yù)處理;利用TMS320C6416做算法運(yùn)算;且每個(gè)DSP與FPGA都是無縫連接。設(shè)計(jì)中利用了FPGA實(shí)現(xiàn)的軟FIFO進(jìn)行DSP之間的高速數(shù)據(jù)傳輸,以及多任務(wù)調(diào)度處理等。
另外,系統(tǒng)還提供一個(gè)高速數(shù)據(jù)通信接口,以使系統(tǒng)能夠方便地對(duì)外進(jìn)行高速數(shù)據(jù)傳輸。
1 設(shè)計(jì)的系統(tǒng)結(jié)構(gòu)
1.1 系統(tǒng)結(jié)構(gòu)
圖1所示為1個(gè)TMS320DM642(720MHz)與7個(gè)TMS320C6416T(1GHz)通過FPGA(EP2C70-7)實(shí)現(xiàn)互聯(lián)的多DSP系統(tǒng)結(jié)構(gòu)。所有的DSP通過EMIF(外部存儲(chǔ)器接口)和FPGA無縫相連,DSP之間的數(shù)據(jù)傳輸通過FPGA內(nèi)部互聯(lián)FIFO網(wǎng)絡(luò)和高速數(shù)據(jù)傳輸網(wǎng)絡(luò)實(shí)現(xiàn)。
圖2所示是一種互聯(lián)的FIFO網(wǎng)絡(luò)結(jié)構(gòu)和高速數(shù)據(jù)傳輸網(wǎng)絡(luò)結(jié)構(gòu)。DM642和所有的C6416T通過FIFO互相連接,所有FIFO都是雙向的,F(xiàn)IFO及其讀寫控制邏輯都在FPGA內(nèi)部實(shí)現(xiàn)。
每個(gè)DSP的一部分GPIO口也連接到EP2C70,可以作為FIFO讀寫狀態(tài)控制,以及各DSP之間通信前的同步握手信號(hào)等。
1.2 系統(tǒng)結(jié)構(gòu)的特點(diǎn)
系統(tǒng)結(jié)構(gòu)具有可重構(gòu)特性。在硬件平臺(tái)不變的情況下,只需通過改變FPGA程序代碼就可以完全改變系統(tǒng)結(jié)構(gòu),以適應(yīng)不同的算法結(jié)構(gòu)。若圖2中屏蔽DSP1至DSP7之間的相互通信,就組成主從并行的流水線結(jié)構(gòu);若需要串行的流水線結(jié)構(gòu),只需DSP1至DSP7的其中一個(gè)與DSP0通信即可。當(dāng)然,若想設(shè)計(jì)更復(fù)雜的串并混合性結(jié)構(gòu),也只需改變FPGA的代碼就能夠很容易的實(shí)現(xiàn)。
系統(tǒng)結(jié)構(gòu)具有一個(gè)對(duì)外高速通信接口。數(shù)據(jù)寬度64bit(雙向),接口最大時(shí)鐘200MHz(針對(duì)EP2C70-7),12根信號(hào)控制線(用戶按自己需要通過FPGA定義),一個(gè)輸出3.3V/1.5A電源。高速通信接口不僅使系統(tǒng)很方便與別的系統(tǒng)進(jìn)行高速數(shù)據(jù)傳輸,還可以使兩個(gè)本系統(tǒng)很簡(jiǎn)單地對(duì)接起來,構(gòu)成更強(qiáng)大的多DSP嵌入式系統(tǒng)結(jié)構(gòu)。
2 TMS320DM642與視頻A/D、視頻D/A接口
2.1 TMS320DM642主器件簡(jiǎn)介[1][2]
TMS320DM642是TI公司2002年推出專門用于多媒體處理的高性能DSP。內(nèi)部采用程序總線和數(shù)據(jù)總線分離的哈佛總線結(jié)構(gòu),使得取指令和執(zhí)行指令并行;工作時(shí)鐘高達(dá)720MHz,峰值處理能力為5760MIPS(百萬條指令每秒);內(nèi)部采用兩級(jí)CACHE;有三個(gè)獨(dú)立的可編程視頻接口、一個(gè)64bit EMIF接口、16個(gè)GPIO等豐富的外部接口;另外,DM642還擁有64個(gè)獨(dú)立的EDMA通道,使其具備很強(qiáng)的數(shù)據(jù)搬移能力。
2.2 接口實(shí)現(xiàn)[1-4]
TMS320DM642的三個(gè)獨(dú)立視頻接口都支持視頻捕獲/顯示模式,可直接與視頻編解碼芯片無縫連接。在捕獲模式下,器件捕獲速率可達(dá)80MHz;在顯示模式下,其顯示速率為110MHz。系統(tǒng)設(shè)計(jì)時(shí)將TMS320DM642的VP0接口配置為8bit/10bit或Y/C 16bit/20bit、YUV4:2:2捕獲模式,與視頻解碼芯片TVP5146連接;VP1接口配置為8bit、YUV4:2:2顯示模式,與視頻編碼芯片SAA7121連接。TMS320DM642與視頻編輯解碼芯片接口圖如圖3所示。
VP0配置為單通道視頻輸入,VP0CKL0作為輸入時(shí)鐘(Datainclk);VP0CTL0、VP0CTL1和VP1CTL0分別作為輸入視頻HS、VS、FID。
VP1配置為單通道視頻輸出,VP1CKL1作為視頻輸出時(shí)鐘(Dataoutclk),VP1CKL0作為輸入時(shí)鐘,VP1CTL0、VP1CTL1和VP1CTL2分別作為輸出視頻HS、VS、FID。
另外,DM642上集成I2C總線,其數(shù)據(jù)傳輸速率最高可達(dá)400kb/s,分別與編解碼芯片相連。設(shè)計(jì)時(shí)采用100kb/s數(shù)據(jù)傳輸速率對(duì)TVP5146和SAA7121的工作參數(shù)進(jìn)行配置。
3 基于DSP EMIFA與FPGA實(shí)現(xiàn)軟FIFO接口
3.1 DSP的EMIFA接口[1][2][5]
TMS320DM642和 TMS320C6416T都可以通過外部存儲(chǔ)器接口(EMIFA)訪問片外存儲(chǔ)器。EMIFA由64bit數(shù)據(jù)線D[63:0]、20bit地址線A[22:03]、8bit字節(jié)使能線BE[7:0]、4bit地址區(qū)域片選線和各類存儲(chǔ)器的讀/寫控制信號(hào)組成。
TMS320DM642和TMS320C6416T的每個(gè)/CEx空間都有256MB尋址空間,并且可配置為與SRAM、SDRAM、ZBTSRAM、Flash、FIFO等各類存儲(chǔ)器接口。
EMIFA讀/寫各類存儲(chǔ)器的時(shí)鐘可由軟件配置為EMIF的AECLKIN,或CPU/4、CPU/6。本設(shè)計(jì)配置為EMIF的AECLKIN,且為133MHz。
3.2 FPGA主器件及其實(shí)現(xiàn)FIFO[6]
FPGA采用Atera的CycloneII EP2C70-896C7。EP2C70具有68 416個(gè)邏輯單元(LE);嵌入250個(gè)RAM存儲(chǔ)塊,總?cè)萘?.152Mbit;150個(gè)專用18×18乘法器;4個(gè)鎖相環(huán)(PLL);最高工作頻率250MHz。
采用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)成,EP2C70-896C7的Block RAM讀寫時(shí)鐘頻率可以達(dá)到216.73MHz,因此選用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ù)??栈驖M標(biāo)志可以由讀或?qū)懙刂返南鄬?duì)位置來獲得。
3.3 EMIF與軟FIFO接口實(shí)現(xiàn)[7]
DSP之間通過EMIF口與FPGA實(shí)現(xiàn)的異步FIFO進(jìn)行通信。EMIF異步接口的每個(gè)讀/寫周期分為三個(gè)階段:SETUP(建立時(shí)間)、STROBE(觸發(fā)時(shí)間)、HOLD(保持時(shí)間)。每個(gè)階段時(shí)間可編程設(shè)置,以適應(yīng)不同的讀寫速度。圖4是DSP寫異步FIFO的時(shí)序圖[7]。圖5是DSP讀異步FIFO的時(shí)序圖[7]。DSP讀寫FIFO控制信號(hào)由FPGA產(chǎn)生,其邏輯關(guān)系如下:
讀FIFO信號(hào):rdclk=AECLKOUT
rdreq=!(/CE+/AARE)
寫FIFO信號(hào):wdclk= AECLKOUT
wdreq=!(/CE+/AAWE)
另外,寫FIFO的DSP要相應(yīng)滿狀態(tài)標(biāo)志,讀FIFO的DSP則相應(yīng)半滿狀態(tài)標(biāo)志。
4 系統(tǒng)的DSP間數(shù)據(jù)通信
不同的算法代碼在平臺(tái)上對(duì)應(yīng)不同的算法調(diào)度方法,但DSP之間數(shù)據(jù)通信分兩個(gè)步驟,一是數(shù)據(jù)通信協(xié)議,另一個(gè)是數(shù)據(jù)通信。數(shù)據(jù)通信協(xié)議格式如表1(x表示0、1、…7)。
Send/Receive:MDSPx通過FPGA請(qǐng)求DSPx接收(D0=1)或發(fā)送。
MDSPx:向FPGA發(fā)出請(qǐng)求的DSP。
DSPx:MDSPx向FPGA提出要求響應(yīng)的DSP。
Data_leng:MDSPx請(qǐng)求DSPx接收或發(fā)送的數(shù)據(jù)長(zhǎng)度。
Data_Unit:1表示接收或發(fā)送為Data_leng K(1K= 1024bit),0表示接收或發(fā)送Data_leng。
Data_Block:表示MDSPx請(qǐng)求DSPx接收或發(fā)送Data_Block個(gè)Data_leng K或Data_leng。
Data _Character:MDSPx請(qǐng)求DSPx接收或發(fā)送的算法代碼中間運(yùn)行結(jié)果或最終結(jié)果。
Interr_Priority:中斷優(yōu)先權(quán)。
Odd_Check:奇偶校驗(yàn)位。
設(shè)SUM,若為奇數(shù),則Odd_Check=1,否則為0。
Over_Lable:結(jié)束標(biāo)志位,用戶可自己定義。
數(shù)據(jù)通信的實(shí)現(xiàn)過程:若FPGA接收到MDSPx發(fā)來的請(qǐng)求信號(hào),先根據(jù)D[0:37]計(jì)算出校驗(yàn)數(shù)據(jù),然后與Odd_Check比較。若不等,F(xiàn)PGA向MDSPx發(fā)出重發(fā)請(qǐng)求信號(hào)的請(qǐng)求;若相等,且DSPx空閑時(shí),F(xiàn)PGA再由Send/Receive通知DSPx接收或發(fā)送數(shù)據(jù),并將接收到的數(shù)據(jù)傳輸給DSPx,同時(shí)使對(duì)應(yīng)的FIFO數(shù)據(jù)通道使能。DSPx根據(jù)收到的數(shù)據(jù)信息,同樣計(jì)算出校驗(yàn)數(shù)據(jù),若與Odd_Check相等,則根據(jù)Send/Receive標(biāo)志位,采用EDMA方式向EMIF口接收或發(fā)送Data_Block*Data_leng(或Data_Block*Data_leng K)數(shù)據(jù)。
如果FPGA同時(shí)接收到兩個(gè)或兩個(gè)以上的MDSPx發(fā)來的請(qǐng)求信號(hào),還要由Interr_Priority判其執(zhí)行的先后。
5 系統(tǒng)的性能分析
多DSP嵌入式處理系統(tǒng)中,DSP間的數(shù)據(jù)通信性能是影響系統(tǒng)性能的重要因素,而數(shù)據(jù)通信帶寬和數(shù)據(jù)傳輸延遲是衡量數(shù)據(jù)通信性能的主要指標(biāo)。
若系統(tǒng)中DSP讀寫FIFO的帶寬為B(單位時(shí)間內(nèi)DSP間的數(shù)據(jù)通信量),則:
其中,f是DSP讀寫FIFO的時(shí)鐘,w是FIFO數(shù)據(jù)總線寬度。本設(shè)計(jì)配置Nsetup=Nstrobe=1,Nhold=0,w=32 bit,f=133MHz,因此B理論值266MB/s。
但DSP間數(shù)據(jù)通信的實(shí)際帶寬Bf主要受握手時(shí)間τhandshake、寫FIFO到半滿時(shí)間τfifo_hf、響應(yīng)GPIO口中斷啟動(dòng)讀操作時(shí)間τgpio_int err、接收數(shù)據(jù)時(shí)間τdata_receive四個(gè)延遲時(shí)間影響。其中τhandshake、τgpio_int err、τdata_receive是傳輸數(shù)據(jù)必需的固定時(shí)間,而τfifo_hf是由于使用FIFO緩存數(shù)據(jù)引入的額外時(shí)間。顯然,F(xiàn)IFO的深度越長(zhǎng),τfifo_hf越大,額外時(shí)間就越長(zhǎng),則實(shí)際帶寬Bf就越小,反之則越大。
為了保證DSP間正確的數(shù)據(jù)通信,要求DSPx開始從FIFO讀取數(shù)據(jù)時(shí),MDSPx還沒有寫滿FIFO,即:
表2是DSP0分別與DSP1~DSP7傳輸不同大小數(shù)據(jù)時(shí)測(cè)得的平均延遲時(shí)間。圖6是根據(jù)測(cè)試數(shù)據(jù)繪出的實(shí)際帶寬Bf曲線??梢钥闯?,隨著傳輸?shù)臄?shù)據(jù)增大,Bf逐漸逼近B。因此,利用FPGA實(shí)現(xiàn)多DSP間的互相數(shù)據(jù)通信,既獲得了較大的持續(xù)帶寬,又降低了數(shù)據(jù)傳輸延遲。
本文設(shè)計(jì)的多DSP嵌入式系統(tǒng)可重構(gòu)性靈活,實(shí)現(xiàn)容易,性能穩(wěn)定,數(shù)據(jù)吞吐量大,處理數(shù)據(jù)能力強(qiáng)。該嵌入式系統(tǒng)已經(jīng)成功應(yīng)用到某公司的超聲圖像智能識(shí)別產(chǎn)品中。該產(chǎn)品利用系統(tǒng)中TMS320DM642對(duì)B超圖像進(jìn)行采集、保存、圖像預(yù)處理、顯示;利用7個(gè)TMS320C6416T對(duì)超聲圖像做相關(guān)算法處理。經(jīng)測(cè)試,算法代碼在單DSP(DM642 720MHz)平臺(tái)處理時(shí)間小于0.4s,而在此平臺(tái)處理時(shí)間小于40ms,滿足實(shí)時(shí)要求。
另外,該系統(tǒng)還可以廣泛適用于圖像處理、電子對(duì)抗、雷達(dá)信號(hào)處理等各個(gè)領(lǐng)域。
評(píng)論