李桂菊
(中國科學院長春光學精密機械與物理研究所,吉林長春130033)
美國TI公司推出的TMS320C6000系列數字信號處理器在運算單元、總線結構,片內存儲器結構和流水處理等方面都有其獨特之處。該系列主要包括 62XX、64XX和 67XX 3大類,其中的64XX基于特殊的硬件結構和高速處理能力,在通信、精確制導武器和數字圖像處理等需要高速運算的應用領域具有強大的優勢,已成為實時圖像處理系統的首選器件[1~6]。
DSP硬件結構的特殊性使其處理能力的提升不僅僅依靠越來越快的時鐘速率來實現,更主要依靠開發者對數據流程的合理安排及并行處理結構的充分利用[7-11]。文獻[11]在 TMS320DM642 DSP平臺上實現了H264視頻編碼器,并對二級緩存優化做了深入探討,但由于H264標準是以算法的復雜性換取壓縮質量,所以盡管做了大量優化,還只是達到了QCIF和CIF尺寸的視頻基本可以滿足視頻監控的要求。文獻[12]提出了一種支持同時多線程的動態分發超長指令字(VLIW)數字信號處理器(DSP)架構,它雖然能提高處理器的指令吞吐率,但實現調度過于復雜。本文以MPEG-4視頻序列編碼標準[13]的圖像壓縮算法為例,論述了利用DSP底層結構提高圖像處理實時性的一些方法。
TMS320C64XX系列是面向數字信號處理的定點芯片,該芯片的內部結構是在TMS320C62XX基礎上加以改進的,其性能特點如下[14]:
(1)DSP內核采用超長指令字(VLIW)體系;
(2)CPU內核有兩組共8個可并行運算的單元,64個32 bit的通用寄存器;
(3)支持8/16/32/64 bit的數據類型,兩個乘法累加單元一個時鐘周期可同時執行4組16 bit×16 bit乘法或8組8 bit×8 bit乘法;
(4)采用兩級高速緩存結構;
(5)64個通道的EDMA。
TMS320C64XX芯片采用了兩級高速緩存結構。一級緩存L1cache包含了數據緩存L1D和程序緩存L1P兩部分,而二級緩存L2cache則是數據、程序共用的,可以通過寄存器配置。L2全部為SRAM,作為片內存儲器,也可配置其中的一部分為cache。CPU執行程序時,先訪問一級緩存內的程序代碼和數據,若代碼或數據不在一級緩存內,再訪問L2,若L2中沒有所需代碼,就要訪問外部存儲器,由于一級緩存、二級緩存和片外存儲器訪問速度差異很大,所以合理利用二級緩存結構,可以提高編碼器的運行速度。
TMS320C64XX系列不同芯片的內存容量相差較大,采用不同芯片針對二級緩存的優化方法不同。以TMS320C6416為例,片內包括16 KB程序 cache(L1P)、16 KB數據 cache(L1D)和1 024 KB的統一程序/數據空間(L2)。
(1)針對L1的優化
由L1P的工作原理可知,L1P首先一次性讀入512組連續的代碼指令,CPU發出的32位取指地址被解析,以確定在L1P中的地址,然后讀入該地址指令送入CPU中執行。若CPU發出的取指地址不在L1P內,就要清除L1P中的無用代碼,重新從L2讀入一組連續代碼。若程序跳轉間隔較大,或循環體內代碼過長,都會降低L1P的命中率。L1P的優化就是將連續的運算過程放在一起,減少循環體內的代碼長度,盡量用條件語句代替分支轉移語句。例如MPEG-4每個宏塊的編碼過程都是DCT變換、量化、逆量化和逆DCT變換,編碼時將DCT變換和量化放在一個循環體內,逆量化和逆DCT變換放在一個循環體內。這樣既可以減少圖像的存取次數,又可以避免循環體過長。合并后的代碼會一次性映射入L1P內進行宏塊運算,減少了L1P讀缺失,提高了編碼效率。
L1D的工作原理與L1P類似,如果CPU所需的數據不全在L1D中,就需要不斷地從L2或從外部存儲器讀入。L1D的優化就是將當前CPU所需要讀取的有用數據放在一起,而且這些數據應該按照cache line大小進行對齊,這樣可以使L1D cache的使用效率達到最大。
(2)針對L2的優化
由于TMS320C6416芯片的L2可以配置為片內SRAM,也可以配置為高速緩存,針對MPEG-4編碼器,由于其程序代碼和所要處理的數據量都較大,不可能將所有的代碼和數據都放入片內。要使程序代碼在片內外之間傳送而不影響程序的執行效率很難實現,而傳輸數據則可通過優化存儲器結構而不影響CPU執行時間。所以針對L2的優化優先保障程序代碼都放在片內,然后放置每個宏塊編碼所必需的數據,余下的空間配置為cache,按此原則,將L2在SRAM/CACHE的配置比例設為960 Kbyte/64 Kbyte。
為了能將使用頻率高的代碼和數據盡量留在cache中,就要將連續的運算過程或連續存取的數據放在一起,對代碼結構和數據結構重新組織,這時利用段的設置來指定部分程序和數據的位置是很必要的。TI的代碼產生工具生成的目標文件是以段的形式組織在一起的,這些段包括編譯器自動產生的代碼段(.text)、全局變量段(.bss)、堆棧段(.stack)等,用戶也可以自己定義段,段的地址可由*.cmd文件指定。由于MPEG-4的初始數據表較多,如DCT系數表、可變長編碼表等,可用靜態數組來定義這些表格,并把這些數組以段的形式安排在固定空間,把可能連續調用的數據放在一起。
為進一步提高CACHE命中率,還應盡量減小代碼尺寸,不同類型變量在DSP內部存放機制不同,char型是單字節變量,不受位置限制,short型是雙字節變量,以2的整數倍為邊界存放,int是4字節變量,以4的整數倍為邊界存放。為此對較大數組考慮能否用short型代替int型,變量定義時應將同類型變量放在一起,以減小代碼尺寸。
TMS320C64XX的數據存儲空間從內到外依次為CPU內部寄存器、一級緩存L1D、二級緩存L2、片外存儲空間4個層次。各層次數據傳遞流程如圖1所示。在L2與外部存儲器之間數據傳送由EDMA完成,而在CPU與L2之間可由CPU控制存取,而L2內部的數據傳送既可由EDMA完成,也可由CPU完成。

圖1 DSP存儲空間數據傳遞流程Fig.1 Flowchart of DSP data transmission between memories

圖2 256 pixel×256 pixel大小的圖像存儲方式示意圖Fig.2 Schematic diagram of storage way for image with size of 256 pixel×256 pixel
TMS3206416D的EDMA控制器共有64個增強通道,并且可以設置不同通道的優先級。EDMA控制器用來處理片內L2SRAM和片內外設以及外部存儲空間之間的數據搬移。
針對所設計的壓縮平臺,外接SDRAM經過FPGA掛在DSP的EMIF總線上,SDRAM的訪問方式設置成FIFO形式,對給定的起始地址,一次最少存取64 bit,每次啟動EDMA之后只能從給定的存儲器首址順序搬移一段數據。MPEG-4編碼器以宏塊為單位進行編碼,每個宏塊大小為16 pixel×16 pixel,這樣EDMA就很難按宏塊存取,為了在該硬件平臺中發揮EDMA的作用,重新安排參考圖像的存儲結構,存放格式如圖2所示,圖2(a)為256 pixel×256 pixel大小的圖像正常存放方式示意圖,圖2(b)為按宏塊順序存放示意圖。存放順序為第一個宏塊的第一行,第一個宏塊的第二行,…,第一個宏塊的第16行,然后存第二個宏塊的第一行,第二個宏塊的第二行,以此類推。這樣參考圖像可以按宏塊讀入,進行宏塊編碼時,在片內開辟乒乓結構的雙緩沖區。一個用于接收待編碼的數據并輸出編碼后的重構圖像數據,另一個用于對已接收的數據進行編碼,而數據的傳送采用EDMA完成。這樣,可以同時完成數據編碼和傳輸工作,有效地改善編碼效率。
編碼I幀時,當前圖像由于不能按宏塊讀取,將圖像分成n條,每條16行,即一個宏塊的高度,每條開始時讀入該條圖像到內存,編碼每個宏塊時,用EDMA搬移一個宏塊到乒乓緩沖區,一行所有宏塊編碼完,再讀下一條16行圖像。由于不需要運動估計,所以每個緩沖區只需分配當前圖像和重構兩個宏塊區域。
編碼P幀時,當前圖像仍然按條讀入,編碼每個宏塊時,用EDMA搬移一個宏塊到乒乓緩沖區。設搜索范圍為[-15,16],包括搜索范圍在內的參考圖像大小為48 pixel×48 pixel,即9個宏塊。因此每個緩沖區的大小包括:48 pixel×48 pixel大小的參考圖像、16 pixel×16 pixel大小的當前圖像及16 pixel×16 pixel大小的重構圖像。由于片內搬移比片外到片內搬移快,每個宏塊編碼傳輸啟動5個讀通道的EDMA:1個通道搬移運算緩沖區參考圖像后32列×48行到傳送緩沖區參考圖像的前32列;3個通道EDMA從外部存儲器參考圖像區讀一個宏塊放到內存數據傳輸區后16列;另一個通道搬移當前圖像宏塊。每個宏塊還啟動一個寫EDMA,將重構圖像寫到外部存儲器中。這6個EDMA通道級聯,每個宏塊編碼前設置一次,EDMA會將所需的圖像數據導入數據傳輸緩存區,同時,CPU編碼另一個緩沖區中的數據。由于CPU和EDMA都要訪問數據緩沖區中參考圖像區,設置CPU的優先級高于EDMA。宏塊編碼結束時兩個區域指針交換,兩個緩沖區交替使用來提高CPU效率。乒乓緩沖區的操作過程如圖3所示。

圖3 乒乓操作過程示意圖Fig.3 Scheme of Ping-Pang operation process
直接移植到DSP上的MPEG-4視頻編碼器遠遠不能達到實時的要求,因此還需要結合TMS320C64XX的特點進行優化。程序框架和主函數采用C語言編寫,可增加程序的易讀性,一些初值的設置編譯器也能自動幫助完成,既準確又不耗時。而對耗時較多的模塊采用匯編優化,在數據安排上要考慮二級緩存特性。編碼的計算量主要集中在運動估計、離散余弦變換、量化、反量化、逆離散余弦變換和可變長編碼幾個模塊,需要利用匯編語言進行優化,同時要考慮DSP特性。
TMS320C64XX芯片內核具有超長指令VLIW字處理能力。每次讀取與256 bit程序總線寬度對應的取址包,即每個取址包有8條指令,分成1~8個執行包,每個執行包是并行執行的指令,送入相應運算單元。指令以取址、譯碼和執行的硬件流水線運行。CPU內部的8個運算單元分為兩組,分別為(M1、D1、S1、L1和 M2、D2、S2、L2),在一個時鐘周期內8個單元可以同時運行,但8個單元所完成的功能不盡相同,M單元的指令與其它單元不通用,只運行乘法、點積、位計數等指令。除M單元指令外,有些指令只能在某一特定的運算單元執行,如跳轉指令只能在S單元運行,存儲器訪問指令只能在D單元運行等,但也有部分指令在D,S和L中都能運行。
在用匯編優化程序時,除按一般編寫步驟(將C源代碼翻譯成線性匯編代碼,確定最小迭代間隔,資源分配,安排模迭代間隔和安排剩余指令)之外,還要考慮運算單元與指令之間的對應關系,改寫代碼。
下面以幾個實例來介紹提高匯編程序效率的技巧。
(a)修改指令,盡量利用M單元
由于M單元的特殊性,如果算法不涉及乘法運算,就不能用到M單元,這樣8個可并行工作的運算單元,一次最多能并行執行6條指令,處理能力會降低25%。為提高運算效率,應修改指令,盡量利用M單元。例如,計算4個8位像素和,可改寫為點積方式:

另外,還可用M單元作為循環初始條件的判據。例如從存儲器讀出數據經過計算后,將處理結果存回到存儲器幀中,由于讀指令的延時間隙不為0,開始幾次循環,結果還沒計算出來,此時不應存數據,實現該功能一般是設一個初值為2的寄存器,每個循環減1,當為0時,存結果,但這樣會增加DSL單元的壓力。此時可以利用寄存器賦初值為0XFFFF8000,每個循環乘2(用低16位的乘法指令MPY實現)為0時,存數。

其中前兩條指令在進入循環體之前執行。
(b)訪問存儲器盡量使用半字或字訪問字節型數據
由于DSP單元都是32 bit寬,許多指令也支持高低半字或4個字節分別操作,當對8 bit的短數據或16 bit半字進行操作時,可以字為單位同時讀取,然后再用內部函數對數據進行運算。即使不能直接使用支持高低半字或4個字節的指令,也可用其它指令將字按字節或半字分別存入寄存器組中。這樣可以減少訪問數據存儲區的次數,降低D單元的壓力,相應地提高程序的運行速度。
(c)利用C64新增加的一個單元同時做4個8 bit或2個16 bit算術運算
C64XX增加了對打包數據的處理[15],可在一條指令內對2個16 bit或4個8 bit的數據進行運算。例如在運動估計中要計算兩個塊(8×8)的絕對差之和。如下代碼一次計算8個點。從上面幾個例子中可以看出,在匯編優化時,通過改寫代碼,合理利用指令,平衡各單元利用率,可進一步提高CPU效率。

在TMS320C6416硬件平臺上對MPEG-4視頻標準編碼器進行移植和優化,DSP的時鐘頻率為800 MHz,輸入圖像為 512 pixel×512 pixel的灰度圖像,SDRAM大小為32 Mbyte,分成32個1 Mbyte的塊,每塊可存一幅圖像,分別存儲輸入圖像、參考圖像及重構圖像,FPGA有一個精度為1 μs的計數器,其值可由軟件清零、讀入,用以記錄每幀的編碼時間,并可隨碼流輸出。對圖4所示的室內景物運動序列進行壓縮實驗,截取其中的40 frame,1 個I frame,39 個 P frame,壓縮信噪比為33.09,輸出碼率為1.5 Mbit/s。平均壓縮時間為30.3 ms,沒有丟幀現象,可以滿足實時編碼的要求。

圖4 實時采集的圖像序列(壓縮后圖像)Fig.4 Real-time images(after compression)
占用的內存空間進行優化;利用EDMA級聯特性在內存開辟雙緩沖區,同時完成視頻數據編碼和傳輸的工作,有效地改善了編碼效率,使該平臺具有較高的數據吞吐能力和處理速度。實驗結果表明:該編碼器可以對 512 pixel×512 pixel,30 frame/s的視頻圖像進行實時編碼,并已應用在實際工程中。
本文在TMS320C6416平臺上對MPEG-4視頻編碼器進行了優化,包括對8個運算單元能并行執行的特性進行匯編優化;根據DSP芯片兩級高速緩存的工作特點,對編碼器中代碼和數據所
[1]許廷發,趙思宏,周生兵,等.DSP并行系統的并行粒子群優化目標跟蹤[J].光學 精密工程,2009,17(9):2236-2240.XU T F,ZHAO S H,ZHOU SH B,et al..Particle swarm optimizer tracking based on DSP parallel system[J].Opt.Precision Eng.,2009,19(9):2236-2240.(in Chinese)
[2]李玉文,周家銳,沈琳琳.基于DM6446平臺的實時人眼檢測系統[J].深圳大學學報理工版,2009,26(10):420-424.LI Y W,ZHOU J R,SHEN L L.Real time eye detection system based on DM 6446[J].J.Shenzhen University Sci.Eng.,2009,26(10):420-424.(in Chinese)
[3]安博文,潘勝達.基于FPGA+DSP的超分辨率成像系統設計紅外技術[J].紅外技術,2010,32(9):523-526.AN B W,PAN SH D.Design of super-resolution imaging system based on FPGA+DSP[J].Infrared Technol.,2010,32(9):523-526.(in Chinese)
[4]李勝勇,姜濤,朱強華.紅外序列圖像中小目標實時檢測系統設計與實現[J].紅外技術,2010,32(8):471-474.LI SH Y,JIANG T,ZHU Q H.Design and implement a real-time system for small target detection in infrared image sequence[J].Infrared Technol.,2010,32(8):471-474.(in Chinese)
[5]楊明極,曾稹.基于DSP的WAP實時圖像瀏覽平臺的研究[J].哈爾濱理工大學學報,2010,15(10):45-48.YANG M J,ZENG ZH.Research of WAP real-time image browsing piatform based on DSP[J].J.Harbin University of Science and Technol.,2010,15(10):45-48.(in Chinese)
[6]賈浩,崔慧娟,唐昆.基于TMS320DM6437平臺的視頻系統設計與實現術[J].電視技術,2010,34(11):43-47.JIA H,CUI H J,TANG K.Design and implementation of video system based on TMS320DM 6437 platform[J].Video Eng.,2010,34(11):43-47.(in Chinese)
[7]宋立鋒,戴青云.分數像素精度運動估計的DSP優化方法[J].通信學報,2009,30(6):114-119.SONG L F,DAI Q Y.Technique of DSP optimization on fractional-pixel-accurary motion estimation[J].Communication J.,2009,30(6):114-119.(in Chinese)
[8]趙峰,袁東風,張海霞,等.多DSP圖像壓縮實時并行處理系統[J].光學 精密工程,2007,15(9):1451-1455.ZHAO F,YUAN D F,ZHANG H X,et al..Multi-DSP real-time parallel processing system for image compression[J].Opt.Precision Eng.,2007,15(9):1451-1455.(in Chinese)
[9]周雅贇,徐元欣,方健,等.基于TMS320DM642的MPEG-4編碼器設計和優化[J].電視技術,2005,29(6):36-38.ZHOU Y Y,XU Y X,FANG J,et al..Implementation of mpeg-4 video encoder based on TMS320DM642[J].Video Eng.,2005,29(6):36-38.(in Chinese)
[10]曾明霞.基于DSP的MPEG-4視頻編碼器研究與實現[D].南京:南京理工大學,2007.ZENG M X.Research and implementation of MFEG-4 video coder based on the the DSP[D].Nanjing:Nanjing University Science and Technology,2007.(in Chinese)
[11]劉剛.H.264視頻編碼器在DSP上的實現與優化[D].長春:中國科學院長春光學精密機械與物理研究所,2010.LIU G.Implementation and optimization of H.264 video encoder based on DSP[D].Changchun:Changchun Institute of Optics,Fine Mechanics and Physics,Chinese Academy of Sciences,2010.(in Chinese)
[12]沈鉦,孫義和.一種支持同時多線程的VLIW DSP架構[J].電子學報,2010,38(2):352-358.SHEN ZH,SUN Y H.Architecture design of simultaneous multithreading VLIW DSP[J].Electronic J.,2010,38(2):352-358.(in Chinese)
[13]鐘玉琢,王琪,賀玉文.基于對象的多媒體數據壓縮編碼國際標準—MPEG-4及其校驗模型[M].北京:科學出版社,2000.ZHONG Y ZH,WANG Q,HE Y W.Based on Video Object Multimedia Data Compress Encode International Standard-MPEG-4and Video Verification Model[M].Beijing:Science Press,2000.(in Chinese)
[14]李方慧,王飛,何佩琨.TMS320C6000系列DSPs原理與應用[M].2版.北京:電子工業出版社,2003.LI F H,WANG F,HE P K.DSPs Principle and Applying of TMS320C6000[M].2nd ed.Beijing:Electronics Industry Press,2003.(in Chinese)
[15]TMS320C64x/c64x+DSP CPU and Instruction set reference guide[G].Dallas:Texas Instruments Incorporated,2005.