基于視頻處理的DSP系統(tǒng)通用設(shè)計模式及其實現(xiàn)
目前,隨著視頻處理領(lǐng)域的不斷深入發(fā)展,作為其實現(xiàn)的主要平臺——DSP系統(tǒng)的設(shè)計成為了決定視頻處理算法是否能高速實時運行的首要因素。一個優(yōu)秀的DSP系統(tǒng)框架應(yīng)該至少具有功能的高效實施性和良好的軟硬件擴展性。本文介紹的這種基于視頻處理的DSP系統(tǒng)的框架正是以傳統(tǒng)的數(shù)字信號處理方式為基礎(chǔ),以高效性和擴展性為目標,并且能夠適應(yīng)大多數(shù)的器件而提出的在硬件上和在軟件上的解決方案。
可通用設(shè)計模式的思路
硬件結(jié)構(gòu)
傳統(tǒng)的數(shù)字信號處理過程是由“ADC + DSP + DAC”這種模式構(gòu)成的,其中并未具體的明確指出存儲器的如何使用以及ADC、DSP和DAC之間的數(shù)字邏輯電路關(guān)系如何,而這兩點正是實現(xiàn)高效實時系統(tǒng)的關(guān)鍵所在。
以視頻處理為背景,基于可通用設(shè)計模式的思路從硬件功能上將DSP系統(tǒng)按圖1中所示的模塊框圖設(shè)計。從圖中可以看到整個DSP系統(tǒng)被分為六大模塊:DSP模塊、ADC模塊、DAC模塊、存儲器模塊、數(shù)字邏輯電路模塊和其它模塊。其中,數(shù)字邏輯電路模塊起到了模塊間相互通信的中間“橋”作用,通常選用具有足夠的可編程引腳和內(nèi)部邏輯單元的CPLD或FPGA加上適當數(shù)目的開關(guān)器件來實現(xiàn);而存儲器模塊則由針對DSP模塊、ADC模塊和DAC模塊的三個獨立且結(jié)構(gòu)相同的子模塊組成。
由于各存儲器子模塊間的地址總線、數(shù)據(jù)總線和控制總線的相互獨立,通過數(shù)字邏輯電路模塊可以使ADC、DSP和DAC三個模塊在同一時刻擁有各自獨立的存儲空間從而為三者的并行無阻礙運行提供了有效的硬件保證。如圖2中所示,三個存儲器子模塊處于循環(huán)式的流水線工作狀態(tài),它們在系統(tǒng)中的地位等價;其中每個存儲器子模塊一般都以整幀圖像為存儲單位,故可簡稱為幀存。整個系統(tǒng)處于ADC、DSP和DAC三個模塊同步并行的工作方式,即DSP處理當前幀圖像的同時ADC正采集下一幀圖像而DAC正傳送上一幀圖像給顯示設(shè)備,這樣DSP只負責(zé)圖像的處理過程而不涉及圖像在存儲空間中的簡單搬移。
相應(yīng)的數(shù)字邏輯電路模塊按圖3中所示的互相關(guān)聯(lián)的各子模塊來設(shè)計。其中,操作控制子模塊用于實現(xiàn)DSP對ADC及DAC的控制(復(fù)位或下電ADC及DAC、選擇標準I2C或模擬I2C進行配置、同步三者的并行等)與DSP外部中斷的使能,并控制圖3中其它的子模塊;狀態(tài)計數(shù)子模塊用于產(chǎn)生四類狀態(tài):上電初始態(tài)和三類工作態(tài);ADC或DAC譯址及控制轉(zhuǎn)化子模塊用于產(chǎn)生ADC或DAC控制相應(yīng)存儲空間的邏輯;狀態(tài)切換控制子模塊則通過接收圖3中其它子模塊的信息來最終實現(xiàn)存儲空間與ADC、DSP及DAC的相互對應(yīng)。
當系統(tǒng)設(shè)計中不要求使用DAC或ADC時,圖4中示出了圖1中模塊互連部分與圖2的簡化;由此可以看出以上基于可通用設(shè)計模式的DSP系統(tǒng)框架簡化為了具有以乒乓式存取的雙存儲器子模塊的情況,故基于乒乓式存取的數(shù)據(jù)系統(tǒng)是其特例。此外,該框架可以實現(xiàn)多路ADC及多路DAC的并行工作,通常選用相應(yīng)數(shù)目的SDRAM作為存儲器子模塊來配合使用。
圖5中示出了一種使用雙乒乓式存儲器模塊的DSP系統(tǒng)主要部分,與圖1中模塊互連部分相比,此硬件結(jié)構(gòu)顯得冗余,實現(xiàn)上會使用較多的器件并使制板連線更為復(fù)雜,但性能上不會有所提升。圖6中示出了一種使用FPGA以實現(xiàn)FIFO功能為主的DSP系統(tǒng)主要部分,與圖1中模塊互連部分相比,此硬件結(jié)構(gòu)較為簡單,但圖像的采集和顯示要配合軟件上的協(xié)作予以實現(xiàn)從而增加了軟件開發(fā)的復(fù)雜性,此外由于該存儲器模塊的總線結(jié)構(gòu)單一至使總線復(fù)用從而在某些情況下降低了系統(tǒng)性能。
軟件構(gòu)架
TI推薦的RF5(Reference Framework Level 5)是基于DSP/BIOS和TMS320 DSP算法標準的一般性DSP軟件構(gòu)架要素的源代碼,用戶可以根據(jù)具體應(yīng)用在其基礎(chǔ)上搭建適合需求的自定義OS?;赗F5的軟件構(gòu)架設(shè)計大體分為三步:
1) 針對具體的硬件電路開發(fā)相應(yīng)的底層驅(qū)動,對于ADC和DAC來說主要是通過I2C總線對其進行配置;
2) 借助RF5來構(gòu)建不拘于底層電路的OS層代碼,并嵌入相應(yīng)的硬件驅(qū)動及標準的算法接口;
3) 按TMS320 DSP算法標準編制具體的視頻處理算法,并通過標準的接口定義將其集成到OS層代碼中。
其中,每一步的設(shè)計相對獨立,這樣在更改具體電路的情況下只需修改1),在變化算法功能的情況下只需修改3),而在擴充軟件整體應(yīng)用范圍的情況下只需修改2)。
RF5具有良好的擴展性及高集成度特性,支持動態(tài)對象的創(chuàng)建和基于任務(wù)的多線程,提供了可以自定義擴充的代碼要素和有效的跟蹤調(diào)試工具,通過其可實現(xiàn)下列三方面的結(jié)構(gòu)化設(shè)計從而明了OS層的數(shù)據(jù)流通路徑:
1) 數(shù)據(jù)處理方面。RF5提供了四種關(guān)于數(shù)據(jù)處理方面的要素:任務(wù)、通道、外包單元和算法接口。OS層由不同的多個任務(wù)組成,每個任務(wù)可以包含一系列的通道,而每個通道又可以包含一系列的外包單元,其中一個外包單元對應(yīng)一個算法接口的封裝;每個算法代碼都可以重復(fù)使用,通過調(diào)用不同的對象來實現(xiàn)一個算法的多個例程在不同通道中的使用。
2) 數(shù)據(jù)傳遞方面:
A. 任務(wù)級的數(shù)據(jù)傳遞,是基于旗語同步的。在任務(wù)與驅(qū)動之間通常采用DSP/BIOS中的SIO對象(針對音頻系統(tǒng))或GIO對象(針對視頻系統(tǒng))指明數(shù)據(jù)的位置來進行交互,而在多個任務(wù)之間則采用RF5提供的SCOM消息隊列機制通過識別不同的隊列名和指明相應(yīng)的數(shù)據(jù)位置來互傳信息。
B. 外包單元級的數(shù)據(jù)傳遞。每個外包單元都有其輸入列表和輸出列表,這些列表里存放了由RF5提供的ICC對象用于指明數(shù)據(jù)的位置,通過各列表中包含相同的ICC對象來實現(xiàn)各外包單元間的交互。此外,通過ICC對象可以完成任務(wù)級數(shù)據(jù)和外包單元級數(shù)據(jù)之間的交互。
3) 消息控制。對于信息少的控制消息可以采用DSP/BIOS中的郵箱機制通過搬移指令的內(nèi)容單向的在任務(wù)間傳遞指令,而對于信息多的控制消息則可以使用SCOM消息隊列機制通過識別不同的隊列名和指明相應(yīng)的數(shù)據(jù)位置在任務(wù)間傳遞指令。
圖7中示出了基于視頻處理與RF5的一般OS層構(gòu)架示意圖,可以通過增加任務(wù)來擴充其它如網(wǎng)絡(luò)傳輸、音頻處理等功能(需要相應(yīng)的硬件和底層驅(qū)動支持)。從圖中可以看到,以雙通道及每通道內(nèi)兩外包單元的情況為例,圖像數(shù)據(jù)從ADC出來后經(jīng)過輸入設(shè)備驅(qū)動存放在GIO對象所指的數(shù)據(jù)位置,任務(wù)tskCapture通過調(diào)用GIO對象對其所指的數(shù)據(jù)進行格式及大小等的簡單變換,再將結(jié)果數(shù)據(jù)存入SCOM消息指定的位置并通過SCOM隊列向任務(wù)tskProcess發(fā)送該消息;當任務(wù)tskProcess接收到該消息后,對其所指的數(shù)據(jù)按具體要求的算法進行處理,其中一個外包單元實現(xiàn)一個算法例程,一個通道則實現(xiàn)一路功能上已獨立且算法間先后關(guān)聯(lián)的算法組;當任務(wù)tskProcess處理數(shù)據(jù)完成后,將結(jié)果再次存入SCOM消息指定的位置并向任務(wù)tskDisplay發(fā)送消息;任務(wù)tskDisplay收到消息后會對所指數(shù)據(jù)做格式及大小等的簡單變換,以便通過GIO對象發(fā)送給輸出設(shè)備驅(qū)動從而在DAC后端顯示;任務(wù)tskControl通過接收主機端的控制消息來對任務(wù)tskProcess的處理過程進行控制。
基于本文上述討論的系統(tǒng)框架模型可通過圖7定制適合其硬件結(jié)構(gòu)的如圖8中所示的簡化的OS層構(gòu)架。與圖7中相比,圖8中只有算法的處理和控制兩個任務(wù)從而提高了DSP在算法處理上的效率,而ADC和DAC的配置則在系統(tǒng)上電后的初始化中完成,此后ADC和DAC不需要DSP的介入而通過CPLD/FPGA中的邏輯實現(xiàn)了圖像數(shù)據(jù)按要求的格式和大小在存儲器子模塊中的存放從而在某種程度上減輕了DSP的負擔(dān)。
設(shè)計思路的具體應(yīng)用
依照以上的思路實現(xiàn)整個系統(tǒng)的設(shè)計主要通過下列四步的完成:
1) 根據(jù)實際需要選擇適當?shù)钠骷?,完成整個系統(tǒng)硬件層次上的連接;
2) 針對具體情況定制系統(tǒng)中使用的可編程邏輯器件的內(nèi)部邏輯;
3) 編寫適合具體電路的程序代碼,實現(xiàn)整個系統(tǒng)軟件層次上的構(gòu)架;
4) 將指定的視頻處理算法嵌入在該構(gòu)架中。
按上述四步,選用TVP5150A(ADC)、SAA7105(DAC)、XC95288XL(CPLD)各一片和三片IS61LV2568L(SRAM)為主要器件,在數(shù)字信號處理仿真/教學(xué)實驗系統(tǒng)DES3200的二次開發(fā)接口上完成了基于可通用模式的DES3200圖像處理子卡II的設(shè)計,如圖9中左所示;并配合TMS320C6713B(DSP)子卡得到了CIF格式的視頻預(yù)處理的顯示結(jié)果,如圖9中右所示。進而,證明該通用設(shè)計模式是可行的。
參考文獻:
1. Reference Frameworks for eXpressDSP software: RF5, An Extensive, High-Density System, SPRA795A. Texas Instruments, April 2003.
2. TMS320 DSP/BIOS User's Guide, SPRU423E. Texas Instruments, March 2004.
3. TMS320C6713B Floating-Point Digital Signal Processor, SPRS294B. Texas Instruments, June 2006.
4. TVP5150APBS Ultralow Power NTSC/PAL/SECAM Video Decoder with Robust Sync Detector, SLES087. Texas Instruments, September 2003.
5. SAA7104H; SAA7105H Digital Video Encoder. Philips Semiconductors, March 2004.