嵌入式多媒體系統(tǒng)的優(yōu)化權(quán)衡
隨著嵌入式多媒體應(yīng)用的不斷發(fā)展,系統(tǒng)控制和信號(hào)處理之間的交互性不斷增強(qiáng)。最新的嵌入式多媒體處理器已能夠同時(shí)處理mcu和dsp的任務(wù),從而將那些熟悉用mcu方式進(jìn)行應(yīng)用開發(fā)的c程序員帶入了一個(gè)新的領(lǐng)域。其中對(duì)代碼和數(shù)據(jù)流的智能管理會(huì)顯著提高系統(tǒng)的性能。然而,對(duì)多媒體處理器的高性能直接內(nèi)存訪問(dma)能力應(yīng)認(rèn)真地考慮,懂得在這些應(yīng)用中對(duì)使用高速緩存和dma進(jìn)行權(quán)衡將有助于更好地理解為優(yōu)化系統(tǒng)如何編程。存儲(chǔ)器結(jié)構(gòu)
——對(duì)存儲(chǔ)器管理的要求
媒體處理器通過(guò)分級(jí)的存儲(chǔ)器結(jié)構(gòu),來(lái)平衡幾種不同容量和性能等級(jí)的存儲(chǔ)器。離核心處理器最近的存儲(chǔ)器(l1存儲(chǔ)器)通常支持單時(shí)鐘周期指令的運(yùn)行,以全時(shí)鐘速率工作。為了高效地利用存儲(chǔ)器總線的帶寬,l1存儲(chǔ)器一般分為指令段和數(shù)據(jù)段,被配置成sram或高速緩存。對(duì)于那些權(quán)限最高的應(yīng)用,在一個(gè)單時(shí)鐘周期內(nèi)就能夠訪問片內(nèi)sram。對(duì)于要求較長(zhǎng)代碼的系統(tǒng),則可以提供附加的片內(nèi)和片外存儲(chǔ)器——這會(huì)增加等待時(shí)間。
這種層次結(jié)構(gòu)本身作用有限,為了適應(yīng)僅配合低速外部存儲(chǔ)器的大部分應(yīng)用,高速處理器通常不得不以很低的速度降級(jí)使用。這時(shí)為了提高性能,程序員可以人工地選擇將關(guān)鍵代碼移入或移出內(nèi)部sram。另外,還可以通過(guò)將數(shù)據(jù)高速緩存和指令高速緩存加入進(jìn)這種結(jié)構(gòu),從而使程序員能夠更方便地人工管理外部存儲(chǔ)器。由于高速緩存減少了將指令和數(shù)據(jù)流送入處理器內(nèi)核的人工管理,從而極大地簡(jiǎn)化了編程模式。指令存儲(chǔ)器管理
——高速緩存還是dma
對(duì)嵌入式媒體處理器市場(chǎng)的調(diào)查表明,核心處理器的速度不低于600 mhz。盡管這種性能可以開辟許多新應(yīng)用,但只有在從內(nèi)部l1存儲(chǔ)器中讀取代碼時(shí)才能達(dá)到這種最高速度。當(dāng)然,理想嵌入式處理器可以具有無(wú)限容量的l1存儲(chǔ)器,但這不切實(shí)際。因此,程序員在為其實(shí)際系統(tǒng)優(yōu)化存儲(chǔ)器和數(shù)據(jù)流時(shí),必須考慮幾種可選方案以充分利用置于處理器內(nèi)的l1存儲(chǔ)器。
第一種方案是目標(biāo)應(yīng)用代碼可以完全放入l1指令存儲(chǔ)器。對(duì)于這種情況,程序員只需將應(yīng)用代碼直接映射到該存儲(chǔ)器空間,而無(wú)需特殊操作。這就是為什么包含mcu和dsp兩種功能的媒體處理器必然在這種體系架構(gòu)支持的代碼密度方面具有獨(dú)特優(yōu)勢(shì)的原因。
第二種方案是采用一種高速緩存機(jī)構(gòu)允許程序員訪問更大容量、較低成本的外部存儲(chǔ)器。這種方法的主要優(yōu)點(diǎn)是程序員無(wú)需管理代碼移入和移出高速緩存。當(dāng)執(zhí)行線性代碼時(shí),能達(dá)到最好的效果;但當(dāng)執(zhí)行非線性代碼時(shí),高速緩存線可能會(huì)因替換頻繁,而導(dǎo)致實(shí)時(shí)性能變差。
指令高速緩存實(shí)際上具有兩個(gè)作用。第一,它以更有效率的方式從外部存儲(chǔ)器中預(yù)取指令。第二,由于高速緩存一般使用某種“最近使用的指令”的算法,所以那些使用最頻繁的指令往往被保持在高速緩存中。這樣做很有好處,因?yàn)榇嬖趌1高速緩存中的指令能夠在一個(gè)單時(shí)鐘周期內(nèi)完成。
大多數(shù)嚴(yán)格的實(shí)時(shí)程序員一般不相信這種高速緩存能帶來(lái)最佳的系統(tǒng)性能。理由是如果一系列指令在需要執(zhí)行時(shí)卻沒有在高速緩存內(nèi),將導(dǎo)致性能下降。采用高速緩存鎖定機(jī)制能彌補(bǔ)這一問題,一旦將關(guān)鍵的指令裝入高速緩存,高速緩存線就被鎖住,因此指令不會(huì)被覆蓋。這樣,程序員就能夠在高速緩存中保持他們所需的指令,而使該高速緩存機(jī)制來(lái)管理次要指令。
最后一種方案是通過(guò)使用一個(gè)獨(dú)立于處理器內(nèi)核的dma通道將代碼移入或移出l1存儲(chǔ)器。當(dāng)處理器內(nèi)核在存儲(chǔ)器的一個(gè)存儲(chǔ)塊運(yùn)行時(shí),該dma將代碼送入下一個(gè)存儲(chǔ)塊去執(zhí)行。這種方案通常被稱為一種覆蓋技術(shù)。
雖然通過(guò)dma將覆蓋代碼送入l1指令存儲(chǔ)器可以比高速緩存方式提供更多的關(guān)鍵指令,但程序員需要預(yù)先安排一種覆蓋代碼的方法和恰當(dāng)?shù)嘏渲胐ma通道,這會(huì)顯著增加程序員的工作量。數(shù)據(jù)存儲(chǔ)器管理
嵌入式媒體處理器的數(shù)據(jù)存儲(chǔ)器結(jié)構(gòu)對(duì)于整個(gè)系統(tǒng)性能的重要性等同于指令時(shí)鐘速度的重要性。因?yàn)樵诙嗝襟w應(yīng)用中經(jīng)常會(huì)有多個(gè)數(shù)據(jù)傳送任務(wù)同時(shí)進(jìn)行,所以其總線結(jié)構(gòu)必須支持內(nèi)核和dma對(duì)所有外部和內(nèi)部存儲(chǔ)器塊的訪問。對(duì)dma控制器和內(nèi)核之間的沖突進(jìn)行自動(dòng)處理時(shí),首先要求在內(nèi)核與dma之間建立dma控制器,然后當(dāng)要進(jìn)行處理的數(shù)據(jù)已經(jīng)準(zhǔn)備好時(shí),響應(yīng)中斷。
處理器的一項(xiàng)基本功能是執(zhí)行數(shù)據(jù)讀取操作。雖然這通常是傳送數(shù)據(jù)效率最低的機(jī)制,但卻是最簡(jiǎn)單的編程方式。小容量、快速方便的存儲(chǔ)器有時(shí)可以用來(lái)作為l1數(shù)據(jù)存儲(chǔ)器的一部分,但對(duì)于較大容量的片外緩沖器,如果內(nèi)核要從外部存儲(chǔ)器讀取所有數(shù)據(jù),那么訪問時(shí)間就會(huì)太長(zhǎng)。所以在多媒體和其它存在大量數(shù)據(jù)操作的應(yīng)用中,要不斷地將大量數(shù)據(jù)存儲(chǔ)移入或移出sdram,雖然內(nèi)核的讀取數(shù)據(jù)操作總是需要的,但為了維持性能,必須要使用dma或高速緩存來(lái)傳送大量的數(shù)據(jù)。使用dma管理數(shù)據(jù)
為了在多媒體系統(tǒng)中有效地利用dma,應(yīng)該有足夠多的dma通道以充分支持處理器的外圍電路,從而達(dá)到在存儲(chǔ)器與dma之間可以同時(shí)傳送一對(duì)以上的數(shù)據(jù)流,這一點(diǎn)非常重要。同時(shí),隨著數(shù)據(jù)傳輸速率和性能要求的提高,設(shè)計(jì)工程師