專利名稱:直接存儲器訪問控制裝置及控制其傳輸?shù)姆椒?br>
技術(shù)領(lǐng)域:
本發(fā)明一般涉及計(jì)算機(jī)系統(tǒng)的直接存儲器訪問傳輸,更具體地,涉及一種符合高保真音頻(High Definition Audio)規(guī)范的直接存儲器訪問控制裝置以及相關(guān)的數(shù)據(jù)傳輸方法。
背景技術(shù):
近年來,隨著多媒體技術(shù)的發(fā)展,高保真音頻(HighDefinition Audio,HD audio)規(guī)范已經(jīng)逐漸取代沿用多年的AC′97音頻規(guī)范,并廣泛應(yīng)用于計(jì)算機(jī)系統(tǒng)以提升音頻播放效果。與AC′97相比,HD Audio具有數(shù)據(jù)傳輸帶寬大、音頻回放精度高、支持多聲道陣列麥克風(fēng)音頻輸入、CPU的占用率更低和底層驅(qū)動程序可以通用等特點(diǎn)。高保真音頻規(guī)范通過建立與音頻流連接的直接存儲器訪問(DMA)控制器音頻子系統(tǒng)在計(jì)算機(jī)系統(tǒng)上實(shí)現(xiàn)播放DVD音頻、Dolby數(shù)字和THX環(huán)繞聲EX。高保真音頻規(guī)范可以應(yīng)用在多音頻流(Multi-Streaming)的音效應(yīng)用環(huán)境,例如,在計(jì)算機(jī)上聽音樂或玩游戲的同時(shí)進(jìn)行語音聊天,甚至同時(shí)接聽網(wǎng)絡(luò)電話。為建立一符合高保真音頻規(guī)范的計(jì)算機(jī)系統(tǒng),我們需要設(shè)計(jì)一種DMA控制裝置,其用于建立多個相互獨(dú)立的DMA傳輸信道以同時(shí)支持多組音頻流的輸入與輸出。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種符合高保真音頻規(guī)范的直接存儲器訪問控制裝置及其相關(guān)的數(shù)據(jù)傳輸方法。
本發(fā)明提供一種直接存儲器訪問控制裝置,其包括一數(shù)據(jù)處理模塊,用以發(fā)出一傳輸請求;以及一直接存儲器訪問控制器,用以依據(jù)該傳輸請求讀取存儲于該直接存儲器訪問控制器內(nèi)的一組傳輸參數(shù)并依據(jù)該組傳輸參數(shù)存取一存儲裝置,所述直接存儲器訪問控制器包括一運(yùn)算模塊,通過計(jì)算該組傳輸參數(shù)判斷一數(shù)據(jù)塊是否已被存取完。
本發(fā)明提供一種直接存儲器訪問傳輸方法,其包括仲裁一個或多個傳輸請求的優(yōu)先級;輸出與優(yōu)先級最高的傳輸請求相對應(yīng)的存儲于一直接存儲器訪問控制器中的一組傳輸參數(shù);依據(jù)該組傳輸參數(shù)進(jìn)行直接存儲器訪問傳輸;及計(jì)算該組傳輸參數(shù)以判斷一數(shù)據(jù)塊是否已被存取完。
本發(fā)明提供了一種直接存儲器訪問控制裝置,其適用于符合高保真音頻規(guī)范的計(jì)算機(jī)系統(tǒng),并且可建立多個相互獨(dú)立的直接存儲器訪問傳輸信道以同時(shí)支持多組音頻流的輸入與輸出。
圖1是可執(zhí)行直接存儲器訪問傳輸?shù)挠?jì)算機(jī)系統(tǒng)的框圖。
圖2是音頻流通過直接存儲器訪問控制器連接內(nèi)存的示意圖。
圖3是本發(fā)明一個實(shí)施例的直接存儲器訪問控制裝置與計(jì)算機(jī)系統(tǒng)內(nèi)存溝通的框圖。
圖4是本發(fā)明另一個實(shí)施例的直接存儲器訪問控制裝置與計(jì)算機(jī)系統(tǒng)內(nèi)存溝通的框圖。
圖5是本發(fā)明直接存儲器訪問控制裝置執(zhí)行一讀取數(shù)據(jù)請求的示意圖。
圖6是本發(fā)明一個實(shí)施例的流程圖。
圖7是本發(fā)明又一個實(shí)施例的直接存儲器訪問控制裝置與計(jì)算機(jī)系統(tǒng)內(nèi)存溝通的框圖。
圖8是本發(fā)明又一個實(shí)施例的直接存儲器訪問控制裝置與計(jì)算機(jī)系統(tǒng)內(nèi)存溝通的框圖。
具體實(shí)施例方式
通過下面結(jié)合示例性地示出一例的附圖進(jìn)行的描述,本發(fā)明的上述和其他目的和特點(diǎn)將會變得更加清楚。
依照高保真音頻(High Definition Audio)規(guī)范,所有數(shù)據(jù)都必須通過直接存儲器訪問(簡稱DMA)控制器傳輸至設(shè)備(例如音箱、電話、麥克風(fēng)等)或由設(shè)備輸出至系統(tǒng)內(nèi)存。如圖1所示,通常符合高保真音頻規(guī)范的計(jì)算機(jī)系統(tǒng)包括中央處理器10、計(jì)算機(jī)系統(tǒng)的內(nèi)存11、用以控制內(nèi)存11各項(xiàng)操作的內(nèi)存控制器12、用以控制高保真音頻傳輸?shù)母弑U嬉纛l控制器13、設(shè)在高保真音頻控制器13內(nèi)的DMA控制裝置14及設(shè)備15~17。內(nèi)存控制器12可以通過系統(tǒng)總線與高保真音頻控制器13溝通。設(shè)備15~17可以為錄音設(shè)備,也可以為播放音頻的裝置,且設(shè)備15~17通常分別設(shè)有通過高保真音頻總線(HighDefinition Audio Link)與高保真音頻控制器13溝通的數(shù)據(jù)信號轉(zhuǎn)換譯碼器(codec)(例如,音頻codec,modem codec等),用于對音頻數(shù)據(jù)進(jìn)行編譯碼處理。
如圖2所示,可用于放音或錄音的設(shè)備15~17與內(nèi)存11通過多個相互獨(dú)立的音頻流(stream)S1~S3傳輸數(shù)據(jù),音頻流可以是由內(nèi)存11輸出并分別通向設(shè)備15~17(例如音頻流S3),也可以由設(shè)備15~17其中一個通向內(nèi)存11(例如音頻流S2)。每一音頻流必須通過相應(yīng)的DMA控制器14與內(nèi)存11連接。為建立DMA控制器音頻子系統(tǒng),內(nèi)存11設(shè)有n個分別供DMA控制器1~n訪問的緩沖描述符列表(Buffer Descriptor List)BDL1~n及n個分別與緩沖描述符列表BDL1~n相對應(yīng)的數(shù)據(jù)存儲區(qū)1~n。每一緩沖描述符列表包含至少兩個緩沖描述符列表入口(Buffer Descriptor List Entry)BDLE1~n(n≥2),每一數(shù)據(jù)存儲區(qū)包含至少兩個數(shù)據(jù)塊1~n(n≥2)。每一緩沖描述符列表入口BDLE1~n包含一數(shù)據(jù)塊基址(內(nèi)存基址)及該數(shù)據(jù)塊的長度,也就是說,通過讀取緩沖描述符列表入口BDLE1~n可獲得一相應(yīng)數(shù)據(jù)塊的基址及數(shù)據(jù)塊長度。因而,當(dāng)需要進(jìn)行數(shù)據(jù)傳輸時(shí),DMA控制裝置14首先驅(qū)使DMA控制器1~n至一相應(yīng)的緩沖描述符列表BDL1~n讀取一緩沖描述符列表入口BDLE,并在通過該緩沖描述符列表入口BDLE獲得一數(shù)據(jù)塊的內(nèi)存基址及數(shù)據(jù)塊長度后驅(qū)使DMA控制器依據(jù)該內(nèi)存基址存取一定長度的數(shù)據(jù)。
圖3所示為本發(fā)明一個實(shí)施例的DMA控制裝置14與內(nèi)存11溝通的框圖。假設(shè)內(nèi)存11設(shè)有8個緩沖描述符列表110、8個數(shù)據(jù)存取區(qū)111、一響應(yīng)數(shù)據(jù)區(qū)112及一指令數(shù)據(jù)區(qū)113。DMA控制裝置14包含一放音模組20、一錄音模組21、一指令模塊22、一響應(yīng)模塊23、第一放音DMA控制器241、第二放音DMA控制器242、第三放音DMA控制器243、第四放音DMA控制器244、第一錄音DMA控制器251、第二錄音DMA控制器252、第三錄音DMA控制器253、第四錄音DMA控制器254、一指令DMA控制器26、一響應(yīng)DMA控制器27及一仲裁器28。
放音模組20包含四個放音數(shù)據(jù)處理模塊201~204,其分別與第一放音DMA控制器241、第二放音DMA控制器242、第三放音DMA控制器243、第四放音DMA控制器244相對應(yīng)。每一放音數(shù)據(jù)處理模塊201~204均設(shè)有一暫存器2011、一參數(shù)寄存器2012以及一處理邏輯2013。暫存器2011用于存儲從內(nèi)存11讀出的數(shù)據(jù)。參數(shù)寄存器2012用于存儲各項(xiàng)傳輸參數(shù)。傳輸參數(shù)可包含數(shù)據(jù)塊長度、BDL基址、BDL指針、內(nèi)存基址、數(shù)據(jù)塊指針及傳輸數(shù)據(jù)長度(burst length)。顯然,數(shù)據(jù)塊的剩余數(shù)據(jù)長度=數(shù)據(jù)塊長度-數(shù)據(jù)塊指針。處理邏輯2013到參數(shù)寄存器2012中讀取傳輸參數(shù)并通過計(jì)算數(shù)據(jù)塊的剩余數(shù)據(jù)長度決定發(fā)送一讀取數(shù)據(jù)請求或是一讀取BDLE請求。舉例來說,若數(shù)據(jù)塊的剩余數(shù)據(jù)長度=0,則處理邏輯2013發(fā)送一讀取BDLE請求以驅(qū)使相應(yīng)的放音DMA控制器241~244依據(jù)讀取BDLE請求至相應(yīng)的緩沖描述符列表BDL1~4讀取一緩沖描述符列表入口BDLE。另一方面,若數(shù)據(jù)塊的剩余數(shù)據(jù)長度大于0,則處理邏輯2013發(fā)送一讀取數(shù)據(jù)請求,則相應(yīng)的放音DMA控制器241~244依據(jù)接收的讀取數(shù)據(jù)請求至內(nèi)存11中讀取一數(shù)據(jù)塊中的數(shù)據(jù)。處理邏輯2013在通過取回的緩沖描述符列表入口BDLE獲得一內(nèi)存基址及一數(shù)據(jù)塊長度后,隨即更新參數(shù)寄存器2012中的相應(yīng)傳輸參數(shù),即內(nèi)存基址、數(shù)據(jù)塊指針及數(shù)據(jù)塊長度,并驅(qū)使相應(yīng)的放音DMA控制器241~244依據(jù)該內(nèi)存基址及數(shù)據(jù)塊長度讀取相應(yīng)數(shù)據(jù)塊的數(shù)據(jù)。
類似地,錄音模組21包括四個錄音數(shù)據(jù)處理模塊211~214,分別與第一錄音DMA控制器、第二錄音DMA控制器、第三錄音DMA控制器、第四錄音DMA控制器相對應(yīng)。每一錄音數(shù)據(jù)處理模塊211~214設(shè)有一暫存器2111、一參數(shù)寄存器2112以及一處理邏輯2113。暫存器2111用以存儲將要寫入內(nèi)存11的數(shù)據(jù)。處理邏輯2113用以決定發(fā)送一寫入數(shù)據(jù)請求或是發(fā)送一讀取BDLE請求。錄音DMA控制器251~254依據(jù)錄音數(shù)據(jù)處理模塊211~214發(fā)出的請求將數(shù)據(jù)寫入相應(yīng)的數(shù)據(jù)塊或是到內(nèi)存11中讀取緩沖描述符列表入口BDLE。
指令模塊22包含一暫存器221、一參數(shù)寄存器222及一處理單元223。當(dāng)中央處理器10(圖1)有指令需要發(fā)送給設(shè)備15~17時(shí),會將指令存儲在內(nèi)存11預(yù)先分配的指令數(shù)據(jù)區(qū)113內(nèi),而指令數(shù)據(jù)區(qū)113的基址在中央處理器配置DMA控制裝置時(shí)已寫入?yún)?shù)寄存器222中。因而,當(dāng)設(shè)備15~17需要執(zhí)行中央處理器10發(fā)出的指令時(shí),會發(fā)出一讀取指令請求給指令模塊22,指令模塊22的處理單元223隨后至參數(shù)寄存器222中讀取傳輸參數(shù),并驅(qū)使指令DMA控制器26依據(jù)傳輸參數(shù)中的內(nèi)存基址至內(nèi)存11的指令數(shù)據(jù)區(qū)113讀取指令。也就是說,處理單元223不需要通過讀取BDLE獲得內(nèi)存基址。
與指令模塊22相類似,響應(yīng)模塊23也不需要通過讀取BDLE獲取內(nèi)存基址。響應(yīng)可以是對中央處理器10發(fā)送的指令做出的響應(yīng)(solicited)也可以是設(shè)備15~17主動發(fā)出的響應(yīng)(unsolicited)。內(nèi)存11中分配有專用于存儲設(shè)備15~17寫入的響應(yīng)數(shù)據(jù)的響應(yīng)數(shù)據(jù)區(qū)112,且響應(yīng)數(shù)據(jù)區(qū)112的內(nèi)存基址已寫入?yún)?shù)寄存器232內(nèi)。當(dāng)設(shè)備15~17需要寫入響應(yīng)數(shù)據(jù)時(shí),會發(fā)送一寫入響應(yīng)請求至響應(yīng)模塊23,并將響應(yīng)數(shù)據(jù)暫存入暫存器231中。處理單元233驅(qū)使響應(yīng)DMA控制器27依據(jù)響應(yīng)數(shù)據(jù)區(qū)112的內(nèi)存基址將響應(yīng)數(shù)據(jù)寫入響應(yīng)數(shù)據(jù)區(qū)112。
由以上描述可知,當(dāng)設(shè)備15~17需要讀取數(shù)據(jù)或者需要將數(shù)據(jù)寫入內(nèi)存11時(shí),放音模組20、錄音模組21、指令模塊22或是響應(yīng)模塊23將會發(fā)出相應(yīng)的請求,亦即讀取BDLE請求、讀取數(shù)據(jù)請求、寫入數(shù)據(jù)請求、讀取指令請求或?qū)懭腠憫?yīng)請求至對應(yīng)的DMA控制器,而DMA控制器則發(fā)出相應(yīng)的DMA傳輸請求至仲裁器28。仲裁器28根據(jù)各DMA控制器所發(fā)出的DMA傳輸請求的優(yōu)先級決定執(zhí)行DMA傳輸?shù)捻樞颉?br>
圖3所示本發(fā)明一實(shí)施例的DMA控制裝置包括若干獨(dú)立的DMA控制器,若干放音數(shù)據(jù)處理模塊及若干錄音數(shù)據(jù)處理模塊。每一放音、錄音數(shù)據(jù)處理模塊均設(shè)有一個獨(dú)立的處理邏輯用于判斷發(fā)出何種請求以及更新傳輸參數(shù)。由于處理邏輯具備運(yùn)算傳輸參數(shù)的功能,因而需要較多的邏輯門才能實(shí)現(xiàn)。
圖4所示為本發(fā)明另一實(shí)施例的DMA控制裝置與內(nèi)存溝通的框圖。
本發(fā)明中的內(nèi)存8可看作第一存儲裝置,設(shè)備9則可看作第二存儲裝置,DMA控制裝置4位于第一存儲裝置、第二存儲裝置之間執(zhí)行第一存儲裝置、第二存儲裝置間的DMA數(shù)據(jù)傳輸。
如圖4所示,本發(fā)明的DMA控制裝置4包括一數(shù)據(jù)處理模塊6及一DMA控制器5。數(shù)據(jù)處理模塊6設(shè)有若干用于判斷是否需要發(fā)出數(shù)據(jù)傳輸請求的處理邏輯。在本實(shí)施例中,假設(shè)數(shù)據(jù)處理模塊6包含4個放音模塊60~63、4個錄音模塊64~67、一指令模塊68及一響應(yīng)模塊69。其中,每一放音模塊60~63包含一放音處理邏輯610~613及一用于暫存放音數(shù)據(jù)的數(shù)據(jù)暫存器600~603。每一錄音模塊64~67包含一錄音處理邏輯614~617及一用于暫存錄音數(shù)據(jù)的數(shù)據(jù)暫存器604~607。指令模塊68包括一數(shù)據(jù)暫存器608及一指令邏輯618。響應(yīng)模塊69包括一數(shù)據(jù)暫存器609及一響應(yīng)邏輯619。于本發(fā)明中,中央處理器10在內(nèi)存8配置有8個緩沖描述符列表81以及8個分別與緩沖描述符列表相對應(yīng)的數(shù)據(jù)存儲區(qū)82。其中,緩沖描述符列表81的BDL1~4分別對應(yīng)于4個放音模塊60~63,BDL5~8分別對應(yīng)4個錄音模塊64~67。
放音處理邏輯610~613或錄音處理邏輯614~617通過偵測數(shù)據(jù)暫存器600~607中的數(shù)據(jù)存儲狀況來決定是否發(fā)出DMA傳輸請求至DMA控制器5。于本實(shí)施例中,假設(shè)當(dāng)放音處理邏輯610~613偵測到用于暫存放音數(shù)據(jù)的數(shù)據(jù)暫存器600~603還差一定長度的數(shù)據(jù)才滿,則發(fā)出一讀取數(shù)據(jù)請求。假設(shè)當(dāng)錄音處理邏輯614~617偵測到用于暫存錄音數(shù)據(jù)的數(shù)據(jù)暫存器604~607已存儲有一定長度的數(shù)據(jù),則發(fā)出一寫入數(shù)據(jù)請求。與圖3的處理單元223、233相比,指令邏輯618與響應(yīng)邏輯619不需要自行讀取傳輸參數(shù),只需要在中央處理單元10有指令發(fā)出或者設(shè)備9有響應(yīng)數(shù)據(jù)需要傳輸時(shí)發(fā)出響應(yīng)的DMA請求至DMA控制器5。
DMA控制器5包括一仲裁器50、一存儲模塊51以及一運(yùn)算模塊53。運(yùn)算模塊53耦接于存儲模塊51,包括一計(jì)算單元531以及一存取單元532。如本領(lǐng)域的熟練技術(shù)人員所知,仲裁器50內(nèi)可設(shè)置一狀態(tài)機(jī),用于判斷數(shù)據(jù)處理模塊6發(fā)出的DMA傳輸請求的優(yōu)先級。
在本實(shí)施例中,DMA控制器5的存儲模塊51設(shè)有10個分別存儲傳輸參數(shù)的存儲空間511~520。其中,存儲空間511~514的所存儲的傳輸參數(shù)分別與第一放音模塊60、第二放音模塊61、第三放音模塊62、第四放音模塊63發(fā)出的讀取數(shù)據(jù)請求相對應(yīng),存儲空間515~518所存儲的傳輸參數(shù)分別與第一錄音模塊64、第二錄音模塊65、第三錄音模塊66、第四錄音模塊67發(fā)出的寫入數(shù)據(jù)請求相對應(yīng)。存儲空間519的傳輸參數(shù)與指令模塊68發(fā)出的讀取指令請求相對應(yīng)。存儲空間520的傳輸參數(shù)與響應(yīng)模塊69發(fā)出的寫入響應(yīng)請求相對應(yīng)。存儲模塊51可以是靜態(tài)隨機(jī)存取存儲器(SRAM)也可以是一組寄存器。于本實(shí)施例中,存儲在存儲空間511~520中的參數(shù)可包括,但不限于,緩沖描述符列表基址(例如BDL1的基址)、BDL指針(例如,指向BDL1的緩沖描述符列表入口BDLE1)、內(nèi)存基址(例如BDLE1所對應(yīng)的第1數(shù)據(jù)塊的基址)、內(nèi)存指針、數(shù)據(jù)塊長度(第1數(shù)據(jù)塊的長度)、傳輸數(shù)據(jù)長度(burst length)及讀寫標(biāo)示。在執(zhí)行第一筆DMA傳輸前存儲空間511~518的BDL指針、內(nèi)存基址、數(shù)據(jù)塊指針及數(shù)據(jù)塊的長度均為零,BDL基址、傳輸數(shù)據(jù)長度、及讀寫標(biāo)示則已由中央處理器10(圖1)預(yù)先寫入。存儲空間519,520的內(nèi)存基址與數(shù)據(jù)塊長度,即指令數(shù)據(jù)區(qū)83及響應(yīng)數(shù)據(jù)區(qū)84的基址與長度,已由在中央處理器10寫入。
運(yùn)算模塊53根據(jù)仲裁器50的仲裁結(jié)果至存儲模塊51讀取一組相應(yīng)的傳輸參數(shù)。為了使DMA控制器能夠依據(jù)DMA傳輸請求存取夠一定長度的數(shù)據(jù),運(yùn)算模塊53的計(jì)算單元531需要做以下的動作通過計(jì)算數(shù)據(jù)塊剩余數(shù)據(jù)長度來判斷需要讀取緩沖區(qū)描述符列表入口還是直接讀取數(shù)據(jù);通過計(jì)算缺少數(shù)據(jù)長度Y來判斷是否讀取新的緩沖描述符列表入口BDLE-New,或是為下一次傳輸預(yù)取(pre-fetch)新的緩沖描述符列表入口BDLE-Pre;在讀取緩沖描述符列表入口后更新傳輸參數(shù);以及在完成數(shù)據(jù)傳輸完畢后更新傳輸參數(shù)。
具體來說,計(jì)算單元531可通過數(shù)據(jù)塊長度與內(nèi)存指針計(jì)算數(shù)據(jù)塊剩余長度,數(shù)據(jù)塊剩余數(shù)據(jù)長度X=數(shù)據(jù)塊長度-內(nèi)存指針。若數(shù)據(jù)塊剩余數(shù)據(jù)長度X=0,則計(jì)算單元53驅(qū)使存取單元532依據(jù)BDL基址+BDL指針至相應(yīng)的緩沖描述符列表BDL1~8讀取一緩沖描述符列表入口,并更新緩沖描述符列表指針。若數(shù)據(jù)塊剩余數(shù)據(jù)長度X≠0,則計(jì)算單元531驅(qū)使存取單元532依據(jù)內(nèi)存基址+內(nèi)存指針進(jìn)行數(shù)據(jù)傳輸(讀取一數(shù)據(jù)塊的數(shù)據(jù)或是將數(shù)據(jù)寫入數(shù)據(jù)塊中),并在完成數(shù)據(jù)傳輸后更新內(nèi)存指針。
請參閱圖5,假設(shè)第一放音處理邏輯610發(fā)出一放音請求,且其優(yōu)先級最高,因而計(jì)算單元531至存儲空間1中取出一組與該放音請求對應(yīng)的傳輸參數(shù)的值。為方便說明,假設(shè)BDL1包含有3個緩沖描述符列表入口BDLE1、BDLE2及BDLE3,分別對應(yīng)第1數(shù)據(jù)塊、第2數(shù)據(jù)塊及第3數(shù)據(jù)塊,其中第1數(shù)據(jù)塊的長度為D1=4DW(double word),第2數(shù)據(jù)塊的長度為D2=2DW,第3數(shù)據(jù)塊的長度D3=4DW。進(jìn)一步假設(shè)此時(shí)存儲空間1的傳輸參數(shù)的值如下數(shù)據(jù)塊長度的值=D1=第1數(shù)據(jù)塊的長度=4DW,BDL基址的值=A=BDL1的基址,BDL指針的值=E=指向緩沖描述符列表入口BDLE1的指針的值,內(nèi)存基址的值=B1=第1數(shù)據(jù)塊的內(nèi)存基址,內(nèi)存指針的值=C=當(dāng)前第1數(shù)據(jù)塊的內(nèi)存指針的值=2,傳輸數(shù)據(jù)長度的值=F=4DW,及讀寫標(biāo)示的值=H。根據(jù)以上假設(shè),計(jì)算單元531計(jì)算出剩余數(shù)據(jù)長度X=D1-C=2DW,因而計(jì)算單元531驅(qū)使存取單元532至第1數(shù)據(jù)塊讀取剩余的2DW數(shù)據(jù),并在完成數(shù)據(jù)傳輸后更新內(nèi)存指針C=C+2。
請繼續(xù)參閱圖4,當(dāng)數(shù)據(jù)塊剩余數(shù)據(jù)長度X≠0時(shí),計(jì)算單元531還需要通過一所需數(shù)據(jù)長度M及剩余數(shù)據(jù)長度X來計(jì)算缺少數(shù)據(jù)長度Y,缺少數(shù)據(jù)長度Y=所需數(shù)據(jù)長度M-剩余數(shù)據(jù)長度X。在運(yùn)算模塊53依據(jù)讀取的傳輸參數(shù)進(jìn)行第一筆數(shù)據(jù)傳輸時(shí),所需數(shù)據(jù)長度M=傳輸數(shù)據(jù)長度。若缺少數(shù)據(jù)長度Y=0,則表示這一筆數(shù)據(jù)傳輸恰好將當(dāng)前存取的數(shù)據(jù)塊的數(shù)據(jù)取完或是寫滿。計(jì)算單元531驅(qū)使存取單元532預(yù)取新的緩沖描述符列表入口BDLE-Pre,并更新BDL指針,將內(nèi)存指針清零,同時(shí)將預(yù)取的緩沖描述符列表入口所對應(yīng)的數(shù)據(jù)塊的內(nèi)存基址、數(shù)據(jù)塊長度寫入相應(yīng)的存儲空間511~518。若缺少數(shù)據(jù)長度Y<0,則表示在執(zhí)行完這一筆數(shù)據(jù)傳輸后,當(dāng)前被存取的數(shù)據(jù)塊還剩余有數(shù)據(jù),因而只需要更新內(nèi)存指針而不需要讀取新的緩沖描述符列表入口。若缺少數(shù)據(jù)長度Y>0,表示在存取第1數(shù)據(jù)塊的剩余數(shù)據(jù)后還缺少Y長度的數(shù)據(jù)(還有Y長度的數(shù)據(jù)未寫入內(nèi)存8)。計(jì)算單元531驅(qū)使存取單元532讀取新的緩沖描述符列表入口BDLE-New,更新BDL指針,并將緩沖描述符列表入口BDLE-New所對應(yīng)的數(shù)據(jù)塊的數(shù)據(jù)塊長度及內(nèi)存基址寫入相應(yīng)的存儲空間511~518,同時(shí)將內(nèi)存指針清零。此時(shí),所需數(shù)據(jù)長度M=缺少數(shù)據(jù)長度Y,計(jì)算單元531驅(qū)使存取單元532進(jìn)行第二筆數(shù)據(jù)傳輸,即依據(jù)新的內(nèi)存基址+內(nèi)存指針至緩沖描述符列表入口BDLE-New所對應(yīng)的數(shù)據(jù)塊中讀取Y長度的數(shù)據(jù)或?qū)長度的數(shù)據(jù)寫入數(shù)據(jù)塊中。在完成第二筆數(shù)據(jù)傳輸之后,缺少數(shù)據(jù)長度Y=所需數(shù)據(jù)長度M-緩沖描述符列表入口BDLE-New對應(yīng)的數(shù)據(jù)塊的長度。計(jì)算單元531將重復(fù)以上操作直到缺少數(shù)據(jù)長度Y≤0,以存取單個DMA傳輸請求所要求的數(shù)據(jù)長度。
請?jiān)俅螀㈤唸D5,舉例來說,在計(jì)算單元531驅(qū)使存取單元532存取第1數(shù)據(jù)塊剩余的2DW數(shù)據(jù)時(shí),所需數(shù)據(jù)長度M=傳輸數(shù)據(jù)長度=F=4DW。也就是說此時(shí)的缺少數(shù)據(jù)長度Y=所需數(shù)據(jù)長度M(4DW)-剩余數(shù)據(jù)長度X(2DW)=2DW。缺少數(shù)據(jù)長度Y>0,因而計(jì)算單元531驅(qū)使存取單元532讀取緩沖描述符列表入口BDLE2,更新BDL指針為E=E+1,更新內(nèi)存指針為C=0。計(jì)算單元531通過描述符BDLE2得知第2數(shù)據(jù)塊的數(shù)據(jù)塊長度的值=D2=2DW及第2數(shù)據(jù)塊的內(nèi)存基址的值=B2。此時(shí),所需數(shù)據(jù)長度M=缺少數(shù)據(jù)長度Y=2DW,剩余數(shù)據(jù)長度X=D2=2DW,計(jì)算單元531驅(qū)使存取單元532依據(jù)第2數(shù)據(jù)塊的內(nèi)存基址B2至第2數(shù)據(jù)塊中讀取2DW的數(shù)據(jù),并在完成數(shù)據(jù)傳輸后更新內(nèi)存指針為C=C+2。這時(shí),缺少數(shù)據(jù)長度Y=所需數(shù)據(jù)長度M(2DW)-剩余數(shù)據(jù)長度X(2DW)=0,計(jì)算單元531驅(qū)使存取單元532預(yù)取BDLE3,將BDLE3對應(yīng)的第3數(shù)據(jù)塊的內(nèi)存基址B3、數(shù)據(jù)塊長度D3(4DW)寫入存儲空間511,并更新存儲空間511的BDL指針為E=E+1,更新內(nèi)存指針為C=0。通過以上操作,DMA控制器5依據(jù)第一放音處理邏輯610發(fā)出的放音請求讀取了4DW數(shù)據(jù),并且預(yù)取了BDLE3,因而當(dāng)?shù)谝环乓籼幚磉壿?10再次發(fā)出一放音請求時(shí),DMA控制器5不需要先讀取BDLE3再讀取數(shù)據(jù)。
于本實(shí)施例中,內(nèi)存8中還分配有一DMA存儲位置80,中央處理器10可通過訪問DMA存儲位置80了解DMA傳輸狀況。計(jì)算單元531可通過傳輸參數(shù)中的讀寫標(biāo)示得知DMA控制器5所接收的DMA傳輸請求是否為一寫入請求,若是,則在依據(jù)該請求完成DMA傳輸后將更新后的內(nèi)存指針回寫(write back)入內(nèi)存8的DMA存儲位置80。然而。若DMA控制器5接收的傳輸指令為讀取(read)指令,則計(jì)算單元531在更新內(nèi)存指針之后不需要回寫更新后的內(nèi)存指針。
如前所述,若DMA傳輸請求是由指令邏輯618或響應(yīng)邏輯619所發(fā)出,則計(jì)算單元531直接依據(jù)存儲在存儲空間519,520的內(nèi)存基址驅(qū)使存取單元532到內(nèi)存8的指令數(shù)據(jù)區(qū)83中讀取數(shù)據(jù)或是將數(shù)據(jù)寫入響應(yīng)數(shù)據(jù)區(qū)84,而不需要讀取緩沖描述符列表入口。
圖6為本發(fā)明DMA傳輸方法的流程圖。
在執(zhí)行DMA傳輸前,中央處理器需要配置DMA控制裝置4,并且將緩沖描述符列表BDL1~8的基址、傳輸數(shù)據(jù)長度、讀寫標(biāo)示寫入相應(yīng)的存儲空間511~518,將指令數(shù)據(jù)區(qū)83及響應(yīng)數(shù)據(jù)區(qū)84的內(nèi)存基址寫入存儲空間519~520。其它傳輸參數(shù)的初始值均為零。
首先,DMA控制器5收到至少一個由數(shù)據(jù)處理模塊6發(fā)送的DMA傳輸請求(步驟S501)。接著,仲裁器50裁決DMA傳輸請求的優(yōu)先級并發(fā)送仲裁結(jié)果至運(yùn)算模塊53(步驟S502)。
運(yùn)算模塊53的計(jì)算單元531依據(jù)仲裁結(jié)果至存儲模塊51讀取一組相應(yīng)的傳輸參數(shù)(步驟S503)。隨后,計(jì)算單元531對傳輸參數(shù)進(jìn)行運(yùn)算以判斷是否需要讀取緩沖描述符列表入口(步驟S504)。例如,計(jì)算單元531可通過數(shù)據(jù)塊長度、內(nèi)存基址以及內(nèi)存指針計(jì)算出該數(shù)據(jù)塊的剩余數(shù)據(jù)長度,若剩余數(shù)據(jù)長度為零,則讀取新的緩沖描述符列表入口,反之,若剩余數(shù)據(jù)長度不為零,則進(jìn)行數(shù)據(jù)傳輸。若需要讀取緩沖描述符列表入口,則執(zhí)行步驟S511,存取單元532依據(jù)計(jì)算結(jié)果到內(nèi)存8中讀取一緩沖描述符列表入口;若否,則執(zhí)行步驟S505,計(jì)算單元531驅(qū)使存取單元532依照傳輸參數(shù)至內(nèi)存8中讀取相應(yīng)數(shù)據(jù)塊中的數(shù)據(jù)或?qū)?shù)據(jù)寫入相應(yīng)的數(shù)據(jù)塊中。在讀取緩沖描述符列表入口后,計(jì)算單元531更新傳輸參數(shù)中的BDL指針(步驟S512),并驅(qū)使存取單元532進(jìn)行數(shù)據(jù)傳輸(步驟S505)。在完成數(shù)據(jù)傳輸后,計(jì)算單元531更新傳輸參數(shù)中的內(nèi)存指針(步驟506)。
其后,執(zhí)行步驟S507,計(jì)算單元53判斷是否已存取所需數(shù)據(jù)長度。若未存取夠所需數(shù)據(jù)長度,即存取的數(shù)據(jù)長度小于所需要的數(shù)據(jù)長度,則讀取一新的緩沖描述符列表入口(步驟S511),并依序執(zhí)行步驟S512、S505。若已經(jīng)存取夠所需要數(shù)據(jù)長度,則執(zhí)行步驟S508,接著判斷當(dāng)前存取的數(shù)據(jù)塊是否被取空或是寫滿。若當(dāng)前存取的數(shù)據(jù)塊已被取空或是寫滿,則計(jì)算單元531驅(qū)使存取單元532預(yù)取一新的緩沖描述符列表入口(步驟S513),隨后更新BDL指針(步驟S514)。
在步驟S508判斷結(jié)果為否及步驟S514之后執(zhí)行步驟S509,根據(jù)讀寫標(biāo)示判斷是否需要回寫內(nèi)存位置,若是,則將更新后的內(nèi)存指針回寫到DMA存儲位置80(步驟S510)并結(jié)束本次DMA傳輸,若否,則直接結(jié)束本次DMA傳輸。
由以上描述可知,圖4所示的數(shù)據(jù)處理模塊6只需要根據(jù)數(shù)據(jù)存取狀況決定是否需要發(fā)出DMA傳輸請求,因而不需要設(shè)置多個獨(dú)立的用于計(jì)算及更新傳輸參數(shù)的處理邏輯。此外,圖3中的多個獨(dú)立DMA控制器整合為一個獨(dú)立的DMA控制器5,該整合后的DMA控制器5中存儲有多組互相獨(dú)立的傳輸參數(shù),運(yùn)算模塊53可根據(jù)仲裁結(jié)果計(jì)算、更新傳輸參數(shù)以控制DMA傳輸。這使得本發(fā)明的DMA控制裝置僅設(shè)有一個可以被數(shù)據(jù)處理模塊6中的多個放音模塊及錄音模塊共用的運(yùn)算模塊,從而可以減小DMA控制裝置的面積,使得成本降低。另外,整合后的DMA控制器支持預(yù)取緩沖區(qū)描述符列表入口、DMA存儲位置回寫,使得本發(fā)明的DMA控制裝置可以進(jìn)行高效的DMA數(shù)據(jù)傳輸。
本發(fā)明的DMA控制裝置可設(shè)在計(jì)算機(jī)系統(tǒng)的南橋或南北橋整合的芯片組內(nèi)。本領(lǐng)域的熟練技術(shù)人員在進(jìn)行簡單的邏輯設(shè)計(jì)后即可將本發(fā)明的多個獨(dú)立DMA控制器整合為一個DMA控制器的設(shè)計(jì)應(yīng)用到符合其他規(guī)范的計(jì)算機(jī)系統(tǒng)中,例如,串行高級技術(shù)附件(SATA),通用串行總線(USB)等。也就是說,在一計(jì)算機(jī)系統(tǒng)中可以設(shè)有多個符合SATA規(guī)范的專用DMA控制器,分別用于控制相應(yīng)SATA設(shè)備的數(shù)據(jù)傳輸,其中,SATA設(shè)備通過相應(yīng)的SATA總線與計(jì)算機(jī)系統(tǒng)的DMA控制器相連接以進(jìn)行數(shù)據(jù)傳輸。在這種情形下,可以依據(jù)本發(fā)明的設(shè)計(jì)將多個DMA控制器整合為一個可由多個SATA設(shè)備復(fù)用的DMA控制器。
如圖7所示,SATA設(shè)備1~N分別通過相應(yīng)的SATA總線1~N與DMA控制裝置70連接,以直接讀取內(nèi)存71中的數(shù)據(jù)。DMA控制裝置包括一DMA控制器72以及若干個SATA接口1~N,分別用以接收SATA設(shè)備1~N發(fā)出的指令與數(shù)據(jù)。與圖4所示DMA控制器5相類似,本實(shí)施例DMA控制器72包含仲裁器73,存儲模塊74以及運(yùn)算模塊75。存儲模塊74由存儲空間1~N組成,分別存儲與SATA設(shè)備1~N進(jìn)行DMA傳輸有關(guān)的參數(shù),例如,BDL基址、傳輸數(shù)據(jù)長度等。如本領(lǐng)域技術(shù)人員所知,具體參數(shù)的設(shè)定需要與SATA傳輸規(guī)范相適應(yīng)。
下面以圖7的SATA設(shè)備1為例來說明DMA控制裝置70如何進(jìn)行數(shù)據(jù)傳輸。當(dāng)SATA設(shè)備1需要將數(shù)據(jù)寫入內(nèi)存71時(shí),會發(fā)出一寫入數(shù)據(jù)請求給DMA控制裝置70。隨后,DMA控制裝置70的SATA接口1由SATA總線1接收寫入數(shù)據(jù)請求,暫存即將寫入內(nèi)存71的數(shù)據(jù),并發(fā)出一DMA傳輸請求至仲裁器73。假設(shè)此時(shí)SATA接口1發(fā)出的DMA傳輸請求優(yōu)先級最高。運(yùn)算模塊75隨即至存儲模塊74的存儲空間1中讀取相應(yīng)的傳輸參數(shù),并對獲得的傳輸參數(shù)進(jìn)行計(jì)算以判定需要發(fā)出何種指令至內(nèi)存控制器(未圖示),例如發(fā)出一讀取BDLE指令,或者發(fā)出一將數(shù)據(jù)寫入指定地址的寫入指令。與之前描述相類似,內(nèi)存控制器隨后將依據(jù)接收的指令讀取BDLE或是將數(shù)據(jù)寫入內(nèi)存71中。若DMA控制裝置發(fā)出的指令為讀取BDLE指令,則運(yùn)算模塊75通過譯碼讀取的BDLE指令獲得相應(yīng)數(shù)據(jù)區(qū)塊的參數(shù),并進(jìn)一步依據(jù)該參數(shù)發(fā)出一寫入數(shù)據(jù)指令,以將SATA設(shè)備1送出的數(shù)據(jù)寫入內(nèi)存71中。
如圖8所示,若將本發(fā)明的設(shè)計(jì)應(yīng)用到符合USB規(guī)范的系統(tǒng)中,則其架構(gòu)與圖7所示的SATA系統(tǒng)相類似,不同之處在于多個USB設(shè)備1~N是分別通過USB總線與USB接口相連接以進(jìn)行數(shù)據(jù)傳輸。如前所述,存儲于DMA控制器的存儲模塊內(nèi)的DMA傳輸參數(shù)也會做相應(yīng)修改以適應(yīng)USB規(guī)范,在此將不再贅述。
以上所述僅為本發(fā)明較佳實(shí)施例,然其并非用以限定本發(fā)明的范圍,任何熟悉本項(xiàng)技術(shù)的人員,在不脫離本發(fā)明的精神和范圍內(nèi),可在此基礎(chǔ)上做進(jìn)一步的改進(jìn)和變化,因此本發(fā)明的保護(hù)范圍當(dāng)以本申請的權(quán)利要求書所界定的范圍為準(zhǔn)。
權(quán)利要求
1.一種直接存儲器訪問控制裝置,其特征在于,所述直接存儲器訪問控制裝置包括一數(shù)據(jù)處理模塊,用以發(fā)出一傳輸請求;以及一直接存儲器訪問控制器,用以依據(jù)該傳輸請求讀取存儲于該直接存儲器訪問控制器內(nèi)的一組傳輸參數(shù)并依據(jù)該組傳輸參數(shù)存取一存儲裝置,所述直接存儲器訪問控制器包括一運(yùn)算模塊,通過計(jì)算該組傳輸參數(shù)判斷一數(shù)據(jù)塊是否已被存取完。
2.根據(jù)權(quán)利要求1所述的直接存儲器訪問控制裝置,其特征在于,若所述數(shù)據(jù)塊已被存取完,則該直接存儲器訪問控制器讀取一緩沖描述符列表入口,并更新該組傳輸參數(shù)。
3.根據(jù)權(quán)利要求1所述的直接存儲器訪問控制裝置,其特征在于,若所述數(shù)據(jù)塊未被存取完,則該直接存儲器訪問控制器依據(jù)該組傳輸參數(shù)存取數(shù)據(jù),并在存取數(shù)據(jù)后更新該組傳輸參數(shù)。
4.根據(jù)權(quán)利要求1至3中任意一項(xiàng)所述的直接存儲器訪問控制裝置,其特征在于,所述運(yùn)算模塊在已存取一所需數(shù)據(jù)長度,且當(dāng)前存取的一數(shù)據(jù)塊已被存取完時(shí),預(yù)取另一緩沖描述符列表入口。
5.根據(jù)權(quán)利要求1至3中任意一項(xiàng)所述的直接存儲器訪問控制裝置,其特征在于,所述直接存儲器訪問控制器包括一存儲模塊,用于存儲該組傳輸參數(shù)。
6.根據(jù)權(quán)利要求1至3中任意一項(xiàng)所述的直接存儲器訪問控制裝置,其特征在于,所述數(shù)據(jù)處理模塊包括至少一數(shù)據(jù)暫存器,用以存儲直接存儲器訪問傳輸?shù)臄?shù)據(jù);以及至少一處理邏輯,通過偵測該數(shù)據(jù)暫存器中數(shù)據(jù)存儲狀況來決定是否輸出該傳輸請求至該直接存儲器訪問控制器。
7.一種控制直接存儲器訪問傳輸?shù)姆椒ǎ涮卣髟谟?,所述控制直接存儲器訪問傳輸?shù)姆椒òㄖ俨靡粋€或多個傳輸請求的優(yōu)先級;輸出與優(yōu)先級最高的傳輸請求相對應(yīng)的存儲于一直接存儲器訪問控制器中的一組傳輸參數(shù);依據(jù)該組傳輸參數(shù)進(jìn)行直接存儲器訪問傳輸;及計(jì)算該組傳輸參數(shù)以判斷一數(shù)據(jù)塊是否已被存取完。
8.根據(jù)權(quán)利要求7所述的控制直接存儲器訪問傳輸?shù)姆椒?,其特征在于,若所述?shù)據(jù)塊已存取完,則讀取一緩沖描述符列表入口,并更新該組傳輸參數(shù)。
9.根據(jù)權(quán)利要求7所述的控制直接存儲器訪問傳輸?shù)姆椒?,其特征在于,若所述?shù)據(jù)塊未存取完,則對該數(shù)據(jù)塊進(jìn)行存取操作,并在存取數(shù)據(jù)后更新該組傳輸參數(shù)。
10.根據(jù)權(quán)利要求7至9中任意一項(xiàng)所述的控制直接存儲器訪問傳輸?shù)姆椒?,其特征在于,?jì)算該組傳輸參數(shù)以判斷是否已存取所需數(shù)據(jù)長度的數(shù)據(jù),若存取了所需數(shù)據(jù)長度的數(shù)據(jù),且該數(shù)據(jù)塊已存取完,則預(yù)取一新的緩沖描述符列表入口。
11.根據(jù)權(quán)利要求7至9中任意一項(xiàng)所述的控制直接存儲器訪問傳輸?shù)姆椒?,其特征在于,還包括通過該組傳輸參數(shù)判斷該傳輸請求是否為一寫入請求,若是,則依據(jù)該組傳輸參數(shù)回寫內(nèi)存位置至一存儲裝置。
全文摘要
本發(fā)明提供一種直接存儲器訪問控制裝置及控制其傳輸?shù)姆椒?,包括一?shù)據(jù)處理模塊,用以發(fā)出一傳輸請求;以及一直接存儲器訪問控制器,用以依據(jù)該傳輸請求讀取一組存儲于該直接存儲器訪問控制器內(nèi)的傳輸參數(shù)并依據(jù)該傳輸參數(shù)存取一存儲裝置。直接存儲器訪問控制器包括一運(yùn)算模塊,通過計(jì)算該組傳輸參數(shù)判斷一數(shù)據(jù)塊是否已被存取完。通過以上設(shè)置,本發(fā)明的直接存儲器訪問控制裝置適用于符合高保真音頻規(guī)范的計(jì)算機(jī)系統(tǒng),并且可建立多個相互獨(dú)立的直接存儲器訪問傳輸信道以同時(shí)支持多組音頻流的輸入與輸出。
文檔編號G11B20/10GK101017469SQ20071008008
公開日2007年8月15日 申請日期2007年3月7日 優(yōu)先權(quán)日2007年3月7日
發(fā)明者尹偉 申請人:威盛電子股份有限公司