專利名稱:Dma控制器及直接內(nèi)存存取控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及DMA技術(shù),尤其涉及一種DMA控制器及直接內(nèi)存存取控制方法。
背景技術(shù):
直接內(nèi)存存取(Direct Memory Access,DMA)是現(xiàn)代計算機的重要技術(shù)特色,其允許不同速度的硬件裝置相互通信,而并不會造成CPU的大量負載。DMA操作將數(shù)據(jù)從一個地址空間復(fù)制到另外一個地址空間,當CPU初始化該傳輸動作后,傳輸動作本身是由DMA控制器來實行和完成的,典型的例子就是移動一個外部內(nèi)存的區(qū)塊到芯片內(nèi)部更快的內(nèi)存區(qū)。這樣的操作并沒有讓處理器工作拖延,CPU反而可以被重新安排去處理其他的工作。DMA傳輸對于高效能嵌入式系統(tǒng)、算法和網(wǎng)絡(luò)系統(tǒng)都是很重要的?,F(xiàn)有技術(shù)中常規(guī)的DMA控制器只是能完成簡單的從一個地址到另一個地址指定長度的數(shù)據(jù)搬運工作。但是,在一些特殊應(yīng)用場合,常規(guī)的DMA控制器很難實現(xiàn)例如數(shù)據(jù)塊拆分、數(shù)據(jù)塊重組、數(shù)據(jù)結(jié)構(gòu)重排等功能,由CPU來完成這些工作的話會大量浪費CPU資源。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種DMA控制器及直接內(nèi)存存取控制方法,能夠擴展DMA控制器的靈活性和應(yīng)用范圍,降低在搬運負載數(shù)據(jù)結(jié)構(gòu)時CPU的負擔。為解決上述技術(shù)問題,本發(fā)明提供了一種DMA控制器,包括:換行間隔設(shè)定模塊,用于確定存儲在源存儲器內(nèi)的數(shù)據(jù)塊的每一行包含的字節(jié)數(shù),作為換行間隔;行內(nèi)操作單元數(shù)量設(shè)定模塊,用于確定該數(shù)據(jù)塊的每一行包含的操作單元個數(shù),作為行內(nèi)操作單元數(shù)量,所述操作單元包括一個或多個連續(xù)的字節(jié);行內(nèi)起始位置設(shè)定模塊,用于確定該數(shù)據(jù)塊的每一行中首個操作單元的起始位置,作為行內(nèi)起始位置;操作單元總數(shù)設(shè)定模塊,用于確定該數(shù)據(jù)塊內(nèi)包含的操作單元的總數(shù),作為操作單元總數(shù);操作單元突發(fā)長度設(shè)定模塊,用于確定所述操作單元包含的字節(jié)數(shù),作為操作單元突發(fā)長度;操作單元間隔步長設(shè)定模塊,用于確定同一行內(nèi)相鄰操作單元的起始位置之間的間隔,作為操作單元間隔步長;數(shù)據(jù)讀寫模塊,以所述換行間隔、行內(nèi)操作單元數(shù)量、行內(nèi)起始位置、操作單元總數(shù)、操作單元突發(fā)長度和操作單元間隔步長為讀寫參數(shù),讀取該源存儲器內(nèi)的數(shù)據(jù)塊包含的多個操作單元并將其寫入至DMA寫通道。根據(jù)本發(fā)明的一個實施例,該DMA控制器還包括:操作單元重用次數(shù)設(shè)定模塊,用于確定該數(shù)據(jù)塊內(nèi)每一操作單元在讀寫時的重用次數(shù),作為操作單元重用次數(shù),所述數(shù)據(jù)讀寫模塊采用的讀寫參數(shù)包括該操作單元重用次數(shù),所述數(shù)據(jù)讀寫模塊根據(jù)該操作單元重用次數(shù)的指示,將讀取的每一操作單元重復(fù)寫入至所述DMA寫通道。根據(jù)本發(fā)明的一個實施例,該DMA控制器還包括:操作單元有效性設(shè)定模塊,用于維持操作單元有效性分布圖,該操作單元有效性分布圖指示該數(shù)據(jù)塊中每一操作單元是否有效,所述數(shù)據(jù)讀寫模塊僅對有效的操作單元進行讀取和寫入。根據(jù)本發(fā)明的一個實施例,該DMA控制器還包括:連續(xù)數(shù)據(jù)抽樣模塊,控制所述操作單元突發(fā)長度設(shè)定模塊和操作單元間隔步長設(shè)定模塊將所述操作單元突發(fā)長度和操作單元間隔步長設(shè)置為相等,以實現(xiàn)連續(xù)數(shù)據(jù)抽樣。根據(jù)本發(fā)明的一個實施例,該DMA控制器還包括:不連續(xù)數(shù)據(jù)抽樣模塊,控制所述操作單元突發(fā)長度設(shè)定模塊和操作單元間隔步長設(shè)定模塊將所述操作單元間隔步長設(shè)置為大于所述操作單元突發(fā)長度,以實現(xiàn)不連續(xù)數(shù)據(jù)抽樣。根據(jù)本發(fā)明的一個實施例,該DMA控制器還包括:交疊數(shù)據(jù)抽樣模塊,控制所述操作單元突發(fā)長度設(shè)定模塊和操作單元間隔步長設(shè)定模塊將所述操作單元間隔步長設(shè)置為小于所述操作單元突發(fā)長度,以實現(xiàn)交疊數(shù)據(jù)抽樣。本發(fā)明還提供了一種直接內(nèi)存存取控制方法,包括:確定存儲在源存儲器內(nèi)的數(shù)據(jù)塊的每一行包含的字節(jié)數(shù),作為換行間隔;確定該數(shù)據(jù)塊的每一行包含的操作單元個數(shù),作為行內(nèi)操作單元數(shù)量,所述操作單元包括一個或多個連續(xù)的字節(jié);確定該數(shù)據(jù)塊的每一行中首個操作單元的起始位置,作為行內(nèi)起始位置;確定該數(shù)據(jù)塊內(nèi)包含的操作單元的總數(shù),作為操作單元總數(shù);確定所述操作單元包含的字節(jié)數(shù),作為操作單元突發(fā)長度;確定同一行內(nèi)相鄰操作單元的起始位置之間的間隔,作為操作單元間隔步長;以所述換行間隔、行內(nèi)操作單元數(shù)量、行內(nèi)起始位置、操作單元總數(shù)、操作單元突發(fā)長度和操作單元間隔步長為讀寫參數(shù),讀取該源存儲器內(nèi)的數(shù)據(jù)塊包含的多個操作單元并將其寫入至DMA寫通道。根據(jù)本發(fā)明的一個實施例,該控制方法還包括:確定該數(shù)據(jù)塊內(nèi)每一操作單元在讀寫時的重用次數(shù),作為操作單元重用次數(shù),所述讀寫參數(shù)還包括該操作單元重用次數(shù),在對所述數(shù)據(jù)塊包括的操作單元進行讀寫時,根據(jù)該操作單元重用次數(shù)的指示,將讀取的每一操作單元重復(fù)寫入至所述DMA寫通道。根據(jù)本發(fā)明的一個實施例,該控制方法還包括:維持操作單元有效性分布圖,該操作單元有效性分布圖指示該數(shù)據(jù)塊中每一操作單元是否有效,在對所述數(shù)據(jù)塊包括的操作單元進行讀寫時,僅對有效的操作單元進行讀取和寫入。根據(jù)本發(fā)明的一個實施例,該控制方法還包括:將所述操作單元突發(fā)長度和操作單元間隔步長設(shè)置為相等,以實現(xiàn)連續(xù)數(shù)據(jù)抽樣。根據(jù)本發(fā)明的一個實施例,該控制方法還包括:將所述操作單元間隔步長設(shè)置為大于所述操作單元突發(fā)長度,以實現(xiàn)不連續(xù)數(shù)據(jù)抽樣。根據(jù)本發(fā)明的一個實施例,該控制方法還包括:將所述操作單元間隔步長設(shè)置為小于所述操作單元突發(fā)長度,以實現(xiàn)交疊數(shù)據(jù)抽樣。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點:本發(fā)明實施例的DMA控制器根據(jù)換行間隔、行內(nèi)操作單元數(shù)量、行內(nèi)起始位置、操作單元總數(shù)、操作單元突發(fā)長度、操作單元間隔步長等多個讀寫參數(shù)進行數(shù)據(jù)的搬運,大大擴展了 DMA控制器的靈活性和應(yīng)用范圍,能夠針對多種復(fù)雜數(shù)據(jù)結(jié)構(gòu)進行傳輸,可以實現(xiàn)例如數(shù)據(jù)抽樣、數(shù)據(jù)重用、有效數(shù)據(jù)搬運等功能,有利于降低CPU在搬運負載數(shù)據(jù)結(jié)構(gòu)時的負擔,從而大幅度提升整體系統(tǒng)的效率。
圖1是本發(fā)明實施例的直接內(nèi)存存取控制方法的流程示意圖;圖2是本發(fā)明第一實施例的數(shù)據(jù)塊及其中的操作單元的結(jié)構(gòu)示意圖;圖3是本發(fā)明第二實施例的數(shù)據(jù)塊及其中的操作單元的結(jié)構(gòu)示意圖;圖4是本發(fā)明第三實施例的數(shù)據(jù)塊及其中的操作單元的結(jié)構(gòu)示意圖;圖5是本發(fā)明第四實施例的數(shù)據(jù)塊及其中的操作單元的結(jié)構(gòu)示意圖;圖6是本發(fā)明第五實施例的數(shù)據(jù)塊及其中的操作單元的結(jié)構(gòu)示意圖;圖7是本發(fā)明第五實施例的操作單元有效性分布圖的結(jié)構(gòu)示意圖;圖8是本發(fā)明實施例的DMA控制器的結(jié)構(gòu)示意圖。
具體實施例方式下面結(jié)合具體實施例和附圖對本發(fā)明作進一步說明,但不應(yīng)以此限制本發(fā)明的保護范圍。參考圖1,本實施例的直接內(nèi)存存取控制方法包括以下步驟:步驟S11,確定存儲在源存儲器內(nèi)的數(shù)據(jù)塊的每一行包含的字節(jié)數(shù),作為換行間隔;步驟S12,確定該數(shù)據(jù)塊的每一行包含的操作單元個數(shù),作為行內(nèi)操作單元數(shù)量,所述操作單元包括一個或多個連續(xù)的字節(jié);步驟S13,確定該數(shù)據(jù)塊的每一行中首個操作單元的起始位置,作為行內(nèi)起始位置;步驟S14,確定該數(shù)據(jù)塊內(nèi)包含的操作單元的總數(shù),作為操作單元總數(shù);步驟S15,確定所述操作單元包含的字節(jié)數(shù),作為操作單元突發(fā)長度;步驟S16,確定同一行內(nèi)相鄰操作單元的起始位置之間的間隔,作為操作單元間隔步長;步驟S17,以所述換行間隔、行內(nèi)操作單元數(shù)量、行內(nèi)起始位置、操作單元總數(shù)、操作單元突發(fā)長度和操作單元間隔步長為讀寫參數(shù),讀取該源存儲器內(nèi)的數(shù)據(jù)塊包含的多個操作單元并將其寫入至DMA寫通道。對于某些應(yīng)用領(lǐng)域,例如視頻應(yīng)用領(lǐng)域而言,因為在很多時候數(shù)據(jù)并不是完全連續(xù)的,因此需要采用行的概念。在行與行之間通常存在一些無用的數(shù)據(jù),因此需要跳過這部分數(shù)據(jù)進行換行操作。因此,本實施例中引入了換行間隔line_pitch和行內(nèi)操作單元數(shù)量line_active這兩個參數(shù),其中換行間隔line_pitch表示源存儲器內(nèi)(例如物理內(nèi)存)的數(shù)據(jù)塊的每一行包含的字節(jié)數(shù),也即實際換行的字節(jié)寬度;行內(nèi)操作單元數(shù)量line_actiVe表示每一行中包含的操作單元個數(shù)。進一步而言,每次啟動DMA操作必然會涉及此次DMA操作何時結(jié)束,現(xiàn)有技術(shù)通常會以數(shù)據(jù)塊的大小作為衡量標準,也即搬運完成指定字節(jié)數(shù)的數(shù)據(jù)后結(jié)束此次DMA操作。但是,實際上根據(jù)具體應(yīng)用的不同,相應(yīng)的算法也不相同,算法在每次計算過程中對數(shù)據(jù)的需求也并不相同,某些算法的計算過程可能僅需要一個字節(jié),而有些算法的計算過程可能需要幾個甚至更多個字節(jié)進行處理。因此,以一次計算操作需要的數(shù)據(jù)量為單位來計數(shù)應(yīng)當更加合理,即DMA操作的計數(shù)并非以字節(jié)數(shù)作為衡量標準,而是以一次計算操作所需要的操作單元的總數(shù)(其通常也是硬件模塊在一次計算操作中的執(zhí)行次數(shù))來計數(shù),本實施例中將其記為操作單元總數(shù)opt_unm。其中,每一操作單元包括一個或多個連續(xù)的字節(jié)。另外,本實施例中采用行內(nèi)起始位置dma_start來標記每一行中第一個操作單元的位置。對于一個操作單元實際包含的字節(jié)數(shù),本實施例中記為操作單元突發(fā)長度opt_burst_length0另外,對于相鄰操作單元之間的間隔,本實施例中記為操作單元間隔步長data_step,其具體指的是同一行內(nèi)相鄰操作單元的起始位置之間的間隔。對于連續(xù)數(shù)據(jù)的DMA搬運傳輸,操作單元間隔步長data_step和操作單元突發(fā)長度opt_burst_length是相同的。在需要抽樣或者拆分數(shù)據(jù)時,可以設(shè)定不同的操作單元間隔步長data_step來實現(xiàn)。此外,在某些具體應(yīng)用領(lǐng)域,需要將操作單元內(nèi)的數(shù)據(jù)復(fù)制重復(fù)多份,因此本實施例引入了操作單元重用次數(shù)reusejimes,用于指示每一才做單元的重復(fù)次數(shù)。在默認情況下,操作單元重用次數(shù)reuse_times設(shè)置為I。進一步而言,DMA操作通常是對數(shù)據(jù)作整塊的搬運,但是實際上搬運的數(shù)據(jù)中可能只有部分操作單元中的數(shù)據(jù)是有用的。因此,本實施例還維持操作單元有效性分布圖,例如可以在特定的內(nèi)存空間存放該操作單元有效性分布圖,用于指示整個數(shù)據(jù)塊中的各個操作單元是否有效。在進行DMA操作時,DMA控制器讀取參考該操作單元有效性分布圖,僅對有效的操作單元進行DMA搬運操作,而無效的操作單元則可以直接跳過。在有效的操作單元所占比例較低的情況下,采用此方式可以節(jié)省大量的總線資源。更加具體而言,將當前操作單元的計數(shù)記為opt_cnt,將當前操作單元的起始地址記為opt_addr,則當前操作的地址可以采用如下公式來表示:opt_addr=dma_start+(取整(opt_cnt/line_active)) X line_pitch+(取整((取余(opt_cnt/line_active)) /reuse_times)) Xdata_step。通過調(diào)整上述參數(shù),可以實現(xiàn)數(shù)據(jù)抽樣(例如連續(xù)數(shù)據(jù)抽樣、不連續(xù)數(shù)據(jù)抽樣、交疊數(shù)據(jù)抽樣等)、數(shù)據(jù)重用、有效數(shù)據(jù)搬運等多種功能。需要說明的是,上述參數(shù)不僅在從源存儲器讀取數(shù)據(jù)時作用于讀通道,還可以同時作用于DMA讀通道和DMA寫通道,其中DMA讀通道和DMA寫通道的相應(yīng)參數(shù)可以相互獨立,也即二者之間可以存在差異,結(jié)合多個DMA讀寫通道的配合,就可以實現(xiàn)各種更加復(fù)雜的功能,例如數(shù)據(jù)合并、拆分等。下面參考具體實施例進行詳細說明。參考圖2,其中采用0-31標注的連續(xù)小方塊代表連續(xù)存儲空間中的每一個字節(jié)數(shù)據(jù),下方采用optl-opt6標注的塊代表每一次DMA操作傳輸?shù)臄?shù)據(jù),也即操作單元。在圖2所示的第一實施例中,每一行包含16個字節(jié),因此換行間隔line_pitch=16 ;行內(nèi)首個操作單元是從第3個字節(jié)開始,因此行內(nèi)起始位置dma_start=3,相應(yīng)的,第二行的首個操作單元的起始地址就是dma_s t art+line_pitch=19;每一行內(nèi)執(zhí)行的DMA操作次數(shù)為3,也即行內(nèi)操作單元數(shù)量line_active=3 ;每一個操作單元包含4個連續(xù)字節(jié),也即操作單元突發(fā)長度opt_burst_length=4 ;相鄰操作單元之間的字節(jié)間隔是4個字節(jié),也即操作單元間隔步長data_step=4 ;數(shù)據(jù)塊內(nèi)包含的操作單元的總數(shù)為6,也即操作單元總數(shù)opt_unm=6。通過以上參數(shù),可以得到圖2所示的多個操作單元optl_opt6,其中每個操作單元包含連續(xù)的4個字節(jié),各個操作單元彼此連續(xù)。在進行DMA操作時,可以將多個操作單元optl-opt6從源存儲器中讀出,然后寫入至DMA寫通道內(nèi)。由此可見,由于引入了行和操作單元的概念,因此就能夠順利地在以16個字節(jié)為行的數(shù)據(jù)塊內(nèi)屏蔽掉每行最前的3個字節(jié)和最后的I個字節(jié),實現(xiàn)了對行內(nèi)連續(xù)數(shù)據(jù)的抽樣。連續(xù)數(shù)據(jù)抽樣操作例如可以用于圖像處理領(lǐng)域。圖像處理操作存在數(shù)據(jù)行的概念,當需要提取圖像中的特定矩形區(qū)域數(shù)據(jù)時,就需要用到行操作的概念,可以通過控制即行內(nèi)操作單元數(shù)量line_active等參數(shù),實現(xiàn)一行(其長度為換行間隔line_pitch)內(nèi)部分數(shù)據(jù)的抽樣,使得抽樣所得數(shù)據(jù)被DMA傳輸。參考圖3,圖3所示的第二實施例與圖2所示的第一實施例類似,其中,換行間隔line_pitch=16,行內(nèi)起始位置dma_start=3,行內(nèi)操作單元數(shù)量line_active=3,操作單元突發(fā)長度opt_burst_length=3,操作單元間隔步長data_step=4,操作單元總數(shù)opt_unm=6ο由于操作單元間隔步長data_step大于操作單元突發(fā)長度opt_burst_length,使得各個操作單元不連續(xù),從而可以實現(xiàn)行內(nèi)不連續(xù)數(shù)據(jù)抽樣。此外,數(shù)據(jù)抽樣的DMA操作配合多個通道的DMA操作,就可以非常方便地實現(xiàn)數(shù)據(jù)的拆分操作。不連續(xù)數(shù)據(jù)抽樣或者說是間隔數(shù)據(jù)抽樣例如可以應(yīng)用于圖像處理中的圖像縮小操作,對圖像做間隔抽樣可以減小數(shù)據(jù)量從而實現(xiàn)圖像的縮小。參考圖4,圖4所示的第三實施例與圖2所示的第一實施例類似,其中,換行間隔line_pitch=16,行內(nèi)起始位置dma_start=3,行內(nèi)操作單元數(shù)量line_active=4,操作單元突發(fā)長度opt_burst_length=4,操作單元間隔步長data_step=2,操作單元總數(shù)opt_unm=8ο由于操作單元間隔步長data_step小于操作單元突發(fā)長度opt_burst_length,使得各個操作單元彼此交疊,從而可以實現(xiàn)數(shù)據(jù)交疊的DMA操作,也就是實現(xiàn)交疊數(shù)據(jù)的抽樣。參考圖5,圖5所示的第四實施例中,換行間隔line_pitch=16,行內(nèi)起始位置dma_start=3,行內(nèi)操作單元數(shù)量line_active=4,操作單元突發(fā)長度opt_burst_length=4,操作單元間隔步長data_step=4,操作單元總數(shù)opt_unm=8,操作單元重用次數(shù)reuse_times=2。由于操作單元重用次數(shù)reuse_times設(shè)定為2,因此在進行DMA搬運操作時,每一個讀取的操作單元都被重復(fù)2次傳遞至DMA寫通道內(nèi),從而實現(xiàn)了數(shù)據(jù)的重用。數(shù)據(jù)重用例如可以用于圖像處理中的圖像放大操作,對數(shù)據(jù)進行重用可以將重用的數(shù)據(jù)插入原始數(shù)據(jù)中,從而實現(xiàn)圖像的放大。參考圖6和圖7,圖6和圖7所示的第五實施例中,換行間隔line_pitch=16,行內(nèi)起始位置dma_start=3,行內(nèi)操作單元數(shù)量line_active=3,操作單元突發(fā)長度opt_burst_length=4,操作單元間隔步長data_step=4,操作單元總數(shù)opt_unm=6。如圖7所示,第五實施例中維持了操作單元有效性分布圖,其記錄有各個操作單元的有效性。DMA控制器在實際DMA數(shù)據(jù)傳輸通道的基礎(chǔ)上增加一個有效性DMA讀通道,在進行DMA搬運操作時,該有效性DMA讀通道可以根據(jù)讀取的操作單元有效性分布圖,判斷數(shù)據(jù)塊中的各個操作單元是否有效,從而進行對應(yīng)的DMA搬運操作。其中,無效的操作單元(圖7中用O標出)將被跳過而不進行DMA搬運操作,僅對有效的操作單元(圖7中用I標出)進行DMA搬運操作。通過操作單元有效性分布圖,能夠?qū)崿F(xiàn)操作單元的選擇性搬運,或者說實現(xiàn)了有效數(shù)據(jù)的搬運。在無效操作單元較多的情況下,利用操作單元有效性分布圖的方式可以節(jié)省很多DMA操作對總線的吞吐。由上述多個實施例可見,本發(fā)明的方案可以非常方便地實現(xiàn)一些較為高級復(fù)雜的DMA操作,同時利用本發(fā)明的方案再結(jié)合多個通道的DMA讀操作和寫操作,就可以實現(xiàn)更加豐富的DMA應(yīng)用,例如數(shù)據(jù)抽樣、數(shù)據(jù)重用、有效數(shù)據(jù)搬運等。上述操作可以應(yīng)用于圖像縮小、放大等圖像處理操作,另外通過對各個參數(shù)的配置還可以實現(xiàn)更多復(fù)雜的圖像算法,例如圖像卷積等。參考圖8,本實施例還提供了一種DMA控制器31,包括:換行間隔設(shè)定模塊311、行內(nèi)操作單元數(shù)量設(shè)定模塊312、行內(nèi)起始位置設(shè)定模塊313、操作單元總數(shù)設(shè)定模塊314、操作單元突發(fā)長度設(shè)定模塊315、操作單元間隔步長設(shè)定模塊316、操作單元重用次數(shù)設(shè)定模塊317、操作單元有效性設(shè)定模塊318、數(shù)據(jù)讀寫模塊319。其中,換行間隔設(shè)定模塊311確定存儲在源存儲器32內(nèi)的數(shù)據(jù)塊的每一行包含的字節(jié)數(shù),作為換行間隔line_pitch ;行內(nèi)操作單元數(shù)量設(shè)定模塊312確定該數(shù)據(jù)塊的每一行包含的操作單元個數(shù),作為行內(nèi)操作單元數(shù)量line_active ;行內(nèi)起始位置設(shè)定模塊313確定該數(shù)據(jù)塊的每一行中首個操作單元的起始位置,作為行內(nèi)起始位置dma_start ;操作單元總數(shù)設(shè)定模塊314確定該數(shù)據(jù)塊內(nèi)包含的操作單元的總數(shù),作為操作單元總數(shù)opt_unm=6 ;操作單元突發(fā)長度設(shè)定模塊315確定操作單元包含的字節(jié)數(shù),作為操作單元突發(fā)長度opt_burst_length ;操作單元間隔步長設(shè)定模塊316確定同一行內(nèi)相鄰操作單元的起始位置之間的間隔,作為操作單元間隔步長data_step ;操作單元重用次數(shù)設(shè)定模塊317確定該數(shù)據(jù)塊內(nèi)每一操作單元在讀寫時的重用次數(shù),作為操作單元重用次數(shù)reuse_times ;操作單元有效性設(shè)定模塊318維持操作單元有效性分布圖,該操作單元有效性分布圖指示該數(shù)據(jù)塊中每一操作單元是否有效。數(shù)據(jù)讀寫模塊319以換行間隔line_pitch、行內(nèi)操作單元數(shù)量line_active、行內(nèi)起始位置dma_start、操作單元總數(shù)opt_unm、操作單元突發(fā)長度opt_burst_length和操作單元間隔步長data_step、操作單元重用次數(shù)reuse_times為讀寫參數(shù),讀取該源存儲器32內(nèi)的數(shù)據(jù)塊包含的多個操作單元并將其寫入至DMA寫通道,例如可以進一步寫入至目的存儲器33中。另外,數(shù)據(jù)讀寫模塊319依據(jù)操作單元有效性分布圖的指示,僅對有效的操作單元進行讀取和寫入。進一步而言,該DMA控制器31還可以包括連續(xù)數(shù)據(jù)抽樣模塊,對操作單元突發(fā)長度設(shè)定模塊315和操作單元間隔步長設(shè)定模塊316進行控制,將操作單元突發(fā)長度opt_burst_length和操作單元間隔步長data_step設(shè)置為相等,從而實現(xiàn)連續(xù)數(shù)據(jù)抽樣。此外,該DMA控制器31還可以包括不連續(xù)數(shù)據(jù)抽樣模塊,對操作單元突發(fā)長度設(shè)定模塊315和操作單元間隔步長設(shè)定模塊316進行控制,將操作單元間隔步長data_step設(shè)置為大于操作單元突發(fā)長度opt_burst_length,從而實現(xiàn)不連續(xù)數(shù)據(jù)抽樣。另外,該DMA控制器31還可以包括交疊數(shù)據(jù)抽樣模塊,對操作單元突發(fā)長度設(shè)定模塊315和操作單元間隔步長設(shè)定模塊316進行控制,將操作單元間隔步長data_step設(shè)置為小于操作單元突發(fā)長度opt_burst_length,從而實現(xiàn)交疊數(shù)據(jù)抽樣。關(guān)于該DMA控制器的更多詳細信息,請參見前述先前實施例中直接內(nèi)存存取控制方法的相關(guān)描述。本發(fā)明雖然以較佳實施例公開如上,但其并不是用來限定本發(fā)明,任何本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍內(nèi),都可以做出可能的變動和修改,因此本發(fā)明的保護范圍應(yīng)當以本發(fā)明權(quán)利要求所界定的范圍為準。
權(quán)利要求
1.一種DMA控制器,其特征在于,包括: 換行間隔設(shè)定模塊,用于確定存儲在源存儲器內(nèi)的數(shù)據(jù)塊的每一行包含的字節(jié)數(shù),作為換行間隔; 行內(nèi)操作單元數(shù)量設(shè)定模塊,用于確定該數(shù)據(jù)塊的每一行包含的操作單元個數(shù),作為行內(nèi)操作單元數(shù)量,所述操作單元包括一個或多個連續(xù)的字節(jié); 行內(nèi)起始位置設(shè)定模塊,用于確定該數(shù)據(jù)塊的每一行中首個操作單元的起始位置,作為行內(nèi)起始位置; 操作單元總數(shù)設(shè)定模塊,用于確定該數(shù)據(jù)塊內(nèi)包含的操作單元的總數(shù),作為操作單元總數(shù); 操作單元突發(fā)長度設(shè)定模塊,用于確定所述操作單元包含的字節(jié)數(shù),作為操作單元突發(fā)長度; 操作單元間隔步長設(shè)定模塊,用于確定同一行內(nèi)相鄰操作單元的起始位置之間的間隔,作為操作單兀間隔步長; 數(shù)據(jù)讀寫模塊,以所述換行間隔、行內(nèi)操作單元數(shù)量、行內(nèi)起始位置、操作單元總數(shù)、操作單元突發(fā)長度和操作單元間隔步長為讀寫參數(shù),讀取該源存儲器內(nèi)的數(shù)據(jù)塊包含的多個操作單元并將其寫入至DMA寫通道。
2.根據(jù)權(quán)利要求1所述的DMA控制器,其特征在于,還包括: 操作單元重用次數(shù)設(shè)定模塊,用于確定該數(shù)據(jù)塊內(nèi)每一操作單元在讀寫時的重用次數(shù),作為操作單元重用次數(shù),所述數(shù)據(jù)讀寫模塊采用的讀寫參數(shù)包括該操作單元重用次數(shù),所述數(shù)據(jù)讀寫模塊根據(jù)該操作單元重用次數(shù)的指示,將讀取的每一操作單元重復(fù)寫入至所述DMA寫通道。
3.根據(jù)權(quán)利要求1所述的DMA控制器,其特征在于,還包括: 操作單元有效性設(shè)定模塊,用于維持操作單元有效性分布圖,該操作單元有效性分布圖指示該數(shù)據(jù)塊中每一操作單元是否有效,所述數(shù)據(jù)讀寫模塊僅對有效的操作單元進行讀取和與入。
4.根據(jù)權(quán)利要求1所述的DMA控制器,其特征在于,還包括: 連續(xù)數(shù)據(jù)抽樣模塊,控制所述操作單元突發(fā)長度設(shè)定模塊和操作單元間隔步長設(shè)定模塊將所述操作單元突發(fā)長度和操作單元間隔步長設(shè)置為相等,以實現(xiàn)連續(xù)數(shù)據(jù)抽樣。
5.根據(jù)權(quán)利要求1所述的DMA控制器,其特征在于,還包括: 不連續(xù)數(shù)據(jù)抽樣模塊,控制所述操作單元突發(fā)長度設(shè)定模塊和操作單元間隔步長設(shè)定模塊將所述操作單元間隔步長設(shè)置為大于所述操作單元突發(fā)長度,以實現(xiàn)不連續(xù)數(shù)據(jù)抽樣。
6.根據(jù)權(quán)利要求1所述的DMA控制器,其特征在于,還包括: 交疊數(shù)據(jù)抽樣模塊,控制所述操作單元突發(fā)長度設(shè)定模塊和操作單元間隔步長設(shè)定模塊將所述操作單元間隔步長設(shè)置為小于所述操作單元突發(fā)長度,以實現(xiàn)交疊數(shù)據(jù)抽樣。
7.一種直接內(nèi)存存取控制方法,其特征在于,包括: 確定存儲在源存儲器內(nèi)的數(shù)據(jù)塊的每一行包含的字節(jié)數(shù),作為換行間隔; 確定該數(shù)據(jù)塊的每一行包含的操作單元個數(shù),作為行內(nèi)操作單元數(shù)量,所述操作單元包括一個或多個連續(xù)的字節(jié);確定該數(shù)據(jù)塊的每一行中首個操作單元的起始位置,作為行內(nèi)起始位置; 確定該數(shù)據(jù)塊內(nèi)包含的操作單元的總數(shù),作為操作單元總數(shù); 確定所述操作單元包含的字節(jié)數(shù),作為操作單元突發(fā)長度; 確定同一行內(nèi)相鄰操作單元的起始位置之間的間隔,作為操作單元間隔步長; 以所述換行間隔、行內(nèi)操作單元數(shù)量、行內(nèi)起始位置、操作單元總數(shù)、操作單元突發(fā)長度和操作單元間隔步長為讀寫參數(shù),讀取該源存儲器內(nèi)的數(shù)據(jù)塊包含的多個操作單元并將其寫入至DMA寫通道。
8.根據(jù)權(quán)利要求7所述的直接內(nèi)存存取控制方法,其特征在于,還包括:確定該數(shù)據(jù)塊內(nèi)每一操作單元在讀寫時的重用次數(shù),作為操作單元重用次數(shù),所述讀寫參數(shù)還包括該操作單元重用次數(shù),在對所述數(shù)據(jù)塊包括的操作單元進行讀寫時,根據(jù)該操作單元重用次數(shù)的指示,將讀取的每一操作單元重復(fù)寫入至所述DMA寫通道。
9.根據(jù)權(quán)利要求7所述的直接內(nèi)存存取控制方法,其特征在于,還包括:維持操作單元有效性分布圖,該操作單元有效性分布圖指示該數(shù)據(jù)塊中每一操作單元是否有效,在對所述數(shù)據(jù)塊包括的操作單元進行讀寫時,僅對有效的操作單元進行讀取和寫入。
10.根據(jù)權(quán)利要求7所述的直接內(nèi)存存取控制方法,其特征在于,還包括:將所述操作單元突發(fā)長度和操作單元間隔步長設(shè)置為相等,以實現(xiàn)連續(xù)數(shù)據(jù)抽樣。
11.根據(jù)權(quán)利要求7所述的直接內(nèi)存存取控制方法,其特征在于,還包括:將所述操作單元間隔步長設(shè)置為大于所述操作單元突發(fā)長度,以實現(xiàn)不連續(xù)數(shù)據(jù)抽樣。
12.根據(jù)權(quán)利要求7所述的直接內(nèi)存存取控制方法,其特征在于,還包括:將所述操作單元間隔步長設(shè)置為 小于所述操作單元突發(fā)長度,以實現(xiàn)交疊數(shù)據(jù)抽樣。
全文摘要
本發(fā)明提供了一種DMA控制器及直接內(nèi)存存取控制方法,該DMA控制器包括換行間隔設(shè)定模塊,確定換行間隔;行內(nèi)操作單元數(shù)量設(shè)定模塊,確定行內(nèi)操作單元數(shù)量;行內(nèi)起始位置設(shè)定模塊,確定行內(nèi)起始位置;操作單元總數(shù)設(shè)定模塊,確定操作單元總數(shù);操作單元突發(fā)長度設(shè)定模塊,確定操作單元突發(fā)長度;操作單元間隔步長設(shè)定模塊,確定操作單元間隔步長;數(shù)據(jù)讀寫模塊,以換行間隔、行內(nèi)操作單元數(shù)量、行內(nèi)起始位置、操作單元總數(shù)、操作單元突發(fā)長度和操作單元間隔步長為讀寫參數(shù),讀取該源存儲器內(nèi)的數(shù)據(jù)塊包含的多個操作單元并將其寫入至DMA寫通道。本發(fā)明能夠擴展DMA控制器的靈活性和應(yīng)用范圍,降低在搬運負載數(shù)據(jù)結(jié)構(gòu)時CPU的負擔。
文檔編號G06F13/28GK103207847SQ201310155789
公開日2013年7月17日 申請日期2013年4月27日 優(yōu)先權(quán)日2013年4月27日
發(fā)明者趙光煥, 胡紅旗, 劉君敏, 胡志卷 申請人:杭州士蘭微電子股份有限公司