欧美成人黄色网_欧美精品久久_国产在线一区二区三区_免费视频久久久_亚洲二区视频_欧美大片免费高清观看

產品分類

當前位置: 首頁 > 行業動態

直接存儲器存取?基本原理、結構與應用(上)

發布日期:2022-07-14 點擊率:21

ay: block;">直接存儲器存取(DMA)控制器是一種在系統內部轉移數據的獨特外設,可以將其視為一種能夠通過一組專用總線將內部和外部存儲器與每個具有DMA能力的外設連接起來的控制器。它之所以屬于外設,是因為它是在處理器的編程控制下來執行傳輸的。值得注意的是,通常只有數據流量較大(kBps或者更高)的外設才需要支持DMA能力,這些應用方面典型的例子包括視頻、音頻和網絡接口。

一般而言,DMA控制器將包括一條地址總線、一條數據總線和控制寄存器。高效率的DMA控制器將具有訪問其所需要的任意資源的能力,而無須處理器本身的介入,它必須能產生中斷。最后,它必須能在控制器內部計算出地址。

一個處理器可以包含多個DMA控制器。每個控制器有多個DMA通道,以及多條直接與存儲器站(memory bank)和外設連接的總線,如圖1所示。在很多高性能處理器中集成了兩種類型的DMA控制器。第一類通常稱為“系統DMA控制器”,可以實現對任何資源(外設和存儲器)的訪問,對于這種類型的控制器來說,信號周期數是以系統時鐘(SCLK)來計數的,以ADI的Blackfin處理器為例,頻率最高可達133MHz。第二類稱為內部存儲器DMA控制器(IMDMA),專門用于內部存儲器所處位置之間的相互存取操作。因為存取都發生在內部(L1-L1、L1-L2,或者L2-L2),周期數的計數則以內核時鐘(CCLK)為基準來進行,該時鐘的速度可以超過600MHz。

每個DMA控制器有一組FIFO,起到DMA子系統和外設或存儲器之間的緩沖器的作用。對于MemDMA(Memory DMA)來說,傳輸的源端和目標端都有一組FIFO存在。當資源緊張而不能完成數據傳輸的話,則FIFO可以提供數據的暫存區,從而提高性能。

因為你通常會在代碼初始化過程中對DMA控制器進行配置,內核就只需要在數據傳輸完成后對中斷做出響應即可。你可以對DMA控制進行編程,讓其與內核并行地移動數據,而同時讓內核執行其基本的處理任務—那些應該讓它專注完成的工作。

圖1:系統和存儲器DMA架構。
圖1:系統和存儲器DMA架構。

在一個優化的應用中,內核永遠不用參與任何數據的移動,而僅僅對L1存儲器中的數據進行讀寫。于是,內核不需要等待數據的到來,因為DMA引擎會在內核準備讀取數據之前將數據準備好。圖2給出了處理器和DMA控制器間的交互關系。由處理器完成的操作步驟包括:建立傳輸,啟用中斷,生成中斷時執行代碼。返回到處理器的中斷輸入可以用來指示“數據已經準備好,可進行處理”。

圖2:DMA控制器。
圖2:DMA控制器。

數據除了往來外設之外,還需要從一個存儲器空間轉移到另一個空間中。例如,視頻源可以從一個視頻端口直接流入L3存儲器,因為工作緩沖區規模太大,無法放入到存儲器中。我們并不希望讓處理器在每次需要執行計算時都從外部存儲讀取像素信息,因此為了提高存取的效率,可以用一個存儲器到存儲器的DMA(MemDMA)來將像素轉移到L1或者L2存儲器中。

到目前為之,我們還僅專注于數據的移動,但是DMA的傳送能力并不總是用來移動數據。我們可以用代碼覆蓋的辦法來提高性能,將DMA的控制器配置為在執行前把代碼送入L1指令存儲器。代碼往往存儲于較大的外部存儲器中,而根據需要有選擇性的送入L1。

DMA控制器的編程

讓我們考察一下在定義DMA活動的過程中可以有哪些選項。我們將從最簡單的模型開始,并在此基礎上過渡到更為靈活的模型,這反過來增加了設置的復雜度。

對于任何類型的DMA傳輸,我們都需要規定數據的起始源和目標地址。對于外設DMA的情況來說,外設的FIFO可以作為數據源或者目標端。當外設作為源端時,某個存儲器的位置(內部或外部)則成為目標端地址。當外設作為目標端,存儲的位置(內部或者外部)則成為源端地址。

在最簡單的MemDMA情況中,我們需要告訴DMA控制器源端地址、目標端地址和待傳送的字的個數。采用外設DMA的情況下,我們規定數據的源端或者目標端,具體則取決于傳輸的方向。每次傳輸的字的大小可以是8、16或者12位。這種類型的事務代表了簡單的1維(“1D”)統一“跨度”(unity stride)的傳輸。作為這一傳輸機制的一部分,DMA控制器連續跟蹤不斷增加的源端和目標端地址。采用這種傳輸方式時,8位的傳輸產生1字節的地址增量,而16位傳輸產生的增量為2字節,32位傳輸則產生4字節的增量。上面的參數是基本的1D DMA傳輸的設置參數。

我們只需要改變數據傳輸每次的數據大小,就可以簡單地增加一維DMA的靈活性。例如,采用非單一大小的傳輸方式時,我們以傳輸數據塊的大小的倍數來作為地址增量。也就是說,若規定32位的傳輸和4個采樣的跨度,則每次傳輸結束后,地址的增量為16字節(4個32位字)。

雖然1D DMA得到了廣泛的應用,但用處更大的則是2維(2D) DMA,特別是在視頻應用中。2D功能是我們所討論的1D DMA的情形的一種直接擴展。除了XCOUNT和XMODIFY值之外,我們還需對對應的YCOUNT和YMODIFY值進行編程設定。2D DMA可以簡單地理解為一個嵌套的循環,即內循環由XCOUNT和XMODIFY來規定,外循環由YCOUNT和YMODIFY規定。一個1D DMA可以被簡單的視為2D傳輸的“內循環”,如下形式:

for y = 1 to YCOUNT /* 2D的外循環*/

for x = 1 to XCOUNT /* 1D的內循環 */

{

/* 傳輸循環主體轉移到這里 */

}

XMODIFY決定了XCOUNT每次減少時的DMA控制器的跨度值,而YMODIFY則決定了YCOUNT每次減少時對應的跨度值。與XCOUNT和XMODIFY一樣,YOUNT可以以傳輸數量來定義,而YMODIFY則以字節數來定義。值得注意的是,YMODIFY可以為負值,這會讓DMA控制器回轉到緩沖器的起始點。

對于外設DMA來說,傳輸的“存儲器端”可以是1D或2D。不過,在外設端,傳輸始終是1D的。唯一的限制是在DMA每一端(源端和目標端)傳輸的字節總數必須相同。例如,如果我們從3個10字節的緩沖器向外設饋入數據。例如,如果我們從3個10字節的緩沖器向外設發送數據,外設必須被設定為傳送30字節,具體方式則可以是任何可能的、所支持的傳輸寬度和傳輸計數值的組合。

MemDMA提供的靈活度則要更高一些。例如,如果我們可以建立一個1D-2D傳輸、一個1D-2D傳輸、1個2D-1D傳輸,且可自然而然建立一個2D-2D傳輸,唯一的限制條件是,在DMA傳輸模塊的兩端所傳送的字節總數必須相等。

DMA的設置

目前有兩類主要的DMA傳輸結構:寄存器模式和描述符模式。無論屬于哪一類DMA,表1所描述的幾類信息都會在DMA控制器中出現。當DMA以寄存器模式工作時,DMA控制器只是簡單地利用寄存器中所存儲的參數值。在描述符模式中,DMA控制器在存儲器中查找自己的配置參數。

表1:DMA寄存器
表1:DMA寄存器

基于寄存器的DMA

在基于寄存器的DMA內部,處理器直接對DMA控制寄存器進行編程,來啟動傳輸。基于寄存器的DMA提供了最佳的DMA控制器性能,因為寄存器并不需要不斷地從存儲器中的描述符上載入數據,而內核也不需要保持描述符。

基于寄存器的DMA由兩種子模式組成:自動緩沖(Autobuffer)模式和停止模式。在自動緩沖DMA中,當一個傳輸塊傳輸完畢,控制寄存器就自動重新載入其最初的設定值,同一個DMA進程重新啟動,開銷為零。

正如我們在圖3中所看到的那樣,如果將一個自動緩沖DMA設定為從外設傳輸一定數量的字到L1數據存儲器的緩沖器上,則DMA控制器將會在最后一個字傳輸完成的時刻就迅速重新載入初始的參數。這構成了一個“循環緩沖器”,因為當一個量值被寫入到緩沖器的最后一個位置上時,下一個值將被寫入到緩沖器的第一個位置上。

圖3:用DMA實現循環緩沖器。
圖3:用DMA實現循環緩沖器。

自動緩沖DMA特別適合于對性能敏感的、存在持續數據流的應用。DMA控制器可以在獨立于處理器其他活動的情況下讀入數據流,然后在每次傳輸結束時,向內核發出中斷。雖然有可能以恰當的方式阻止自動緩沖模式,但如果DMA進程需要定期啟動和停止時,采用這種工作方式就沒有什么意義。

停止模式的工作方式與自動緩沖DMA類似,區別在于各寄存器在DMA結束后不會重新載入,因此整個DMA傳輸只發生一次。停止模式對于基于某種事件的一次性傳輸來說十分有用。例如,非定期地將數據塊從一個位置轉移到另一個位置。當你需要對事件進行同步時,這種模式也非常有用。例如,如果一個任務必須在下一次傳輸前完成的話,則停止模式可以確保各事件發生的先后順序。此外,停止模式對于緩沖器的初始化來說非常有用。

描述符模型

基于描述符(descriptor)的DMA要求在存儲器中存入一組參數,以啟動DMA的系列操作。該描述符所包含的參數與那些通常通過編程寫入DMA控制寄存器組的所有參數相同。不過,描述符還可以容許多個DMA操作序列串在一起。在基于描述符的DMA操作中,我們可以對一個DMA通道進行編程,在當前的操作序列完成后,自動設置并啟動另一次DMA傳輸。基于描述符的方式為管理系統中的DMA傳輸提供了最大的靈活性。

ADI 的Blackfin處理器上有兩種主要的描述符方式—描述符陣列和描述符列表,這兩種操作方式所要實現的目標是在靈活性和性能之間實現一種折中平衡。

在描述符陣列模式下,描述符駐留在連續的存儲器位置上。DMA控制器依然從存儲器取用描述符,但是因為下一個描述符緊跟著當前的描述符,說明到何處去尋找下一個描述符(以及它們相應的描述符取用)的兩個數據字就并不必要。因為描述符并不包含這一“下一描述符”指針項,DMA控制器希望一組描述符在存儲器相互挨在一起,如同陣列一般。

當各描述符在存儲器中的分布位置并非“背對背”時,可以使用一個描述符列表。實際上這里涉及多種子模式,從而再一次實現了性能和靈活性之間的折中平衡。在“小描述符”模型中,描述符包括了一個單16位的域,用來給出“下一描述符指針”域的低位部分;高位部分則通過寄存器來獨立編程設定,并且不發生改變。當然,這將描述符限制在存儲器中一個特定的64K(=216)頁面上。當描述符的位置需要跨越這一邊界時,也可以提供一個“大”模型,它可以為“下一描述符指針”項提供32位的位置。

無論采用何種描述符模式,描述符的量值數越多,則描述符取用的次數就越多。這也就是為何Blackfin處理器定義了一個“柔性描述符方式”的原因,該模式可以修改描述符的長度,使之僅僅包括特定傳輸所需要的數據。例如,如果不需要2D DMA,YMODIFY和 YCOUNT 寄存器就不需要成為描述符數據塊的一部分。

描述符管理

管理描述符列表的最佳方法是什么?其實,這個問題的答案需要根據應用來定,但要明白存在何種替代方法很重要。

我們將描述的第一種選擇,其工作方式非常類似于一個自動緩沖DMA。它需要設定多種描述符,并將其串連到一起,正如圖4a所示的那樣。“串連”一詞意味著一個描述符指向下一個描述符,描述符的載入是自動的。為了使鏈條完整,最后一個描述符反向指向第一個描述符,于是整個流程就重復下去。使用這種技術而不是自動緩沖的一個理由就是,這些描述符可以保證傳輸的規模和方向上具有更大的靈活性。

圖4:由處理器進行調控的DMA描述符:(a)鏈接的描述符列表;(b)“節流調節式”的描述符管理。
圖4:由處理器進行調控的DMA描述符:(a)鏈接的描述符列表;(b)“節流調節式”的描述符管理。

第二個選擇則是由處理器來管理描述符列表。回想一下,描述符實際上是存儲器中的一個結構,每個描述符包含了一個配置字。每個配置字包含了“使能”位,其作用是在傳輸開始時進行調節。如果我們需要讓處理器在做好準備時去啟動每次具體的傳輸,我們就可以事先設定好所有的描述符,但把“使能”位清零。當處理器確定啟動描述符的時機已經到來時,它只需簡單地更新存儲器中的描述符,然后寫入DMA寄存器中,以讓處于停止狀態的通道啟動起來。圖4b示出了這一流程的一個例子。

這種類型的傳輸什么時候有用呢?請考慮一個需要將輸入流與輸出流實現同步的多媒體應用。例如,我們接收視頻采樣,將其傳輸到存儲器的速率可能會不同于將該視頻輸出顯示的速度。在實際系統中,即使你試圖讓流以恰好相同的時鐘傳輸,也會發生這種情況。在同步成問題的情況下,處理器可以調整對應于輸出緩沖器的DMA描述符。在下一個描述符啟用時,處理器可以通過調整目前的輸出描述符來實現流的同步,具體方式是利用一種信號量機制(semaphore mechanism)來確保每次只有一個項訪問共享資源。

在處理器之間使用內部的DMA描述符鏈或者基于DMA的流時,一種有用的做法是在所傳輸的數據塊的末尾添加一個額外的字,用以幫助標識正被發送的包,包括關于應該如何處理數據的信息和時間戳。圖4b中虛線所劃出的區域則示出了這種方案。

大多數成熟的應用都有以軟件形式實現的“DMA 管理器”功能。這可以作為操作系統或者實時內核的一部分來提供,但它也可以在沒有這兩者的條件下運行。在Blackfin處理器上,該功能可以作為VisualDSP++工具包的‘System Services’的一部分提供。這一管理功能可以讓你通過標準的API來轉移數據,而不必手工去配置每一個控制寄存器。

基本上,一個應用將DMA描述符的要求提交給DMA隊列管理器,其責任是處理每一次請求。請求的處理則是按照它們被應用軟件接收到的順序來進行的。指向“回調”函數的地址指針往往也是系統的一部分。該函數可以完成在數據緩沖準備好時你希望處理器來完成的工作,無需讓內核停留在高優先級的中斷服務例程的執行中。總的來說,DMA管理器可以簡化編程模型,因為它對數據的傳輸進行了抽象。

管理采用中斷的描述符隊列可以有兩種通用的方法:第一種基于在每次描述符完結時所發出的中斷,只有當你能確保每個中斷事件將單獨得到服務、無中斷溢出時,才使用這種方法;第二種方法是僅僅在由一個工作塊的最后一個描述符所規定的工作傳輸結束時發出中斷。工作塊是一個或者多個描述符的集合。

為了保持描述符隊列的同步,非中斷型軟件就必須維持一個添加到隊列中的描述符數量的計數,而中斷處理程序則維持一個對已完結的、從隊列中除去的描述符的計數。計數次數僅僅在DMA完成對所有的描述符的處理后暫停時才會相等。

本文小結

本文中,我們討論了DMA數據流的結構:基于寄存器的和基于描述符的,以及何時使用其中的某種結構。在下一期中,我們將分析某些先進的DMA功能特色,這些功能將協助數據在多媒體系統中有效地移動。

作者:

David Katz

Rick Gentile

美國模擬器件公司

下一篇: VideoCore技術傾情加

上一篇: 關注建置前注意事項,A

主站蜘蛛池模板: 久久久久亚洲av成人片 | 亚洲好穴 | 四虎精品在线 | 成年美女黄网站色大片免费看 | 一区二三区国产 | 欧美日本一道免费一区三区 | 含紧一点h边做边走动免费视频 | 成人毛片无码一区二区三区 | 四虎影视成人永久在线观看 | 人妻色综合网站 | 四虎www成人影院免费观看 | 韩国日本免费不卡在线观看 | 中文字幕人妻无码系列第三区 | 亚洲色www成人永久网址 | 奇米影视四色网 | 亚洲国产欧美日本视频 | 粗大的内捧猛烈进出少妇 | 日韩欧美综合在线 | 国产尤物视频 | 中文字幕99 | 日韩精品无码视频一区二区蜜桃 | 成人综合影院 | 国产无遮挡无码视频在线观看 | 亚洲欧美一区二区三区九九九 | 欧美一级片 在线播放 | 中文字幕不卡乱偷在线观看 | 天天干天天干天天干天天干天天干 | 免费看欧美一级a毛片 | 欧美在线高清视频 | 亚洲精品色一区二区三区 | 亚洲中文字幕久久精品蜜桃 | 成人年无码av片在线观看 | 人人妻人人澡av天堂香蕉 | 77777亚洲午夜久久多人 | 高清黄色直接看 | 中文字幕专区高清在线观看 | 中文字幕在线不卡精品视频99 | 推油少妇久久99久久99久久 | 国产成+人+综合+欧美亚洲 | 中文无码一区二区三区在线观看 | 美国爱爱片视频在线观看 |