嵌入式多媒體系統的優(yōu)化權衡
隨著(zhù)嵌入式多媒體應用的不斷發(fā)展,系統控制和信號處理之間的交互性不斷增強。最新的嵌入式多媒體處理器已能夠同時(shí)處理MCU和DSP的任務(wù),從而將那些熟悉用MCU方式進(jìn)行應用開(kāi)發(fā)的C程序員帶入了一個(gè)新的領(lǐng)域。其中對代碼和數據流的智能管理會(huì )顯著(zhù)提高系統的性能。然而,對多媒體處理器的高性能直接內存訪(fǎng)問(wèn)(DMA)能力應認真地考慮,懂得在這些應用中對使用高速緩存和DMA進(jìn)行權衡將有助于更好地理解為優(yōu)化系統如何編程。
本文引用地址:http://dyxdggzs.com/article/4545.htm存儲器結構
——對存儲器管理的要求
媒體處理器通過(guò)分級的存儲器結構,來(lái)平衡幾種不同容量和性能等級的存儲器。離核心處理器最近的存儲器(L1存儲器)通常支持單時(shí)鐘周期指令的運行,以全時(shí)鐘速率工作。為了高效地利用存儲器總線(xiàn)的帶寬,L1存儲器一般分為指令段和數據段,被配置成SRAM或高速緩存。對于那些權限最高的應用,在一個(gè)單時(shí)鐘周期內就能夠訪(fǎng)問(wèn)片內SRAM。對于要求較長(cháng)代碼的系統,則可以提供附加的片內和片外存儲器——這會(huì )增加等待時(shí)間。
這種層次結構本身作用有限,為了適應僅配合低速外部存儲器的大部分應用,高速處理器通常不得不以很低的速度降級使用。這時(shí)為了提高性能,程序員可以人工地選擇將關(guān)鍵代碼移入或移出內部SRAM。另外,還可以通過(guò)將數據高速緩存和指令高速緩存加入進(jìn)這種結構,從而使程序員能夠更方便地人工管理外部存儲器。由于高速緩存減少了將指令和數據流送入處理器內核的人工管理,從而極大地簡(jiǎn)化了編程模式。
指令存儲器管理
——高速緩存還是DMA
對嵌入式媒體處理器市場(chǎng)的調查表明,核心處理器的速度不低于600 MHz。盡管這種性能可以開(kāi)辟許多新應用,但只有在從內部L1存儲器中讀取代碼時(shí)才能達到這種最高速度。當然,理想嵌入式處理器可以具有無(wú)限容量的L1存儲器,但這不切實(shí)際。因此,程序員在為其實(shí)際系統優(yōu)化存儲器和數據流時(shí),必須考慮幾種可選方案以充分利用置于處理器內的L1存儲器。
第一種方案是目標應用代碼可以完全放入L1指令存儲器。對于這種情況,程序員只需將應用代碼直接映射到該存儲器空間,而無(wú)需特殊操作。這就是為什么包含MCU和DSP兩種功能的媒體處理器必然在這種體系架構支持的代碼密度方面具有獨特優(yōu)勢的原因。
第二種方案是采用一種高速緩存機構允許程序員訪(fǎng)問(wèn)更大容量、較低成本的外部存儲器。這種方法的主要優(yōu)點(diǎn)是程序員無(wú)需管理代碼移入和移出高速緩存。當執行線(xiàn)性代碼時(shí),能達到最好的效果;但當執行非線(xiàn)性代碼時(shí),高速緩存線(xiàn)可能會(huì )因替換頻繁,而導致實(shí)時(shí)性能變差。
指令高速緩存實(shí)際上具有兩個(gè)作用。第一,它以更有效率的方式從外部存儲器中預取指令。第二,由于高速緩存一般使用某種“最近使用的指令”的算法,所以那些使用最頻繁的指令往往被保持在高速緩存中。這樣做很有好處,因為存在L1高速緩存中的指令能夠在一個(gè)單時(shí)鐘周期內完成。
大多數嚴格的實(shí)時(shí)程序員一般不相信這種高速緩存能帶來(lái)最佳的系統性能。理由是如果一系列指令在需要執行時(shí)卻沒(méi)有在高速緩存內,將導致性能下降。采用高速緩存鎖定機制能彌補這一問(wèn)題,一旦將關(guān)鍵的指令裝入高速緩存,高速緩存線(xiàn)就被鎖住,因此指令不會(huì )被覆蓋。這樣,程序員就能夠在高速緩存中保持他們所需的指令,而使該高速緩存機制來(lái)管理次要指令。
最后一種方案是通過(guò)使用一個(gè)獨立于處理器內核的DMA通道將代碼移入或移出L1存儲器。當處理器內核在存儲器的一個(gè)存儲塊運行時(shí),該DMA將代碼送入下一個(gè)存儲塊去執行。這種方案通常被稱(chēng)為一種覆蓋技術(shù)。
雖然通過(guò)DMA將覆蓋代碼送入L1指令存儲器可以比高速緩存方式提供更多的關(guān)鍵指令,但程序員需要預先安排一種覆蓋代碼的方法和恰當地配置DMA通道,這會(huì )顯著(zhù)增加程序員的工作量。
數據存儲器管理
嵌入式媒體處理器的數據存儲器結構對于整個(gè)系統性能的重要性等同于指令時(shí)鐘速度的重要性。因為在多媒體應用中經(jīng)常會(huì )有多個(gè)數據傳送任務(wù)同時(shí)進(jìn)行,所以其總線(xiàn)結構必須支持內核和DMA對所有外部和內部存儲器塊的訪(fǎng)問(wèn)。對DMA控制器和內核之間的沖突進(jìn)行自動(dòng)處理時(shí),首先要求在內核與DMA之間建立DMA控制器,然后當要進(jìn)行處理的數據已經(jīng)準備好時(shí),響應中斷。
處理器的一項基本功能是執行數據讀取操作。雖然這通常是傳送數據效率最低的機制,但卻是最簡(jiǎn)單的編程方式。小容量、快速方便的存儲器有時(shí)可以用來(lái)作為L(cháng)1數據存儲器的一部分,但對于較大容量的片外緩沖器,如果內核要從外部存儲器讀取所有數據,那么訪(fǎng)問(wèn)時(shí)間就會(huì )太長(cháng)。所以在多媒體和其它存在大量數據操作的應用中,要不斷地將大量數據存儲移入或移出SDRAM,雖然內核的讀取數據操作總是需要的,但為了維持性能,必須要使用DMA或高速緩存來(lái)傳送大量的數據。
使用DMA管理數據
為了在多媒體系統中有效地利用DMA,應該有足夠多的DMA通道以充分支持處理器的外圍電路,從而達到在存儲器與DMA之間可以同時(shí)傳送一對以上的數據流,這一點(diǎn)非常重要。同時(shí),隨著(zhù)數據傳輸速率和性能要求的提高,設計工程師能隨意對“系統性能調節”進(jìn)行控制也變得非常關(guān)鍵。例如,通過(guò)優(yōu)化DMA控制器使每個(gè)時(shí)鐘周期都可傳送一個(gè)數據字。當向同一方向同時(shí)傳送多個(gè)數據流時(shí),這通常是最有效的操縱控制器的方式,因為這種方法可以防止DMA總線(xiàn)有空閑時(shí)間。
但是當傳送多個(gè)雙向視頻和音頻數據流時(shí),就必須使用“業(yè)務(wù)量控制”,以防止一個(gè)數據流獨占總線(xiàn)。例如,如果DMA控制器總是把DMA總線(xiàn)連接到任何一個(gè)準備每次傳送一個(gè)數據字的外圍電路,那么總的數據吞吐率就會(huì )降低。在這種情況下,幾乎每個(gè)時(shí)鐘周期的數據傳送都改變一次方向,因此在SDRAM總線(xiàn)上與來(lái)回切換時(shí)間相關(guān)的等待時(shí)間將顯著(zhù)降低吞吐率。此時(shí),具有一個(gè)通道可編程傳送數據字長(cháng)度的DMA控制器比那種具有固定傳送長(cháng)度的控制器有明顯的優(yōu)勢。因為每個(gè)DMA通道都可以將一個(gè)外圍設備與外部或內部存儲器相連。
DMA控制器的另一個(gè)特性是二維DMA性能。首先,這種性能允許以一種比較直觀(guān)的處理順序將數據放入存儲器。其次,二維DMA的交錯和去交錯功能在處理視頻和圖像數據之前能減少存儲器總線(xiàn)的傳送時(shí)間。另外,通過(guò)有選擇性地進(jìn)行數據傳送,即只選擇需要的輸入圖像數據塊而不是全部圖像的數據,二維DMA還能夠使系統的數據帶寬降低到最小。
其它的DMA控制器特性還包括為滿(mǎn)足當前的外圍設備任務(wù)請求,區分DMA通道優(yōu)先級的能力,以及為匹配這些優(yōu)先級設置相應的DMA中斷的能力。這些功能有助于確保數據緩沖器不會(huì )因DMA忙于其它外圍設備而溢出,并且還使程序設計工程師在每個(gè)DMA通道的數據流通基礎上優(yōu)化整個(gè)系統性能時(shí)具有更大的自由度。
由于內部存儲器通常分為幾個(gè)子存儲塊,所以DMA控制器和內核同時(shí)訪(fǎng)問(wèn)時(shí)將會(huì )通過(guò)把數據存放在不同子存儲塊中而使整個(gè)操作在一個(gè)單時(shí)鐘周期內完成。
數據高速緩存
DMA控制器的靈活性是一把雙刃劍。當在兩個(gè)處理器之間讀取一個(gè)大的C/C++應用程序時(shí),程序員有時(shí)不愿意將DMA功能整合到已有工作代碼中,這時(shí),往往是將數據通過(guò)高速緩存直接送入L1存儲器以便最快處理。這種數據高速緩存的作用像一個(gè)小DMA一樣,但涉及到程序員的工作量卻大大減少。
由于高速緩存具有線(xiàn)填充特性,所以高速緩存不只存儲當前正在被處理的數據,它還向與當前相鄰的數據塊內預取數據。這在對連續數據存放塊進(jìn)行操作時(shí)非常有用。這是因為對于多媒體圖象、音頻和視頻流,這是一個(gè)合理的假設。
但是,由于數據緩沖器通常來(lái)自外圍電路,所以對數據高速緩存的操作并不總象對指令高速緩存的操作那樣容易。這是因為必須在非“監聽(tīng)”的高速緩存中人工控制一致性。因此在使用這些高速緩存準備對新數據進(jìn)行任何讀取之前都必須使該數據緩沖器無(wú)效。
結語(yǔ)
總之,在一個(gè)具體的多媒體系統中對指令和數據傳送的最佳機制的選擇應該是高速緩存還是DMA沒(méi)有一種簡(jiǎn)單的答案。但大至如圖1所示。一旦開(kāi)發(fā)工程師了解到這其中需要考慮權衡的,就能通過(guò)以上分析達到一種“折衷”的狀態(tài),從而使系統的整體性能達到最優(yōu)?!?br/>
評論