當(dāng)前位置: 首頁(yè) > 人物訪(fǎng)談
發(fā)布日期:2022-07-15 點(diǎn)擊率:63
在嵌入式工業(yè)設(shè)備、消費(fèi)類(lèi)娛樂(lè)產(chǎn)品和小型計(jì)算裝置等多媒體應(yīng)用中,設(shè)計(jì)實(shí)現(xiàn)、系統(tǒng)效率和高質(zhì)量編解碼器方面存在著許多挑戰(zhàn),設(shè)計(jì)人員需要了解如何選擇正確的處理引擎以構(gòu)建靈活的IP視像系統(tǒng)。本文討論一種基于數(shù)字信號(hào)處理器的解決方案,可以降低開(kāi)發(fā)成本,同時(shí)保持較高的性能。
許多嵌入式系統(tǒng)面臨的設(shè)計(jì)挑戰(zhàn)涉及到如何降低設(shè)計(jì)成本而又不犧牲性能,一些優(yōu)秀的處理器如英特爾80200或德州儀器TMS320C6205之類(lèi)的DSP也存在這樣的問(wèn)題。設(shè)計(jì)人員需要使用有效針對(duì)平臺(tái)的數(shù)據(jù)流模型,根據(jù)平臺(tái)選擇內(nèi)部循環(huán)優(yōu)化措施,降低計(jì)算的復(fù)雜程度。這樣才能在性能上得到極大改進(jìn),即使是對(duì)移動(dòng)多媒體系統(tǒng)視像驗(yàn)證模型編碼器(MoMuSys)這樣的開(kāi)放源代碼視頻MPEG-4編解碼器,也不需要在視像質(zhì)量方面做出犧牲,另外還可按特定用戶(hù)的要求定制編解碼器性能和質(zhì)量。
PAL和NTSC電視信號(hào)分別為25幀/秒和30幀/秒,因此在一個(gè)CIF圖像中,編碼器每秒必須處理396×30個(gè)宏塊(macroblock)。在一個(gè)幀處理期間,對(duì)每個(gè)宏塊都要從4Y 8×8的塊中計(jì)算產(chǎn)生最小誤差MB的運(yùn)動(dòng)矢量,然后全誤差MB(即6個(gè)模塊)通過(guò)離散余弦轉(zhuǎn)換(DCT)后再進(jìn)行量化。此外為保持與解碼器同步,編碼器要對(duì)所有模塊進(jìn)行去量化和逆向DCT,以重新構(gòu)建完全編解碼的視像幀。簡(jiǎn)單運(yùn)動(dòng)編解碼器運(yùn)算次數(shù)范圍為每秒9,700萬(wàn)次至億次(表1)。
必須使用半像素運(yùn)動(dòng)估計(jì)以便從編解碼器中得到合適的視像質(zhì)量。對(duì)于估計(jì)所需要的MIPS數(shù)來(lái)講,在軟件中實(shí)現(xiàn)全MPEG-4簡(jiǎn)單類(lèi)系統(tǒng)是非常困難的,如果要用廉價(jià)(低于30美元)的DSP實(shí)現(xiàn)MPEG-4編解碼器,需大幅降低計(jì)算復(fù)雜性,這類(lèi)器件為可用MIPS數(shù)設(shè)定了一個(gè)界限。
將MPEG-4編解碼器用于IP視像系統(tǒng)時(shí),還有一些其它的靈活性和處理要求。系統(tǒng)核心功能是將原始視像信號(hào)轉(zhuǎn)換到壓縮的IP數(shù)據(jù)包中,最簡(jiǎn)單的情況是把模擬攝像頭的IP數(shù)據(jù)流傳遞到PC機(jī)上,然后解壓并向用戶(hù)回放出視頻影像。
選擇正確的處理引擎
目前市面上有幾種用于視像壓縮的處理器,它可以作為IP視像系統(tǒng)的一部分。這些處理器分成四類(lèi),即專(zhuān)用視像處理器(DVP)、多媒體協(xié)處理器(MMCP)、專(zhuān)用編解碼處理器(DCP)和通用信號(hào)處理器(GSP),每種都有各自的優(yōu)缺點(diǎn)(表2)。
DVP是在DSP上擴(kuò)展了專(zhuān)用于視像應(yīng)用的部分,通常有一個(gè)DSP或RISC內(nèi)核,再加上專(zhuān)用的視像壓縮輔助硬件,如松下的視頻信號(hào)處理器VDSP2和擴(kuò)展8×8視頻通信處理器VCPex。MMCP類(lèi)似于DVP,但包括聲音壓縮、圖形和其它多媒體擴(kuò)展功能,如飛利浦的TM32A處理器。DCP指專(zhuān)用硬件,設(shè)計(jì)用于按MPEG-4之類(lèi)特定壓縮標(biāo)準(zhǔn)進(jìn)行編解碼。最后一種GSP是具有擴(kuò)展指令集的通用DSP,指令集包括專(zhuān)門(mén)用于視像壓縮和解壓操作的其它功能,如德州儀器的C6xx系列及BSP-15。
DVP和MMCP專(zhuān)門(mén)用于視頻/多媒體,相應(yīng)有一個(gè)硅片開(kāi)發(fā)成本的問(wèn)題。由于內(nèi)部復(fù)雜,包含許多壓縮輔助協(xié)處理單元,所以這些芯片的軟件開(kāi)發(fā)費(fèi)用也相當(dāng)高。不過(guò)它們通常結(jié)合了視像采集和轉(zhuǎn)儲(chǔ)能力,這樣可以去掉額外的外圍電路,降低整個(gè)IP視像系統(tǒng)的費(fèi)用。DCP系統(tǒng)能夠達(dá)到很高的性能,但芯片開(kāi)發(fā)費(fèi)用高,且編程靈活性很低。
總的來(lái)講,我們相信GSP是所有產(chǎn)品中最靈活的,針對(duì)多種應(yīng)用進(jìn)行大批量生產(chǎn),所以?xún)r(jià)格便宜,而且因?yàn)楹?jiǎn)單,在所有編解碼器中開(kāi)發(fā)費(fèi)用最低。缺點(diǎn)是在IP系統(tǒng)中,依然需要視像采集和轉(zhuǎn)儲(chǔ)方面的硬件。
構(gòu)建靈活的IP視像系統(tǒng)
在我們選擇的基于DSP的設(shè)計(jì)中(圖1),來(lái)自攝像頭即通過(guò)幀采集器得到的數(shù)據(jù)被送到編解碼處理器的SDRAM中。這里我們用的是德州儀器的C6205 DSP,速度為200MHz,每個(gè)時(shí)鐘周期可執(zhí)行8個(gè)32位指令(高達(dá)10次運(yùn)算)。
該處理器用于對(duì)幀采集器提供的原始視像數(shù)據(jù)進(jìn)行編碼,主處理器是時(shí)鐘為533MHz的Intel 80200,用于執(zhí)行主要任務(wù),從DSP處理器中取得數(shù)據(jù)并打包,再經(jīng)過(guò)以太網(wǎng)(使用IP)進(jìn)行網(wǎng)絡(luò)發(fā)送。不過(guò)考慮到實(shí)現(xiàn)編解碼器所需的MIPS數(shù)量,應(yīng)在早期做出決定劃分編解碼器,使主處理器完成數(shù)據(jù)的熵(即VLE)編碼。
主處理器也運(yùn)行Linux內(nèi)核,它的任務(wù)還有配置和控制包括DSP在內(nèi)的所有外圍器件。整個(gè)系統(tǒng)在內(nèi)部通過(guò)PCI總線(xiàn)進(jìn)行通信,之所以用PCI作為嵌入式總線(xiàn)架構(gòu)是因?yàn)槠鋺?yīng)用歷史悠久,公認(rèn)比較穩(wěn)定,而且易于使用,如果市場(chǎng)需要更大處理能力而增加額外的外圍器件,PCI也很容易擴(kuò)展。
我們的IP視像系統(tǒng)總體解決方案顯示了高度可升級(jí)性。主處理器和DSP處理器都在英特爾和德州儀器各自的長(zhǎng)期開(kāi)發(fā)產(chǎn)品線(xiàn)上,一些新型更快的設(shè)計(jì)不久就會(huì)推出。因?yàn)镈SP執(zhí)行大多數(shù)視像壓縮任務(wù),所以主處理器還有多余的MIPS可供給與視像無(wú)關(guān)的特殊用戶(hù)要求。
此外,該設(shè)計(jì)在編解碼器實(shí)現(xiàn)方面也具有很大靈活性,相比于其它常用方案這里的編解碼器開(kāi)發(fā)速度非常快,雖然性能上有所欠缺但在簡(jiǎn)單性方面進(jìn)行了彌補(bǔ),即使更廉價(jià)的DSP也有能力運(yùn)行全幀速率及高質(zhì)量編解碼器。它可以滿(mǎn)足將來(lái)的新標(biāo)準(zhǔn)和更先進(jìn)的特性,很容易用更高性能的型號(hào)來(lái)代替,設(shè)計(jì)更新速度比專(zhuān)用視像處理器快。
GSP還沒(méi)有強(qiáng)大到足以滿(mǎn)足非常高性能要求的地步,如高空間分辨率4CIF、16CIF等,不過(guò)我們的硬件在設(shè)計(jì)時(shí)已考慮了以后的擴(kuò)展,現(xiàn)在考慮的其它方案是使用專(zhuān)用DCP替代編解碼器處理器以及轉(zhuǎn)儲(chǔ)器和采集器,這些未來(lái)方案的目標(biāo)應(yīng)用是IP數(shù)字視像市場(chǎng)上的高性能終端。
C6205 DSP處理器的內(nèi)核可以并行執(zhí)行8條32位指令,并能以200MHz速度在每個(gè)周期執(zhí)行高達(dá)10個(gè)基本算法操作擴(kuò)展指令集。具有全并行化特性的內(nèi)核理論上可以達(dá)到1,600MIPS,或2,000MBOPS。但實(shí)際上目前任何軟件要達(dá)到這一點(diǎn)都是極其困難的,根據(jù)上面對(duì)編解碼器復(fù)雜性的討論可以看到,選擇這樣的處理器將無(wú)法執(zhí)行全幀速率MPEG-4編解碼器。
市場(chǎng)的壓力即費(fèi)用上的考慮使我們只能這樣選,但即使如此,所要求的性能標(biāo)準(zhǔn)即30幀/秒的高質(zhì)量視像還是能夠達(dá)到。DSP內(nèi)部有64KB程序和數(shù)據(jù)存儲(chǔ)器,兩者都能配置成高速緩沖存儲(chǔ)器或快速RAM。在我們的平臺(tái)上,DSP擴(kuò)展存儲(chǔ)器接口(EMIF)連在16MB的SDRAM上。
為測(cè)試我們的設(shè)計(jì),我們使用移動(dòng)多媒體系統(tǒng)視像驗(yàn)證模型編碼器。這個(gè)MPEG-4編碼器從來(lái)就不是一個(gè)高性能編碼器,但卻是由國(guó)際標(biāo)準(zhǔn)化組織(ISO)提供的,作為MPEG-4編解碼器開(kāi)發(fā)和質(zhì)量指導(dǎo)。
編解碼器代碼首先簡(jiǎn)化為生成MoMuSys MPEG-4簡(jiǎn)單類(lèi)編碼器所需的最簡(jiǎn)值。為了事先對(duì)任務(wù)有一個(gè)概念,先將現(xiàn)在更容易管理的基本代碼下載到DSP的SDRAM中并執(zhí)行,并將內(nèi)部數(shù)據(jù)和程序存儲(chǔ)器配置成高速緩沖存儲(chǔ)器,所產(chǎn)生的幀速率(MPEG-4量化器值為3,沒(méi)有速率控制)對(duì)于內(nèi)部幀約為0.1幀/秒,這個(gè)數(shù)字不包括VLE處理(圖2)。
VLE之所以不包括在這一測(cè)量中是因?yàn)槲覀冎涝谧罱K系統(tǒng)中,編解碼器這一部分將在80200主處理器中執(zhí)行,用以平衡總的計(jì)算負(fù)載。幀間速率沒(méi)有作估計(jì),不過(guò)由于ME/MC是運(yùn)動(dòng)編解碼器一個(gè)重要計(jì)算部分,所以該性能會(huì)比較差,或許要差一個(gè)數(shù)量級(jí)。
此外,僅用一個(gè)內(nèi)部幀編解碼器(負(fù)的VLE)也很容易工作,因?yàn)樵撎匦耘c圖像無(wú)關(guān),使我們能準(zhǔn)確測(cè)量DSP的性能。在這點(diǎn)上請(qǐng)注意編解碼器性能比我們需要的30幀/秒之間相差300倍以上。
在標(biāo)準(zhǔn)PC上的MoMuSys MPEG-4簡(jiǎn)單類(lèi)編碼器性能要比上面的設(shè)計(jì)好幾個(gè)數(shù)量級(jí),但DSP技術(shù)規(guī)范中MIPS部分并不比英特爾奔騰系列處理器差幾個(gè)數(shù)量級(jí),所以很顯然,DSP內(nèi)核的能力還沒(méi)有完全發(fā)揮出來(lái)。
帶寬制約速度
我們懷疑這主要是由于高速緩沖存儲(chǔ)器出現(xiàn)錯(cuò)誤而影響到SDRAM的訪(fǎng)問(wèn)速度。雖然除了經(jīng)過(guò)TI編譯器優(yōu)化外,代碼沒(méi)有再對(duì)DSP內(nèi)核進(jìn)行其它優(yōu)化,所以可能沒(méi)有達(dá)到最優(yōu),但我們還是認(rèn)為有其它異常因素導(dǎo)致性能降低。后來(lái)在檢查產(chǎn)生幀值數(shù)據(jù)的SDRAM和內(nèi)部數(shù)據(jù)RAM(IDRAM)之間帶寬時(shí)才找到原因。
MoMuSys是一個(gè)基于幀的編解碼器,這表示它以全幀進(jìn)行每一級(jí)編碼,與基于宏模塊的編解碼器不同,它每次都在宏模塊上進(jìn)行全編碼過(guò)程。
單從這一點(diǎn)就可以看到,僅對(duì)幀數(shù)據(jù)一項(xiàng)編碼器就需要大容量SDRAM來(lái)處理視像輸入幀。此外,DCT和定量器需要12位數(shù)據(jù)(用于8位/像素的輸入圖像),因此所有幀都以16位/像素?cái)?shù)據(jù)格式存儲(chǔ),這些幀總共要數(shù)據(jù)存儲(chǔ)器。
對(duì)MoMuSys碼的檢查顯示,處理一個(gè)幀需要的存儲(chǔ)器大約是2MB,包括幀數(shù)據(jù)、ACDC預(yù)測(cè)數(shù)據(jù)和運(yùn)動(dòng)矢量數(shù)據(jù)。當(dāng)編碼器工作于PC5時(shí),存儲(chǔ)器使用情況分析顯示它需要8M字節(jié)存儲(chǔ)器用于正常工作。
我們預(yù)計(jì)每幀存儲(chǔ)器用量很可能在2到8MB之間。在正確設(shè)計(jì)的高速緩沖存儲(chǔ)器相關(guān)系統(tǒng)中,高速緩沖存儲(chǔ)器容量(64KB)和處理1幀所要求的存儲(chǔ)器容量(2~8MB)之間存在著巨大差異,但這一差異本身不會(huì)給來(lái)自SDRAM的高速緩沖存儲(chǔ)器線(xiàn)路負(fù)載性能造成問(wèn)題。
不過(guò),存儲(chǔ)器訪(fǎng)問(wèn)空間結(jié)構(gòu)被認(rèn)為是引起高速緩沖存儲(chǔ)器高失誤率的原因,并因此使性能大大降低。我們?cè)谶@一級(jí)做了深入耗時(shí)的高速緩沖存儲(chǔ)器分析,試圖優(yōu)化這一類(lèi)編解碼器用于DSP。
對(duì)于存儲(chǔ)器要求來(lái)講,基于宏塊的編解碼器更為有效。此外編解碼器每處理一幀需要訪(fǎng)問(wèn)大量完全不同的數(shù)據(jù),所以設(shè)計(jì)一個(gè)好的帶高速緩沖存儲(chǔ)器的編解碼器是很難的,不管是基于幀還是基于宏塊。因此我們后來(lái)決定關(guān)閉高速緩沖存儲(chǔ)器,并用完善的DSP可編程DMA引擎來(lái)管理SDRAM和內(nèi)部數(shù)據(jù)RAM(IDRAM)間數(shù)據(jù)傳遞。所有DSP內(nèi)核訪(fǎng)問(wèn)僅限于內(nèi)部數(shù)據(jù)RAM,SDRAM和IDRAM間的DMA處理將與CPU內(nèi)核存儲(chǔ)器訪(fǎng)問(wèn)并行執(zhí)行,如果我們?cè)贗DRAM上進(jìn)行旋轉(zhuǎn)式緩沖器排列,可以假定不會(huì)有數(shù)據(jù)庫(kù)沖突。
同樣我們也關(guān)閉程序高速緩存操作,另外還做了一些工作保持代碼長(zhǎng)度小于64K字節(jié),這也給了我們另外一個(gè)理由放棄大部分MoMuSys代碼。
運(yùn)動(dòng)估計(jì)/運(yùn)動(dòng)補(bǔ)償算法是一個(gè)有效的專(zhuān)用快速運(yùn)動(dòng)估計(jì)算法,局限在一個(gè)16像素搜索范圍內(nèi),顯然與搜索區(qū)域大小緊密相配。所有的幀表達(dá)現(xiàn)在都用8比特/像素格式,代碼如果在DCT和量化時(shí)還需更進(jìn)一步精確,我們將提供額外的存儲(chǔ)空間作為IDRAM靜態(tài)預(yù)分配區(qū)域。MB以Y1Y3Y2Y4CbCr格式存儲(chǔ),即將Y3和Y2作了交換。讓DSP的4個(gè)可用DMA通道直接存儲(chǔ)器訪(fǎng)問(wèn)全部MB(6個(gè)模塊),并仍保持存儲(chǔ)器中每個(gè)相鄰模塊像素排列不變,這樣做很有必要,它也是TI為DSP提供的必須采用的格式用于DCT庫(kù)。所有其它程序數(shù)據(jù)都留在IDRAM內(nèi),總計(jì),幾乎沒(méi)有什么空間可以備用。較小的IDRAM需要一個(gè)稍微不同的數(shù)據(jù)模型,結(jié)果是DMA總線(xiàn)利用更為充分。
這個(gè)基于MB的編解碼器所用存儲(chǔ)器帶寬在SDRAM和IDRAM之間,很容易估計(jì),每幀處理需要742KB DMA,5個(gè)幀值,這里一幀是352×288×1.5個(gè)字節(jié),所以對(duì)于每秒30個(gè)NTSC幀而言,DMA引擎必須每秒傳遞大約22M字節(jié)的數(shù)據(jù),在SDRAM和IDRAM之間的100MHz 32位總線(xiàn)中它將使用大約1/18的帶寬。這完全在TI DSP的DMA性能和我們使用的SDRAM界限內(nèi),我們的32位可尋址SDRAM時(shí)鐘為100MHz,每排訪(fǎng)問(wèn)損失的SDRAM時(shí)鐘小于5個(gè),相當(dāng)于10個(gè)DSP時(shí)鐘周期。
從這一點(diǎn)可以看到數(shù)據(jù)模型已按IDRAM的大小作了修改,對(duì)DSP訪(fǎng)問(wèn)進(jìn)行了優(yōu)化處理,但卻沒(méi)有充分利用DMA。該數(shù)據(jù)模型在速度性能上的改進(jìn)如果沒(méi)有重要配置或優(yōu)化條件,則相比于以前的結(jié)果是非常令人驚訝的。這一級(jí)幀內(nèi)性能為20幀/秒數(shù)量級(jí),即在非常需要存儲(chǔ)器的MoMuSys幀基編解碼器上性能改進(jìn)了200倍。當(dāng)加入我們專(zhuān)用的ME/MC子系統(tǒng)時(shí),一般使用一個(gè)代碼仿形器,可以看到消耗了30~50%的可用時(shí)鐘周期,這時(shí)幀間性能估計(jì)最壞為10幀/秒。
技術(shù)突破
在設(shè)計(jì)編解碼器中如何獲得最好的并行效果是一個(gè)很大的挑戰(zhàn),必須保證DSP內(nèi)核邏輯單元得到最好應(yīng)用。在多數(shù)情況下,這要留給非常強(qiáng)大的DSP優(yōu)化器來(lái)做,但TI的編輯器也包含了用于軟件循環(huán)流水操作的算法。
編解碼器實(shí)現(xiàn)一般包含許多圍繞像素的循環(huán)內(nèi)容,這些循環(huán)又在模塊、MB或幀中,所以它們非常適合進(jìn)行優(yōu)化,一個(gè)循環(huán)的流水作業(yè)意味著兩個(gè)或更多循環(huán)反復(fù)將并行執(zhí)行。TI編輯器在其流水作業(yè)性能上提供反饋以便在過(guò)程中提供幫助,如果某些DSP內(nèi)核邏輯單元利用不足或過(guò)度,常常可用再排列或再設(shè)計(jì)循環(huán)來(lái)糾正,并減少執(zhí)行中的循環(huán)數(shù)。
用上述方法進(jìn)一步優(yōu)化,即使用TI仿形器和TI DSP編輯器反饋選件,可以使性能改進(jìn)高達(dá)7倍,達(dá)到140幀間/秒的速率。在我們能夠發(fā)現(xiàn)的最具計(jì)算挑戰(zhàn)性的圖像方面,最優(yōu)ME/MC結(jié)果在幀內(nèi)處理速率可達(dá)31幀/秒。
采用上述方法獲得的性能改進(jìn)非常可觀(guān),并顯示出在DSP上對(duì)編解碼器進(jìn)行編程的原始方法很可能在代碼中極少用到DSP的真正性能,好的數(shù)據(jù)流模型和對(duì)DSP內(nèi)核性能的認(rèn)識(shí)使我們能極大改進(jìn)性能。
另外還需要做很多工作減少計(jì)算的復(fù)雜性,因?yàn)榱畠r(jià)DSP沒(méi)有足夠的MIPS解決編解碼器壓縮問(wèn)題,不過(guò)仍有可能在圖像質(zhì)量方面獲得更好性能,得到一個(gè)速度保持為30幀/秒,且具有CIF分辨率的實(shí)時(shí)商用級(jí)編解碼器。
相關(guān)鏈接
如何在嵌入式電子設(shè)備中建立多媒體文件系統(tǒng)
數(shù)字視頻應(yīng)用分類(lèi)和DSP的選擇策略
如何實(shí)現(xiàn)無(wú)線(xiàn)多媒體設(shè)備的雙向視頻流傳輸功能
作者:Barry D. McDonald
系統(tǒng)設(shè)計(jì)師
Indigovision有限公司