帳號:
密碼:
最新動態
產業快訊
CTIMES / 文章 /
嵌入式系統程式設計重要抉擇
快取記憶體與DMA各擅勝場?

【作者: Rick Gentile】   2005年11月02日 星期三

瀏覽人次:【7345】


今日的嵌入式多媒體應用方案包括更多與系統控制( MCU的典型角色),和信號處理 (通常是DSP的職責)之間的交互關係。如今也有內嵌式嵌入式媒體處理器可以處理MCU和DSP的作業,而過去非常熟悉MCU應用模型的C語言程式設計師也正在轉換到新的領域,程式碼和資料流的智慧管理能夠使系統性能大幅改善。對MCU程式設計者而言,可以採取「放手(hands-off)」的方法和使用簡單的指令與快取來管理資料流具有很大的吸引力。不過我們仍舊需要考量媒體處理器的高性能直接記憶體存取(direct memory access;DMA)能力。


(圖一)表示在典型的多媒體應用中,選擇快取取憶體或DMA所必須作的一些取捨。本文的目的在突顯並分析了解出這些衝突點,進而能對系統開發作更佳的調適。


《圖一 嵌入式媒體處理器的概覽》
《圖一 嵌入式媒體處理器的概覽》

<圖註:圖1:嵌入式媒體處理器的概覽該圖表示L1記憶體與更大的外部記憶體之間的多重路徑。由外部儲存的程式碼與資料可以在L1中被快取到,或者區塊可被移至L1記憶體,當做是一種經由DMA控制器的獨立背景處理。傳送接收大型資料緩衝器的周邊可直接對它們進行直接記憶體存取(DMA)給外部記憶體,而不用涉及到處理流程中的L1記憶體。>


記憶體架構-管理需求

多數具有層級式記憶體架構的媒體處理器都會在許多不同大小,和性能等級的記憶體間努力取得平衡。最靠近核心處理器的記憶體(經常叫「第一層」或「L1」記憶體)往往以全時脈運作,而且通常能在一個週期(cycle)中執行指令。L1記憶體經常再分割成指令和資料區,以有效利用記憶體匯流排頻寬。此記憶體通常)可設定為SRAM或快取。最需要決定性(determinism)的應用程式可以在一個核心時脈週期存取晶片內建(on-chip)的SRAM。對於需要較大程式碼的系統,亦可以運用額外的晶片內建和外部(off-chip)記憶體,不過會增加延遲時間(latency)。


層級架構就本身來說只是普通適用;現在的高速處理器會遷就於只能在較慢的外部記憶體運作的大型應用程式,因而調慢作業速度。程式設計者可以選擇手動將重要的程式碼移進和移出內部SRAM,以增進效能。另外,在架構中增添資料和指令快取也可使外部記憶體更易管理。快取記憶體減少手動將指令和資料移動到處理器核心的次數,因而大幅簡化程式模型。


指令記憶體管理-使用快取或是DMA?


對於內嵌式嵌入式媒體處理器市場作一快速檢視後可以發現,核心處理器的速度都在600 MHz或更快。雖然這樣的性能開啟了更多新應用的可能性,其最高速度僅能在以內部L1記憶體執行程式碼的時候才能展現。當然在理想上內嵌式嵌入式處理器會有無限的L1記憶體,可是這並不實際。所以程式設計者必須考慮數種方式以利用處理器現存的L1記憶體,並對其系統作記憶體和資料流的最佳化設計。現在來看幾種情況。


首先而且最直接的情形是,當目標應用程式完全可以在L1指令記憶體內執行。在此情況下除了程式設計師直接將應用程式碼映射(map)到記憶體空間,並不需要任何特別的動作。而媒體處理器也很自然地必須在要架構層級上,有更佳優秀的程式碼密度性能。


第二個情況是 程式設計者採用快取(Cache)機制,存取容量較大且較便宜的外部記憶體。快取記憶體會自動將所需要的程式碼載入L1指令記憶體。這個過程的重要優點在於程式設計者不用管理程式碼進出快取的動作。此法在程式碼是以線性方式執行時最為適合。對非線性的程式碼來講,快取線(cache-line)可能會因更換太過頻繁而無法改善效能。


指令快取記憶體實際上扮演兩個角色。其一是幫助指令從外部記憶體以更有效的方式預先取得。這就是說當發生快取遺漏(cache miss)時,快取線回填(cache-line fill)會取得所需要的指令,以及其他快取線所包含的指令。如此可確定當第一筆指令被執行時,緊接在後的指令也已經取得了。另外既然快取記憶體通常是以取代「最久前使用過」記憶體位置的演算方式運作,最常執行的指令往往都保留在快取中。這也是好處之一,因為在L1快取中的指令能夠像在L1 SRAM一般,在單一核心週期週期中執行。也就是說,假使一段程式碼已經被讀取過而且尚未被替換,這個指令就已經準備好下一次的執行動作。


大多數嚴格追求時效性即時性的程式設計師,比較不信任使用快取記憶體可達成系統的最高效能。他們的論點是如果正好需要執行一組不在快取的指令時,效能反而會降低。利用快取鎖定(cache-locking)的機制正可以彌補這個缺點。一旦重要的指令載入快取記憶體後,可以鎖住快取線使指令不被替換掉。程式設計者因此能夠將需要的指令留在快取記憶體內,而讓快取機制管理較不重要的指令。


最後一種情形是使用獨立於處理器核心的DMA通道,可將程式碼從L1記憶體中搬進搬出。當核心運作於記憶體的某一區段時,DMA會帶入下一個被執行的區段。這種機制一般稱為重疊(overlay)技術。


雖然經由DMA將指令重疊進L1指令記憶體比起載入快取提供更多的決定性,這卻需要程式設計師投入較多的心力來完成。換句話說,程式設計者必須安排一個重疊的策略,以及適當設定DMA通道。不過一個妥善規劃的方法所換取的性能提昇還是很值得的。


資料記憶體管理


內嵌式嵌入式媒體處理器的資料記憶體架構對整體系統性能就像是指令時脈速度一樣地重要。由於在多媒體應用中經常會有多筆資料傳輸同時發生,匯流排結構必須要能支援核心和DMA存取內部及外部記憶體的各個區域。能夠自動仲裁DMA控制器和核心是很重要的,否則性能會大幅減低。僅有在設定DMA控制器後才需要核心-DMA的互動,然後當資料準備被處理時會對中斷產生反應。


資料擷取通常是處理器的基本功能之一。雖然將資料傳進或傳出外部記憶體一般而言是最沒有效率的機制,它卻是最容易的程式模型。小型快速寫入的記憶體有時候可當作是L1資料記憶體的一部份,但是如果核心必須從外部記憶體讀取全部的資料,則對較大的外建緩衝區之存取時間將會受到很大的影響。這不僅是需要多個時脈週期以擷取資料,而且核心也會一直在忙著處理這些任務。


考慮如何讓核心處理器有效處理讀寫動作是一個重要的課題。有效率的媒體處理器會有多槽位的寫入緩衝區,可以在所有載入的寫入動作完成前讓核心處理接下來的指令。以下面的程式碼為例,假使P0指向一組外部記憶體位址而P1指到一組內部記憶體位址,第50行指令將會在R0 ((從 第46行起))被寫入外部記憶體之前就被執行:



…Line 45: R0 =R1+R2;


Line 46: [P0] = R0; // Write the value contained in R0 to slower external memory


Line 47: R3 = 0x0;


Line 48: R4 = 0x0;


Line 49: R5 = 0x0;


Line 50: [P1] = R0; // Write the value contained in R0 to faster internal memory


在多媒體應用和其他資料密集的作業裡,將大筆的儲存資料經常移進移出SDRAM有其難度。因為靠核心擷取資料一定會花一些時間,大量的傳輸必須仰賴DMA或是快取以維持系統效能。


使用DMA作資料管理


想要在多媒體系統中有效使用DMA,就必須要有足夠的DMA通道來完全地支援處理器的周邊週邊裝置以及多組記憶體DMA串流。明白這一點是很重要的,因為一定會有原始的媒體串流進入外部記憶體(經由高速週邊裝置),同時資料區塊會在外部和L1記憶體來回移動供核心處理。還有DMA引擎可以讓資料直接在週邊和外部記憶體間傳輸,不用「中途停留」在L1記憶體,這可以節省密集演算中許多額外的資料傳遞。


隨著資料速率和性能的需求提昇時,設計者對其配置的「系統性能調節」控制也變得愈發重要。舉例而言,DMA控制器或許可以調整作為在每一時脈週期傳輸一個資料字元。當同方向有多筆傳輸在進行時(例如全部從內部記憶體移到外部),這通常會是操作控制器最有效的方式,因為可避免DMA匯流排產生閒置時間。


不過萬一雙向都有多筆影音串流時,「突發(burst)控制」便是避免一筆串流佔用整個匯流排的必要手段。比方說,如果DMA控制器總是開放DMA匯流排給準備傳輸資料字元的週邊,那麼在連接到SDRAM時整體輸出量會因而降級。在幾乎每一時脈週期都改變資料傳輸方向的情形時,SDRAM匯流排的轉向延遲會大幅降低輸出量。因此具有可程式化通道突發容量的DMA控制器,會比其他只有固定傳輸頻寬的控制器有著明顯的優勢。由於每一DMA通道都可以連結週邊裝置到內部或外部記憶體,因此可以自動對週邊裝置提供緊急匯流排的連結服務也是很重要的。


另外一個功能,二維(2 D)DMA,可以提供多個系統層級的優點。其一是可以讓資料在記憶體內以比較直觀的處理次序置放。例如(圖二)所示,luma /chroma或RGB資料可能會以序列的方式由影像感測器傳來,但是能夠自動儲存在不同的記憶體緩衝區中。2D DMA的交錯/反交錯(interleaving/deinterleaving)功能省下了在處理視訊和影像資料前,記憶體匯流排的額外作業。二維DMA的選擇性傳輸功能亦可使系統的資料頻寬最小化,例如只傳送想要的輸入影像區域,而不用傳整個影像。


《圖二 2D DMA功能可立即將資料分離成緩衝器》
《圖二 2D DMA功能可立即將資料分離成緩衝器》

其他重要的DMA功能包括排列DMA通道的優先等級以符合現有的周邊任務需要,同時可設定相對應的DMA中斷以配合優先等級。這些功能有助於確保資料緩衝不會因為DMA對其他週邊的活動而產生溢流(overflow),而程式設計師也有額外的自由度可以基於每一DMA通道的資料交通進行系統的整體最佳化。


因為內部記憶體一般都是以次記憶庫(sub-bank)的方式構築,只要將資料放在不同的記憶庫中,就能在一個時脈週期中同時讓DMA控制器和核心存取。舉例說明,核心可以在一個次記憶庫中運作,而DMA則在第二個次記憶庫中佔佔了一個新的緩衝區。在某些情況下同時存取同一個次記憶庫也是有可能的。當存取外部記憶體時,通常只有一組實體匯流排在同步與非同步記憶體之間進行多工作業。


關於資料快取


現在DMA控制器所具備的彈性可說是一把雙面刃。當一個大型的C/C++應用程式在處理器之間移植時,程式設計者有時候會猶豫是否要將DMA功能整合進已經可作業的程式碼。這裡就是資料快取記憶體派上用場的時候。通常資料快取會將資料帶入L1記憶體作最快的處理。資料快取之所以吸引人是因為其動作類似迷你DMA,但不需要花程式設計者太多的心力去設計。


由於典型快取回填的特性,資料快取最有用的時候是處理器作業於外部記憶體的連續資料位置時。這是因為快取不只是儲存現在處理中的即時資料,它甚至會預先擷取鄰近區域的資料。換句話說,快取機制假設現有的資料字元有很大的機會是將被處理的鄰近資料區塊的一部份。這個猜測對多媒體串流應用是很合理的。


既然資料緩衝通常源自於外部週邊裝置,以資料快取作業並不總像指令快取那樣容易。原因是必須要用手動的方式來維持非「窺探性」快取記憶體的一致性。對這些快取記憶體而言,必須要在嘗試存取新資料之前使資料緩衝失效。在以C為基礎的應用程式內涵中,這種資料是屬於「揮發性的」。


在一般的情形中,當存在快取中的變數值不同於來源記憶體時,這表示快取線可能已經「髒了」而仍然必須寫回記憶體。這個觀念並不適用於揮發性資料。反而在這種情形快取線或許是「乾淨的」,但是來源記憶體己經改變而核心處理器並不知道。此情況中,在核心能夠安全存取資料快取中的一筆揮發性變數前,必須要先讓影響到的快取線失去效用((但不是沖刷!))。有兩種方法可以達到此目的。快取可以被直接寫入,或者執行一個「使快取失效」的指令讓目標記憶體位址失效。直接法通常比較繁瑣,但是兩種方法是可以交互使用的。然而當有大型資料緩衝時((例如一個大於資料快取的容量)),直接法通常是較好的選擇。失效指令永遠較適合於緩衝區容量小於快取容量的情況。這在即使需要迴圈((loop))仍然成立,因為失效指令通常是隨著每一個快取線的大小增加,而不是一般在正常位址模式的1、2、或4位元增幅。


另一個重點是訂定揮發性變數,不管是否被放入快取記憶體。如果同時被核心處理器和DMA控制器所共享,則程式設計師必須要啟用某些安全作業的信號。總結來說,最好將揮發性資料跟資料快取撇清關係。


選擇DMA或快取的系統導引


接著將參考讓我們看看三種廣泛使用的系統組態,以探究那一種方法最適合於某種系統分類。


指令快取,資料DMA


這大概是最多人使用的系統模型,因為媒體處理器的架構經常就是這個樣子。假如應用程式負擔得起,將程式碼存入快取中能夠減緩指令流管理的複雜度。這適用於系統並不需要很強的即時性時,所以一個快取遺漏並不會造成緊臨事件(例如,視訊更新或是音訊/視訊同步化)時效性太大的災難。


此外,當處理器性能遠超過其處理需求時,快取機制一般而言是比較安全的方式,因為快取遺漏比較不會產生傳輸瓶頸。雖然在實務上可能不常使用「功能過強」的處理器,不過我們依然可用能解碼和播放壓縮影音的可攜式媒體播放器為例作說明。在放音模式的性能需求僅會是播放視訊時的數分之一。因此每種模式的指令/資料管理機制有可能會不同。


經由DMA管理資料是多數多媒體應用的第一選擇,因為這通常牽涉到操縱大量的壓縮及未壓縮視訊、圖形和音訊緩衝。除非資料是在準穩定的狀態(例如螢幕上的固定圖示),否則將緩衝資料存入快取是沒有什麼意義的。還有如上文中所之前的討論的,通常會有同時多筆資料緩衝傳輸進出核心處理器的情形,未處理的區塊要被調整,部份調整過的區段準備移到暫存區,而完全處理完的區段則被送往外部顯示或儲存元件。DMA是這些緩衝的邏輯管理工具,因為它允許核心處理器不必擔心如何搬運就能夠作業。


指令快取,資料DMA/快取


這個方法跟上一個類似,除了部份的L1資料記憶體被區分成快取,而其餘的SRAM可以當成DMA用。此架構在處理關於大量靜態係數或查詢表的演算法時非常有用。舉例來說,存入一個正弦/餘弦表到資料快取可幫助快速地計算FFT。量化表可以存入快取以加速JPEG編解碼則是另一個例子。只不過這個方法有其限制,當應用程式得以在一個時脈內存取常用的常數和表格時,也放棄了等量的資料SRAM,因而限制了讓一個時脈存取資料可用的緩衝大小。評估這個交換條件的有用方法是在一個統計圖表(許多開發工具套件有提供)上嘗試不同的情境(資料 DMA/快取 vs僅有DMA), 以評斷各個環境下花在程式碼區塊的時間百分比。


指令DMA,資料DMA


這種情形的資料和程式碼之間的依存關係十分緊密,所以開發人員必須要手動設定指令和資料區段搬移進出晶片的時程。在這種需要強調強時效性即時性的系統中決定性是必要的,所以快取並不適合。


雖然這個方法需要較多的規劃,其結果成果是一個需要執行的程式碼永遠比資料先出現,而且緩衝溢流也不會遺漏資料區塊的決定性系統。因為DMA流程可以同時串連而不須核心作業,可以保證新流程開始時上一個已經完成,所以資料或程式碼的移動也保證是達成的。這是同步資料和指令區塊最有效的方法。


指令/資料DMA的組合尚有一個值得一提的理由。它提供了一個在模擬和除錯期間測試系統編碼和資料流的便利辦法,因為這個時候一般無法直接存取快取。程式設計者可以調整或強調系統組態的「問題點」。


系統會需要指令和資料DMA的一個範例是視訊編碼器/解碼器。視訊與其相關音訊需要是決定性的以滿足使用者經驗。如果DMA在每一次完整緩衝轉移後都發出中斷訊號給核心,可能會造成系統明顯的延遲,因為中斷需要與其他事件爭奪優先順序。還有在中斷服務的頭尾內容轉換固定需要好幾個核心處理器週期。這些因素加起來都會影響為了保持系統是否為決定性的首要目標。


(圖三)和(圖四) 為綜合以上的討論,所提供的快取或DMA選擇導覽。



《圖三 指令快取vs.DMA決定流程》
《圖三 指令快取vs.DMA決定流程》
《圖四 資料快取vs.DMA決定流程》
《圖四 資料快取vs.DMA決定流程》

結語

簡而言之,並沒有一個單一的答案來說明快取記憶體和DMA何者才應該是多媒體系統中程式碼和資料傳輸的最佳選擇。然而一旦開發人員意識到其中的各擅勝場,就可以到達一個「中間地帶」作為系統的最佳狀態。


(作者任職於ADI美商亞德諾Blackfin應用方案事業群)


延 伸 閱 讀
未來智慧手機的電源管理技術

在測試完成之前,時隙1定時器又截止,此時一個DMA記憶體-埠測試模組被啟動,它設置任意的DMA通道並退出。現在,DMA已在後台執行,而原來的複製測試又重新執行。隨後又產生一個時隙3定時器中斷,使用DMA通道5啟動記憶體-記憶體傳輸並退出。相關介紹請見「 自動實現半導體元件系統強化測試的方法」一文。

DMA 的傳輸操作可以發生在ADSP-BF531/BF532/BF533處理器的內部記憶體到與有DMA能力的外部設備之間。而且,DMA傳輸也能夠在DMA外部設備和連接到外部記憶體介面的外部設備(包括SDRAM控制器和非同步存儲控制器)之間。你可在「 記憶體- SDRAM 」一文中得到進一步的介紹。

從處理器的角度來看,CPU 根本不知道發生了什麼事;而從快取記憶體與主記憶體中讀取資料的分別,僅在於傳回資料所花的時間而已。就儲存容量而言,快取記憶體比RAM 小得多。因此,主記憶體中的每筆資料不可能存放在快取中。在「 儲存空間的族譜」一文為你做了相關的評析。

市場動態

記憶體的DMA控制器提供高帶寬的資料傳輸能力,它能夠在內部L1/L2記憶體和外部記憶體(包括PCI存儲空間)之間執行代碼或者資料的塊傳輸。相關介紹請見「ADSP-21535 Blackfin的Mem DMA高速通信」一文。

Silicon Labs.宣佈推出快閃記憶體容量加倍的新型微控制器C8051F316和C8051F317,內含16KB快閃記憶體並採用4 × 4毫米的24接腳QFN封裝,最適合為相機模組、行動電話和可攜式遊戲機等空間有限應用,以提供所要求的快閃記憶體、低功耗和精巧體積。你可在「 Silicon Labs.推出記憶體容量更大的小型微控制器」一文中得到進一步的介紹。

華邦再推出新的4Mb快閃記憶體元件,提供客戶更低耗電量、高效能及高穩定性的產品,以滿足客戶在應用設計上的需求。在「 華邦推出新製程技術─快閃記憶體解決方案」一文為你做了相關的評析。

相關文章
以馬達控制器ROS1驅動程式實現機器人作業系統
探討用於工業馬達控制的CANopen 協定
確保機器人的安全未來:資安的角色
智慧型無線工業感測器之設計指南
自動測試設備系統中的元件電源設計
相關討論
  相關新聞
» 日本SEMICON JAPAN登場 台日專家跨國分享半導體與AI應用
» Nordic Thingy:91 X平臺簡化蜂巢式物聯網和Wi-Fi定位應用的原型開發
» 貿澤、ADI和Bourns出版全新電子書 探索電力電子裝置GaN優勢
» 豪威集團推出用於存在檢測、人臉辨識和常開功能的超小尺寸感測器
» ST推廣智慧感測器與碳化矽發展 強化於AI與能源應用價值


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

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