帳號:
密碼:
最新動態
 
產業快訊
CTIMES / 文章 /
直接記憶體存取之基礎、結構、與應用(4)
 

【作者: David Katz,Rick Gentile】   2007年09月12日 星期三

瀏覽人次:【6059】

在上一篇文章中,已討論過針對指令以及資料記憶體要如何在快取與DMA機構之選擇上做出最佳的決定。在這次的討論裡面,將要繼續先前尚未討論完的部分,也就是先進DMA的特點如何能夠使資料的搬移更具有效率。將會專注在如何使記憶體中的資料傳輸最佳化,不論是正在處理指令或是資料記憶體。接著會針對多媒體應用領域中的一些實際使用情況做綜合性的討論。


先進DMA控制器的特點

想要在多媒體系統中有效率的使用DMA,就必須要有足夠的DMA通道,能夠完整的支援處理器的所有周邊,同時還需要有一對以上的記憶體DMA(MemDMA)串流。這一點非常的重要,因為傳送進來的未經處理媒體串流一定會送到外部記憶體中(透過高速周邊),而在此同時,核心處理所需要的資料區塊將會在外部記憶體以及L1記憶體之間來回的搬移。此外, DMA引擎能夠在周邊與外部記憶體之間做直接資料傳輸,而不會像L1記憶體一樣需要「中途停留」(stopover),對於特別強調數值方面的演算法則可以減少額外的資料傳送。


在開發階段中,程式設計師常常會犯的一個共通錯誤使得除錯的程序變得更為複雜。周邊以及其相對應的DMA通道,通常都會具有可以切換的錯誤中斷。在開發階段中,這個中斷應該要經常性的被維持在啟用的狀態。這樣子的作法可以節省掉數個小時的除錯時間。一般錯誤中斷的用途都是用以指出程式中某些撰寫錯誤的部分(這是比較容易修正的狀況),或者是某個周邊發生了超下限/ 超上限(這是較為複雜的狀況)的問題。在多數的情況下,程式設計師在計畫起步階段進行架構的設定時,前述這些類型的狀況只有到稍後開始加入應用裝置的處理元件才會出現。


其他重要的DMA特點還包括了能將DMA通道的優先權等級化,以符合目前周邊作業需求的能力,以及為了配合這些優先位準而設定相關連DMA中斷的功能。這些功能將有助於確保資料緩衝區不會因為其他周邊的DMA運作而產生溢出的狀況,同時也可以提供程式設計師額外的自由度,能夠以每個DMA通道上的資料交換情況為基礎,對整個系統進行最佳化。


在DMA與快取之間做選擇時的系統準則

在應用裝置中的資料流如果越複雜,在開始進行計畫案的架構佈局時就需要花更多的時間。在架構一組系統時,最基本的挑戰就在於決定哪個資料緩衝區在搬移時要使用DMA通道,哪個則應該要透過快取來進行存取,還有哪個要使用處理器的讀寫來做存取。我們接著來看看三種最為常用的系統設定,以便找出對於不同的系統等級而言,哪種方法才是最好的。


系統性能的調節

對於設計工程師而言,當資料速率以及性能的需求增加時,在其設計的配置中是否具備有「系統性能調節」控制就變得相當的重要。舉例來說,可以對DMA控制器進行最佳化,使其在每個時脈週期中傳輸一組資料字元。當有多個傳輸採相同的方向進行時(例如:全部都從內部記憶體流往外部記憶體時),這通常是最具效率的控制器操作方法,因為這可以避免在DMA匯流排上產生閒置時間。


但是在某些會牽涉到多個雙向視訊以及音訊串流的情況下,為了要避免單一組串流將匯流排完全佔滿,「方向控制」就有其必要性。舉例來說,假如DMA控制器總是把DMA匯流排授予任何一個已經準備好要傳輸一組資料字元的周邊使用,那麼在使用外部DRAM的時候,總體的處理能力將會隨之降級。有些情況是幾乎在每一個週期間,資料的傳輸都會發生方向的切換,那麼與外部記憶體匯流排上的迴轉時間相互關連的潛在因素就會使得總處理能力明顯的下降。所以,具備有通道可編程突發量大小(channel-programmable burst size)的DMA控制器與只有固定傳輸大小的控制器相較之下,前者將會有較高的性能。因為每個DMA通道都可以將一組周邊與內部或外部記憶體相互連結,因此對於提出匯流排緊急需求的周邊能夠自動提供服務也是相當重要的。


對於多媒體應用領域而言,要將整個視訊框架儲存起來,晶片內建的記憶體大多是不敷使用的。因此,系統通常都必須要仰賴L3 DRAM,以便支援對於較大緩衝區相對較快速的存取動作。在設計有效率的媒體框架時,處理器與外接記憶體的連結會是一個主要的影響因素,這是因為若想要確保資料的總處理能力達到最佳化的狀態,那麼對於外部記憶體的存取方式就必須要善加思考與規劃才行。


對於記憶體的性能來說,使用DMA以及/ 或是快取都會有所助益,這是因為他們可以在同方向上進行大型的資料區塊傳輸。DMA傳輸通常會將大型的資料緩衝區從某個位置搬到另一個位置上,而快取記憶體線填充(cache-line fill)則會使用同方向的區塊傳輸方式,將一整組的連續記憶體位置從元件移出或是移入。


除了使用DMA或是快取之外,還有許多種高位準的步驟可以確保資料流在任何的系統中都能夠平順的通過記憶體。其中兩種關鍵性的步驟就是將同類的傳輸群組化(grouping like transfers),以及使用優先等級與仲裁系統。


將同類傳輸群組化,以便使記憶體匯流排的迴轉最小化。

當外部記憶體的存取都是以同方向進行時(例如:連續讀取或是連續寫入),將是最具有效率的狀態。舉例來說,在存取晶片外的同步記憶體時,伴隨著16次寫入的16次讀取,總是會比個別進行的16次讀寫程序更快完成。這是因為每一次伴隨著讀取的寫入會導致潛在的問題。外部記憶體的隨機存取會產生出較高的匯流排迴轉機率。這項衍生出來的潛在問題會使得可用頻寬減少一半。因此,善加利用控制特定方向之傳輸數量的能力是相當重要的。這點可以藉由自動化或是手動安排資料搬移來加以達成。


DMA通道可以根據其優先等級來將存取動作貯存起來,在Blackfin處理器上是藉由其通道數目來作為表示。具有較高優先等級的通道會被優先用來作為DMA匯流排的存取。基於這樣的理由,因此請記得總是將具有較高優先等級的DMA通道指派給具有最高資料速率或是會產生最少潛在問題的周邊。


根據這樣的結果,記憶體DMA串流在優先等級上總是會低於周邊DMA的運作。這是因為在使用記憶體DMA的情況下,沒有任何的外部元件能夠予以延緩或是索取資料。由於記憶體DMA通道只要在通道被啟動就會提出存取DMA匯流排的要求,因此有效率的使用任何未被周邊DMA所使用之時槽(time slot)的方法將會被應用在MemDMA的傳輸上。在預設狀態下,如果有超過一組的MemDMA串流被啟動而且也已經就緒的話,那麼只有獲得最高優先等級的MemDMA串流能夠取得使用許可。


在對每個DMA匯流排上的資源使用進行最佳化時,必須要將這個方向控制的特點視為很重要的考量。將相同方向的傳輸群組化在一起,這個方法可以用來對DMA匯流排上之傳輸方向的頻率進行管理。這是一個相當方便,可以執行第一階段最佳化的方法,而且不需要即時的處理器介入。更重要的是,不需要手動的將突發量安排至DMA串流當中。


在採用了方向控制的特點之後,DMA控制器會對DMA或是記憶體匯流排,與前一傳輸具有相同的讀取寫入方向者中的資料傳輸優先授權,直到方向控制的計數器逾時,或是直到其交流停止,或是其自行改變方向。當方向計數器變為零的時候,DMA控制器將會改變其偏好值,變成反方向的資料流。


在這個情況下,方向的反轉不會浪費掉匯流排週期,不同於任何實體匯流排的迴轉會使得時間有所延遲。這種類型的交流控制所代表的意義乃是為了改善其運用(效率),而對於延遲的增加所做的權衡。較高的流量逾時值可能會使得每個需求在等待授權的時間延長,但是他們卻能夠很明顯的改善一個十分擁塞的系統,到達頻寬的最大值,通常可以達到90 %以上。


以下是一個將這些概念放入的範例:


範例1

首先,先設定一組記憶體DMA從L1到L3記憶體,使用16位元的傳輸,而要搬移1024組16位元的字元將會佔用大約1100系統時脈(SCLK)週期。


接著開始從一組不同的外部記憶體插槽傳輸至視訊埠(PPI)。在PPI中利用16位元的unpacking,持續的將8位元資料送入一組NTSC視訊編碼器中。由於PPI會以27MHz的速率送出一組8位元的量,因此PPI傳輸所需要的DMA匯流排頻寬大約是13.5 M transfers / second。


當量測同時有PPI傳輸以及相同的1024字元MemDMA傳輸時,其完成所需時間需要3倍之多。


為什麼會如此?這是因為PPI DMA運作的優先等級比MemDMA通道的處理還要高的緣故。每當PPI準備就緒,要進行下一次的取樣時,匯流排就會反轉傳輸方向。這大約相當於在外部記憶體介面以及不同的內部DMA匯流排中所消耗掉的週期數。當啟用方向控制功能時,性能將會有明顯的增加,這是因為較少的匯流排迴轉。


根據經驗,在適量的系統運作下,最好能夠將同方向的連續傳輸最大化。然而對於負擔最大的系統流而言,最好是可以選擇位於範圍中間的數值,以便確保不會有任何一組周邊會因為存取外部記憶體而發生被鎖定的情況。當系統中使用了至少兩組的高頻寬周邊(像是PPIs)時,這點就特別的重要。


除了使用方向控制以外,在MDMA串流之間進行的傳輸也可以隨著應用裝置的需要將匯流排改成輪循式(round-robin)。使用這種類型的仲裁時,第一組DMA處理程序將可以取得存取DMA匯流排的授權,但是只有一定數量的週期,接著則是第二組DMA處理程序,然後又會回到第一組DMA。通道將會以這種形式改變,直到所有的資料都已經傳輸完畢為止。這項能力在雙核心處理器上最為有用(舉例來說,當兩個核心處理器都具有正在等待資料串流傳輸的作業時)。如果沒有這種輪循式特點,第一組的DMA傳輸將會發生,而第二組DMA處理程序則會受到延緩,直至第一組的作業完成。輪循式的優先處理有助於確保傳輸串流可以一個接一個的緊接完成。


當然,這種類型的排程可以手動方式來完成,藉由將要送至L3記憶體的資料予以緩衝至晶片內建記憶體。處理器核心能夠存取晶片內建的緩衝區,相較於對晶片外的緩衝區進行同樣的存取,這樣的方式將能夠以較低的延遲來執行先期處理功能。這點所帶來的直接影響就是系統效能的增加。此外,將這些資料予以緩衝至晶片內建的記憶體當中,將可以使周邊DMA在存取這些資料時更加的有效率。舉例來說,在作業中透過視訊埠來將一組視訊框架傳輸至L3記憶體當中,這將會使其他的周邊被鎖定而無法存取其所需要的資料,此乃因為視訊傳輸屬於高優先等級的處理程序。然而,藉由遞增方式將視訊線從視訊埠傳輸至L1或是L2記憶體,再啟始低優先等級的的MemDMA串流將這些資料安靜的傳輸至L3記憶體,而這也將可以讓系統的周邊存取其所需要的資料。


在系統資源之間的優先等級以及仲裁系統

另一個重要的考量,則是可以調整處理器次系統要如何彼此相互搭配的優先等級及仲裁系統。舉例來說,在Blackfin處理器當中,如果有關於L3記憶體的資料交換同時間發生的話,預設狀態下核心的優先等級是高於DMA存取的。這個意思就是假如在DMA控制器對L3發出讀取需求的同時,核心也要讀取L3的話,那麼核心將會贏得授權,亦即其讀取動作會優先完成。


而在即時系統研究中可能造成問題的情況。當在存取像是L3記憶體之類的共享資源時,如果處理器擁有高於DMA控制器的優先等級,這也會導致同時想要嘗試存取相同記憶體的DMA通道被鎖定住。假設處理器正在執行一項緊密的迴路作業,該作業是要從外部的記憶體擷取資料。DMA的運作將會遭到延緩,一直到處理器的迴路作業完成為止。然而並非只有內嵌的讀取迴路才會造成問題。有些作業像是快取記憶體線填充或是來自於L3記憶體的非線性程式碼執行也可能會發生問題,這是因為他們都會產生一連串不可中斷的存取作業。


另一個值得注意的議題,就是在處理器核心以及DMA控制器之間的優先等級系統。利用此設定方式可以讓DMA的運作總是顯示出「迫切」的狀態,而當DMA與處理器核心同時發出需求時,DMA將會因此而贏得授權。


在計畫開始進行的早期階段,總是會基於許多的理由而誘使整個設計去仰賴核心進行存取(而非DMA)。第一個理由就是認為這種存取資料的方法是模仿典型的標準系統。第二個原因則是開發者不願意深入研究DMA功能與性能的內部運作。然而,藉由核心與DMA仲裁的彈性,使用記憶體DMA控制器可以將資料從內部記憶體移出以及移入,這點將會在計畫進行的早期階段,就對於後續的整體發展擁有更多的掌控性。


DMA在多媒體系統中的一些現實考量

使用DMA控制器清除資料

針對從攝影機流入系統的資料,DMA控制器可以被用來當作大量資料的過濾器。 假設為了某些型態的處理需要,正在運作的視訊串流被送入了記憶體當中。當資料不需要為了顯示之用而被傳送回去時,那麼這些資料也沒有需要以空白資料的型態傳輸至記憶體內的緩衝區。


處理器的視訊埠通常會與視訊解碼器或是CMOS感測器直接連結,並且持續的接收取樣。也就是說,外部元件會持續的按時將資料以及空白資訊傳送進來。DMA控制器可以被設定為只將運作中的視訊傳送至記憶體當中。使用這種類型的功能,可以同時節省記憶體空間以及匯流排的頻寬。在使用NTSC視訊串流的情況下,這種類型的空白資料會佔用掉超過20%以上的總輸入視訊頻寬。在記憶體方面的節省只能算是最小的好處,因為額外的記憶體通常是可以採用外接的SDRAM形式來取得,而且只會有少許的系統成本差異。更為重要的是在整體處理期間所能夠節省下來的頻寬;在系統中原本一般會使用在移入空白資料的時間,可以被重新安排給其他的作業之用,舉例來說,可以用來將經過壓縮的資料傳送出去或是將參考資料從後期框架中移入。


雙重緩衝

先前已經討論過可以利用雙重緩衝的方式,來確保現有的資料不會被新的資料覆寫,直到準備好要將其覆蓋過去為止。對於視訊顯示緩衝的管理,恰可以作為這種架構的最佳範例。通常,系統中的來源視訊與最終的顯示之間如果存在有不同的速率時,那麼在既有的內容以及新的視訊框架之間就必須要有一個平滑的轉換機制。這個機制可以藉由雙重緩衝的安排來加以完成。將一組緩衝區指向現有的視訊框架上,這將能夠讓資料以特定的更新速率傳送到顯示上面。第二組緩衝區則以最新的輸出框架填滿。而當第二個緩衝區被填滿時,DMA中斷就會發出信號,表示可以將新的框架輸出至顯示上面。在此同時,第一組緩衝區會開始將經過處理,作為顯示之用的的視訊填入,而第二組緩衝區則會輸出目前的顯示框架。這兩組緩衝區會持續的以乒乓球的型態來回切換。


必須要注意的是,可以使用多組緩衝區,而非只能夠使用兩組,這樣的目的是為了替同步化作業提供更大的餘裕,而且也能夠降低中斷的頻率,以及其所衍生的潛在影響。


2D DMA的考量

在前次的討論中,曾經提到過一個特點,二維DMA(2D DMA)的能力具有多項系統等級的優點。簡短的重新檢視一下這項特點,以便討論其在音訊與視訊應用領域中,該如何扮演其角色。


當資料被傳輸通過像是I2S之類的數位連結時,它可能會包含有數個通道。舉例來說,這些通道全部被多工傳輸至一組要傳送至同一串列埠上的資料線中。在這種情況下,2D DMA可以被用來將資料去交錯(de-interleave),使得每個通道在記憶體當中都能夠以線性方式排定。參照(圖一)中所示對於這種安排的圖形敘述,其中從左邊與右邊通道的取樣會以解多工傳輸(de-multiplexed)的方式傳送至兩組個別獨立的區塊。這種自動化的資料安排方式,對於採用區塊處理程序的系統而言是具有極高價值的。



《圖一 2D DMA引擎被用來將(a) I2S的立體資料去交錯,並且分別傳送至(b)左邊與右邊的個別緩衝區當中。》 - BigPic:719x531
《圖一 2D DMA引擎被用來將(a) I2S的立體資料去交錯,並且分別傳送至(b)左邊與右邊的個別緩衝區當中。》 - BigPic:719x531

對於視訊傳輸而言,2D DMA提供了多項系統等級的優點。對於剛開始接觸的設計者,二維DMA可以將來往於外部記憶體之間的巨區塊(macroblock)傳輸予以簡化,讓資料巧妙的轉化為實際傳輸的一部份。這將可以消除往往會與非連續性資料在傳輸時所伴隨而生的間接效應。它也可以藉由選擇性的傳輸,讓系統將資料頻寬最小化,也就是說只有將輸入影像中所要保留的區域進行傳輸,非而整張影像。


另一個範例則是,2D DMA允許資料以序列的方式存入記憶體當中,這樣在進行處理時將會更加的平順。舉例來說,如(圖二)中所示,RGB資料能夠以交錯式的RGB888格式從CCD感測器中進入到處理器的L2記憶體當中,但是若使用2D DMA的話,這些資料就可以分別以R、G、與B平面的型態被傳輸至L3記憶體當中。針對視訊以及影像資料的交錯/去交錯色彩空間分量,可以減少在處理之前額外的資料搬移。



《圖二 利用2D DMA將資料去交錯。》 - BigPic:806x698
《圖二 利用2D DMA將資料去交錯。》 - BigPic:806x698

音訊與視訊串流的同步化

在多媒體系統當中,串流內容通常會包含有音訊與視訊的元素。由於資料的速率會依據這些串流的運行而定,所以DMA通道就必須被當作是音訊編解碼器以及視訊編碼器之間的連結介面。從觀賞者的角度來看,確保串流的同步化是相當重要的,因為這樣的協調性左右感受到的品質。


有許多的方法可以維持同步化。最常被使用的技術就是針對每組音訊與視訊緩衝區設定一整組的DMA描述符清單,並且讓處理器去管理這些清單。


相對於一個視訊框架的丟失,音訊串流中的一個瞬間異常會更加的引人注意,因此音訊緩衝區通常會被設定為是主要(master)串流。也就是說,讓音訊緩衝區能夠以持續的方式運轉是比較重要的。藉由使音訊串流得以持續不間斷,處理器才能夠在視訊框架顯示上進行任何必要的調整。從DMA緩衝區的角度來看,有一整組針對每個音訊與視訊緩衝區的描述符被建立出來。每份描述符清單都會被設定由一對指標(pointers)來加以控制,一個指標是用以填滿緩衝區,另一個指標則是將緩衝區清空。


每份描述符清單都需要加以維護,以確保讀取與寫入指標不會發生「 交叉(crossed)」的情況。也就是說,處理器不應該去更新一組正處於資料移出程序中的緩衝區。同樣的,DMA控制器也不應該對處理器正在填入資料的緩衝區進行送入資料的動作。


針對音訊與視訊的同步化而言,應該要保有一組整體的系統時間。每一組經過解碼的緩衝區都可以利用相對應的時間標籤(time tag)建立在記憶體當中。假如音訊串流是主要串流的話,那麼寫入緩衝區就會呈現完全循環的狀態。假如有視訊框架必須被刪除掉的話,用以清空緩衝區的DMA指標就會被重新編程,以便與最接近目前音訊緩衝區之時間戳記的時間配合。(圖三)所示為這種維持音訊/視訊同步化方法的



《圖三  音訊/視訊同步化的概念圖表》 - BigPic:899x622
《圖三  音訊/視訊同步化的概念圖表》 - BigPic:899x622

利用DMA控制器達到節省電源的效果

在一組具有電源管理能力設計的處理器上,DMA控制器可以提供極具價值的工具,藉此降低系統中的整體電源損耗。


當處理器沒有在緩衝區上執行作業時,它就可以被轉換成閒置狀態。而當處理器處於這種閒置狀態時,時鐘可以關閉掉,而有些時候連電壓也可以降低;這兩者都能夠降低處理器的電源耗損。


假設有一組音訊解碼系統。處理器會對經過編碼的內容執行解碼的功能。經過解碼的緩衝區會在記憶體中累積,而一但緩衝區達到了高水位(high-water mark),處理器就會進入休眠模式。在休眠模式下,DMA控制器(已經自處理器核心退耦)會從緩衝區將資料取出,並且傳送至音訊編解碼器上。DMA控制器必需要持續的運作,以確保良好的音訊品質。「低水位」可以藉由將DMA控制器進行重新編程來完成,這樣一來,當某些數量的資料取樣已經傳輸完成之後,DMA控制器就會產生一組中斷。這個中斷可以將其編程為「喚醒(wake-up event)」事件,它將可以讓處理器脫離休眠模式。而處理器又可以重新將緩衝區填滿,這麼一來,當DMA控制器再度繞回到緩衝區的起始點時,就又可以取得新的資料了。


假如這個流程持續的運行,所能獲得的淨效應就是處理器的運行週期(也就是處理器處於運作狀態的時間)將會大幅的降低。


DMA佇列管理員的實現

個複雜的系統設計中會包含有驚人數量,以並聯方式運行的DMA通道。而當要利用描述符對DMA通道進行編程時,所需要用到的描述符數量將會更加的可觀。在這些情況下,最好的方法就是實現某些形式的DMA佇列管理員。這類型管理員的範例可以參考如下網址的文件:http://www.analog.com/UploadedFiles/Associated_Docs/497894170437445_systemservices_man_Rev21.pdf


DMA管理員最適合用來管理在同時間進行傳輸的排程。其編程介面被設定成承接新的描述符,而這也代表了新的工作單元。


總而言之,DMA控制器是任何多媒體系統中不可或缺的一部份,而且很重要的是要能夠去瞭解其複雜性,以便對應用裝置做完整的最佳化處理。然而,DMA控制器也絕對不是系統中的唯一角色;其他的系統資源,像是記憶體以及處理器核心必須要藉由DMA控制器來加以仲裁,並且在它們之間實現完善的平衡狀態,而這些都需要對於資料是如何在系統內進行搬移有著基礎的認識與瞭解才能達成。


相關文章
CAD/CAM軟體無縫加值協作
雲平台協助CAD/CAM設計製造整合
光通訊成長態勢明確 訊號完整性一測定江山
分眾顯示與其控制技術
Sony強力加持!樹莓派發表專屬AI攝影機
comments powered by Disqus
相關討論
  相關新聞
» 慧榮獲ISO 26262 ASIL B Ready與ASPICE CL2認證 提供車用級安全儲存方案
» 默克完成收購Unity-SC 強化光電產品組合以滿足半導體產業需求
» 新思科技與台積電合作 實現數兆級電晶體AI與多晶粒晶片設計
» 恩智浦提供即用型軟體工具 跨處理器擴展邊緣AI功能
» AMD攜手合作夥伴擴展AI解決方案 全方位強化AI策略布局


刊登廣告 新聞信箱 讀者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 遠播資訊股份有限公司版權所有 Powered by O3  v3.20.2048.18.191.30.119
地址:台北數位產業園區(digiBlock Taipei) 103台北市大同區承德路三段287-2號A棟204室
電話 (02)2585-5526 #0 轉接至總機 /  E-Mail: webmaster@ctimes.com.tw