在嵌入式并行DSP上實現(xiàn)MPEG-4編碼器
由于MPEG-4具備在各種帶寬條件下處理多媒體的能力,它正在迅速成為一種最通用的視頻壓縮協(xié)議。 利用ChipWrights公司DSP產(chǎn)品CW4511的處理能力來實現(xiàn)MPEG-4 Simple Profile壓縮標(biāo)準(zhǔn)曾是一個相當(dāng)大的挑戰(zhàn)。 CW4511是一個包含8個并行處理器的單指令多數(shù)據(jù)通道系統(tǒng)級芯片,其上有128K字節(jié)存儲器,還有多個連接外部 SDRAM的接口、輸入/輸出視頻端口、一個海量存儲器接口以及三條管理數(shù)據(jù)傳輸?shù)腄MA通道。這種架構(gòu)很適合MPEG- 4應(yīng)用,因為其并行處理功能可用來同時處理一個圖像的多個數(shù)據(jù)塊。與串行處理器相比,這提高了系統(tǒng)的吞吐量 和總體性能。 我們的MPEG-4編碼器實現(xiàn)方案遠(yuǎn)不止是將現(xiàn)有的參考代碼灌進(jìn)DSP。我們使用了國際標(biāo)準(zhǔn)化組織(ISO)的一個基準(zhǔn)代 碼庫。為改進(jìn)代碼的可讀性,ISO的MPEG-參考代碼用C++寫成,它假設(shè)了兩個前提:可直接存取一個平面存儲器映 象架構(gòu);性能不是問題。 這兩個假設(shè)與實時嵌入式系統(tǒng)的要求并不一致。C++對象模型帶來大量指令開銷,這既加大了指令高速緩存器的填 充棧長度,又直接增加了運行所需的周期數(shù)。包括我們產(chǎn)品在內(nèi)的大多數(shù)DSP,其全速存儲器的容量是有限的,所 以數(shù)據(jù)必須通過DMA通道來回傳遞。最后,該項目需要的是一個實時實現(xiàn),所以參考實現(xiàn)方案的一些較復(fù)雜、需多 次調(diào)用執(zhí)行的部分必須進(jìn)行重新設(shè)計或者放棄不用。 我們的C實現(xiàn)編碼器一開始是將MPEG-4算法分割為一系列獨立的函數(shù)操作。然后,我們依據(jù)數(shù)據(jù)如何能被劃分成可 被并行處理的獨立塊,來規(guī)劃各個操作的數(shù)據(jù)使用。 從這一信息出發(fā),我們創(chuàng)建了一個處理數(shù)據(jù)的代碼架構(gòu),它的方式與在DSP上的最終實現(xiàn)相似。該代碼架構(gòu)從收集 我們用C一次寫成一個的小函數(shù)模塊開始。這種循序漸進(jìn)的方法使得我們能夠?qū)φ誌SO參考代碼來驗證每個新寫的函 數(shù)模塊。 在此過程的數(shù)據(jù)用法分析部分,我們需要決定如何將輸入圖像數(shù)據(jù)劃分為獨立的塊或片段。根據(jù)這些片段的大小和 它們的移動頻率,來對存儲器帶寬和處理器性能進(jìn)行權(quán)衡考慮。在我們的例子中,我們選擇的片段大小是8個宏 塊。根據(jù)MPEG-4 Simple Profile規(guī)范,一個宏塊是16x16點陣圖像的一部分。 這種片段大小使得單指令多數(shù)據(jù)通道DSP的每一并行處理器都能處理一個宏塊。這一點很重要,因為全部8個并行處 理器必須同時執(zhí)行同一指令。各宏塊的操作相互獨立,因而可以進(jìn)行同步處理。 一旦模型完成并用C來運行,我們就開始該項目的優(yōu)化階段。此處我們利用本公司的芯片仿真器及其附帶的仿圖 器,以便進(jìn)行性能分析和調(diào)試。 芯片仿真器是一個在PC上運行的程序,它是ChipWrights集成開發(fā)環(huán)境(IDE)的一部分,可以從功能上仿真DSP硬件 而且仿真周期很準(zhǔn)確。這使得我們無需接觸實際目標(biāo)板就能編寫和運行匯編代碼。 該仿真器能為DSP的周期數(shù)建模,其內(nèi)置仿圖器(profiler)可生成一個特定仿真所執(zhí)行的全部指令的HTML報告。這 使得我們可以評估我們最初的假定并確定改進(jìn)目標(biāo)。 該仿圖器輸出的概要部分顯示了許多參數(shù),其中有:系統(tǒng)運行過的函數(shù);每個函數(shù)運行所占的處理器時間;一個占 用最多周期的函數(shù)分類表(參見圖1)。 對每一函數(shù),仿圖器的輸出向我們顯示執(zhí)行每一指令所用的周期數(shù)及用于該指令的特定棧。我們關(guān)注的主要棧包 括:DMA分塊、一級高速緩存填充、指令排序和循環(huán)過程定時。借助這些信息,我們可以通過用匯編語言編寫關(guān)鍵 部分代碼同時確保以一種最適于并行處理的方式重新安排輸入數(shù)據(jù),從而實現(xiàn)代碼的優(yōu)化。能很好進(jìn)行并行處理的 函數(shù)包括:離散余弦變換、AC/DC系數(shù)預(yù)測、量化、Z線掃描及運動評估。不太便于并行處理的程序算法有掃描寬度 編碼和輸出位流的建構(gòu)。 通過與C++ MPEG-4參考代碼進(jìn)行逐位對比的方式,我們對優(yōu)化的實現(xiàn)方案進(jìn)行了驗證。結(jié)果顯示,我們的方案超過 了預(yù)定的性能目標(biāo):在1/4VGA解析度時,超過30幀/秒;在VGA解析度時,超過12幀/秒。芯片仿真器及其仿圖器使 我們能夠分析為平衡存儲器帶寬與指令大小以及算法復(fù)雜性而進(jìn)行的折衷,最終幫助我們實現(xiàn)既定的性能目標(biāo)。 該編碼器已經(jīng)集成在兩個嵌入式應(yīng)用中:一個是安全照相機(jī);另一個是全功能數(shù)碼照相機(jī)。安全照相機(jī)將一個傳感 器和一個圖像處理流水線同該MPEG-4編碼器整合起來,通過一個低位速率的連接線傳送實時視頻信號。數(shù)碼照相機(jī) 應(yīng)用也有一個傳感器和圖像處理流水線,但在同一個低功耗設(shè)備中,還包含了高解析度靜態(tài)拍攝、錄音和MP3重放 功能。 |