亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于sata控制器的dma地址對(duì)預(yù)讀取方法

文檔序號(hào):6378570閱讀:667來源:國(guó)知局
專利名稱:基于sata控制器的dma地址對(duì)預(yù)讀取方法
技術(shù)領(lǐng)域
本發(fā)明涉及于計(jì)算機(jī)系統(tǒng)的存儲(chǔ)技術(shù)領(lǐng)域,具體地,涉及一種基于SATA控制器的DMA地址對(duì)預(yù)取方法。
背景技術(shù)
SATA (Serial Advanced Technology Attachment)是串行高級(jí)技術(shù)附件,一種基于行業(yè)標(biāo)準(zhǔn)的串行硬件驅(qū)動(dòng)器接口,是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盤接口規(guī)范。SATA可以讓用戶擁有高效能的硬盤,卻不需要犧牲資料的完整性。SATA最大的優(yōu)勢(shì)是傳輸速率高。SATA的工作原理采用連續(xù)串行的方式來實(shí)現(xiàn)數(shù)據(jù)傳輸從而獲得較高傳輸速率。2003年發(fā)布SATA1. O規(guī)格提供的傳輸率就已經(jīng)達(dá)到了 150MB/s,不但已經(jīng)高出普通IDE硬盤所提供的100MB /s (ATA100)甚至超過了 133MB/s (ATA133)的最高傳輸速率。SATA在數(shù)據(jù)可靠性方面也有了大幅度提高。SATA可同時(shí)對(duì)指令及數(shù)據(jù)封包進(jìn)行循環(huán)冗余校驗(yàn)(CRC),不僅可檢測(cè)出所有單字節(jié)和雙字節(jié)的錯(cuò)誤,而且根據(jù)統(tǒng)計(jì)學(xué)的原理,這樣還能夠檢測(cè)出99. 998%可能出現(xiàn)的錯(cuò)誤。相比之下,PATA只能對(duì)來回傳輸?shù)臄?shù)據(jù)進(jìn)行校驗(yàn),而無(wú)法對(duì)指令進(jìn)行校驗(yàn),加之高頻率下干擾甚大,因此數(shù)據(jù)傳輸穩(wěn)定性很差。除了傳輸速度、傳輸數(shù)據(jù)更可靠外,節(jié)省空間是SATA最具特色之處,更有利于機(jī)箱內(nèi)部的散熱,線纜間的串?dāng)_也得到了有效控制。SATA控制器定義了高速接口的物理層phy、數(shù)據(jù)鏈路層I ink、傳輸層transport和應(yīng)用層application四層協(xié)議?,F(xiàn)有的SATA控制器物理層,數(shù)據(jù)鏈路層和傳輸層的協(xié)議實(shí)現(xiàn),完全是由硬件邏輯來實(shí)現(xiàn),這樣硬件結(jié)構(gòu)復(fù)雜,導(dǎo)致了實(shí)現(xiàn)的過程復(fù)雜而且硬件邏輯資源消耗很大?,F(xiàn)有的SATA控制器物理層,數(shù)據(jù)鏈路層和傳輸層的協(xié)議實(shí)現(xiàn),完全是由硬件邏輯來實(shí)現(xiàn),這樣的硬件結(jié)構(gòu)復(fù)雜,導(dǎo)致了實(shí)現(xiàn)的過程復(fù)雜,而且硬件邏輯資源消耗很大。DMA操作數(shù)據(jù)傳輸過程需要通過CPU的IO來處理DMA操作的請(qǐng)求,同時(shí)CPU分配內(nèi)存地址和長(zhǎng)度來提供DMA操作數(shù)據(jù)在內(nèi)存的讀和寫操作。在這個(gè)過程中,DMA操作內(nèi)存數(shù)據(jù)的讀寫是先由DMA發(fā)起操作,然后CPU處理DMA的請(qǐng)求,再分配請(qǐng)求的讀寫內(nèi)存地址,最后DMA開始做數(shù)據(jù)的搬移,數(shù)據(jù)搬移完成后之后告訴CPU此次DMA請(qǐng)求操作完成信息。其中DMA的請(qǐng)求是通過CPU的IO總線來到達(dá)CPU的。SATA控制器的傳輸性能主要取決于DMA工作的效率和CPU處理DMA中斷的能力。DMA的工作效率取決于DMA去內(nèi)存取數(shù)據(jù)地址和數(shù)據(jù)長(zhǎng)度的時(shí)間以及取數(shù)據(jù)地址和數(shù)據(jù)長(zhǎng)度的次數(shù)。傳統(tǒng)的DMA基本每次做DMA傳輸數(shù)據(jù)都要到內(nèi)存去取數(shù)據(jù)地址和數(shù)據(jù)長(zhǎng)度,操作完成再給CPU發(fā)中斷請(qǐng)求,CPU處理DMA中斷請(qǐng)求分配內(nèi)存地址和長(zhǎng)度,DMA每次操作都去內(nèi)存取地址和長(zhǎng)度來傳輸數(shù)據(jù),這樣增加了重復(fù)去取內(nèi)存地址和長(zhǎng)度的次數(shù),就增加了 DMA傳輸數(shù)據(jù)的時(shí)間,限制了 DMA數(shù)據(jù)傳輸?shù)男省?br>
發(fā)明內(nèi)容
本發(fā)明的目的在于,針對(duì)上述問題,提出一種基于SATA控制器的DMA地址對(duì)預(yù)取方法,以實(shí)現(xiàn)提高DMA數(shù)據(jù)傳輸?shù)男实膬?yōu)點(diǎn)。為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是
一種基于SATA控制器的DMA地址對(duì)預(yù)取方法,包括LIS總線接口模塊,DMA狀態(tài)機(jī),接收數(shù)據(jù)緩存,發(fā)送數(shù)據(jù)緩存,信息控制模塊和預(yù)取緩存FIFO模塊;
所述LIS總線接口模塊為連接DMA狀態(tài)機(jī)和內(nèi)存的LIS總線提供接口,所述LIS總線為在DMA和內(nèi)存間進(jìn)行數(shù)據(jù)傳輸?shù)臄?shù)據(jù)總線;
所述接收數(shù)據(jù)緩存緩存DMA寫入內(nèi)存的數(shù)據(jù);
所述發(fā)送數(shù)據(jù)緩存緩存DMA讀出內(nèi)存中的數(shù)據(jù);
所述信息控制模塊對(duì)Local link總線接口信號(hào)的跨時(shí)鐘域進(jìn)行處理和對(duì)DMA通過Local link總線接收和發(fā)送數(shù)據(jù)進(jìn)行控制;
所述預(yù)取緩存FIFO模塊緩存DMA預(yù)取數(shù)據(jù)的地址對(duì);
所述DMA狀態(tài)機(jī)執(zhí)行DMA請(qǐng)求,處理DCR總線寄存器的狀態(tài)信息和處理DCR總線寄存器地址對(duì)信息并對(duì)地址對(duì)進(jìn)行預(yù)取,實(shí)現(xiàn)對(duì)地址對(duì)對(duì)應(yīng)在內(nèi)存中的預(yù)取數(shù)據(jù)進(jìn)行數(shù)據(jù)搬移,同時(shí)控制DMA狀態(tài)機(jī)各個(gè)狀態(tài)的跳變和各個(gè)狀態(tài)的邏輯輸出。一種基于SATA控制器的DMA地址對(duì)預(yù)取方法實(shí)現(xiàn)包括上述模塊的硬件邏輯,接口實(shí)現(xiàn)以及CPU協(xié)處理器處理FIS包過程和DMA狀態(tài)機(jī)對(duì)傳輸數(shù)據(jù)的地址對(duì)的預(yù)取過程和預(yù)取時(shí)間以及位置,上述模塊的主要硬件邏輯和接口實(shí)現(xiàn)包括DMA狀態(tài)機(jī)邏輯和DCR總線接口邏輯。DMA狀態(tài)機(jī)主要是實(shí)現(xiàn)SATA控制器到內(nèi)存的數(shù)據(jù)搬移和對(duì)數(shù)據(jù)地址對(duì)的預(yù)取控制,保證傳輸數(shù)據(jù)的性能。通過硬件邏輯實(shí)現(xiàn)DMA狀態(tài)機(jī)的狀態(tài)跳轉(zhuǎn)和地址對(duì)的預(yù)取功能以及DCR總線接口寄存器的控制信息位的判斷和控制DMA讀寫;實(shí)現(xiàn)DMA的LIS接口對(duì)內(nèi)存數(shù)據(jù)的搬移,保證讀寫數(shù)據(jù)通路的傳輸性能。DMA狀態(tài)機(jī)狀態(tài)跳轉(zhuǎn)將在以下實(shí)例說明。DCR總線接口寄存器值通過DCR總線接口的CPU協(xié)處理器端實(shí)現(xiàn)對(duì)SATA控制器傳輸層FIS包的解析,獲取DMA地址對(duì)預(yù)取的地址和長(zhǎng)度并將地址對(duì)信息通過DCR總線下發(fā)到DMA狀態(tài)機(jī)的地址對(duì)寄存器。CPU協(xié)處理器的處理FIS包過程和DMA狀態(tài)機(jī)對(duì)傳輸數(shù)據(jù)的地址對(duì)的預(yù)取過程和預(yù)取時(shí)間以及位置,包括以下步驟
發(fā)送H2D命令寄存器FIS包主機(jī)端發(fā)送H2D命令寄存器FIS包到設(shè)備端,該H2D命令寄存器FIS包內(nèi)容包含有主機(jī)端要求的讀、寫和包的類型命令字信息;
D2H命令寄存器包檢測(cè)主機(jī)端發(fā)送完H2D命令寄存器FIS包后等待設(shè)備端的響應(yīng),若設(shè)備端接收到主機(jī)的H2D命令寄存器FIS包,設(shè)備端則發(fā)送D2H命令寄存器包給主機(jī)端;DMA設(shè)置FIS包檢測(cè)設(shè)備端發(fā)送DMA設(shè)置FIS包給主機(jī)端,主機(jī)端CPU接收DMA設(shè)置FIS包并從其中解析出DMA數(shù)據(jù)傳輸?shù)牡刂泛烷L(zhǎng)度,每個(gè)DMA數(shù)據(jù)傳輸?shù)牡刂泛烷L(zhǎng)度對(duì)應(yīng)在內(nèi)存中的一個(gè)塊區(qū)域,每一個(gè)塊區(qū)域在應(yīng)用層驅(qū)動(dòng)中對(duì)應(yīng)一個(gè)slot命令,所述slot是內(nèi)存中一個(gè)塊區(qū)域在應(yīng)用層中驅(qū)動(dòng)命令對(duì)應(yīng)的標(biāo)記符號(hào),CPU取DMA設(shè)置FIS包中的數(shù)據(jù)的地址和長(zhǎng)度通過DCR總線接口寫到DMA硬件寄存器,所述數(shù)據(jù)的地址和長(zhǎng)度為數(shù)據(jù)地址對(duì);DMA激活FIS包檢測(cè)若設(shè)備端檢測(cè)到主機(jī)端要求寫數(shù)據(jù)時(shí),在設(shè)備端發(fā)送DMA設(shè)置FIS包后會(huì)給主機(jī)端發(fā)送DMA激活FIS包,然后CPU進(jìn)入到寫數(shù)據(jù)地址對(duì)預(yù)取狀態(tài);
數(shù)據(jù)地址對(duì)預(yù)取CPU將上述數(shù)據(jù)地址通過DCR總線接口寫到DMA預(yù)取緩存FIFO模
塊;
設(shè)置設(shè)備位FIS包檢測(cè)數(shù)據(jù)傳輸完成后主機(jī)端會(huì)收到設(shè)備端的SDB FIS包,結(jié)束一次·數(shù)據(jù)傳輸操作。根據(jù)本發(fā)明的優(yōu)選實(shí)施例,所述數(shù)據(jù)地址對(duì)預(yù)取包括
寫數(shù)據(jù)地址對(duì)預(yù)取=CPU將寫數(shù)據(jù)地址對(duì)通過DCR總線接口寫到DMA預(yù)取緩存FIFO模
塊;
以及
讀數(shù)據(jù)地址對(duì)預(yù)取=CPU將讀數(shù)據(jù)地址對(duì)通過DCR總線接口寫到DMA預(yù)取緩存FIFO模塊。本發(fā)明的技術(shù)方案,通過硬件邏輯調(diào)用一個(gè)預(yù)取緩存FIFO模塊,緩存FIFO模塊對(duì)DMA預(yù)操作的地址和長(zhǎng)度(地址對(duì))進(jìn)行緩存。DMA做數(shù)據(jù)傳輸時(shí),CPU處理DMA的中斷請(qǐng)求,判斷傳輸層數(shù)據(jù)交互的信息,并從數(shù)據(jù)包中解析出DMA操作的地址對(duì)信息,通過DCR總線將數(shù)據(jù)的地址對(duì)信息下發(fā)到硬件緩存FIFO模塊。只要硬件緩存FIFO模塊為空,CPU就會(huì)將地址對(duì)信息下發(fā)到硬件緩存FIFO中。DMA做數(shù)據(jù)傳輸時(shí),直接從硬件緩存FIFO中去取地址對(duì)信息,省去了 DMA去內(nèi)存取地址對(duì)信息來做數(shù)據(jù)傳輸?shù)臅r(shí)間,無(wú)需等待CPU操作DMA請(qǐng)求的時(shí)間,提高了 DMA數(shù)據(jù)傳輸效率的性能同時(shí)提高了 CPU操作10的效率。下面通過附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。


圖I是本發(fā)明實(shí)施例所述的基于SATA控制器的DMA預(yù)取設(shè)計(jì)框圖;圖2是SATA控制器的結(jié)構(gòu)框3是SATA控制器中DMA預(yù)取模塊的結(jié)構(gòu)框圖4是CPU協(xié)處理DMA預(yù)取數(shù)據(jù)的流程圖5是DMA預(yù)取狀態(tài)流程圖。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。 如圖3所示,基于SATA控制器的DMA地址對(duì)預(yù)取方法,包括LIS總線接口模塊,DMA狀態(tài)機(jī),接收數(shù)據(jù)緩存,發(fā)送數(shù)據(jù)緩存,信息控制模塊和預(yù)取緩存FIFO模塊;
LIS總線接口模塊為連接DMA狀態(tài)機(jī)和內(nèi)存的LIS總線提供接口,LIS總線為在DMA和內(nèi)存間進(jìn)行數(shù)據(jù)傳輸?shù)臄?shù)據(jù)總線;
接收數(shù)據(jù)緩存緩存DMA寫入內(nèi)存的數(shù)據(jù);
發(fā)送數(shù)據(jù)緩存緩存DMA讀出內(nèi)存中的數(shù)據(jù);
信息控制模塊對(duì)Local link總線接口信號(hào)的跨時(shí)鐘域進(jìn)行處理和對(duì)DMA通過Locallink總線接收和發(fā)送數(shù)據(jù)進(jìn)行控制;
預(yù)取緩存FIFO模塊緩存DMA預(yù)取數(shù)據(jù)的地址對(duì);DMA狀態(tài)機(jī)執(zhí)行DMA請(qǐng)求,處理DCR總線寄存器的狀態(tài)信息和處理DCR總線寄存器地址對(duì)信息并對(duì)地址對(duì)進(jìn)行預(yù)取,實(shí)現(xiàn)對(duì)地址對(duì)對(duì)應(yīng)在內(nèi)存中的預(yù)取數(shù)據(jù)進(jìn)行數(shù)據(jù)搬移,同時(shí)控制DMA狀態(tài)機(jī)各個(gè)狀態(tài)的跳變和各個(gè)狀態(tài)的邏輯輸出?;赟ATA控制器的DMA地址對(duì)預(yù)取方法實(shí)現(xiàn)包括上述模塊的硬件邏輯,接口實(shí)現(xiàn)以及CPU協(xié)處理器處理FIS包過程和DMA狀態(tài)機(jī)對(duì)傳輸數(shù)據(jù)的地址對(duì)的預(yù)取過程和預(yù)取時(shí)間以及位置,上述模塊的主要硬件邏輯和接口實(shí)現(xiàn)包括DMA狀態(tài)機(jī)邏輯和DCR總線接口邏輯。DMA狀態(tài)機(jī)主要是實(shí)現(xiàn)SATA控制器到內(nèi)存的數(shù)據(jù)搬移和對(duì)數(shù)據(jù)地址對(duì)的預(yù)取控制,保證傳輸數(shù)據(jù)的性能。通過硬件邏輯實(shí)現(xiàn)DMA狀態(tài)機(jī)的狀態(tài)跳轉(zhuǎn)和地址對(duì)的預(yù)取功能以及DCR總線接口寄存器的控制信息位的判斷和控制DMA讀寫;實(shí)現(xiàn)DMA的LIS接口對(duì)內(nèi)存數(shù)據(jù)的搬移,保證讀寫數(shù)據(jù)通路的傳輸性能。DMA狀態(tài)機(jī)狀態(tài)跳轉(zhuǎn)將在以下實(shí)例說明。DCR總線接口寄存器值通過DCR總線接口的CPU協(xié)處理器端實(shí)現(xiàn)對(duì)SATA控制器傳輸層FIS包的解析,獲取DMA地址對(duì)預(yù)取的地址和長(zhǎng)度并將地址對(duì)信息通過DCR總線下發(fā)到DMA狀態(tài)機(jī)的地址對(duì)寄存器。CPU協(xié)處理器的處理FIS包過程和DMA狀態(tài)機(jī)對(duì)傳輸數(shù)據(jù)的地址對(duì)的預(yù)取過程和預(yù)取時(shí)間以及位置,包括以下步驟
發(fā)送H2D命令寄存器FIS包主機(jī)端發(fā)送H2D命令寄存器FIS包到設(shè)備端,該H2D命令寄存器FIS包內(nèi)容包含有主機(jī)端要求的讀、寫和包的類型命令字信息;
D2H命令寄存器包檢測(cè)主機(jī)端發(fā)送完H2D命令寄存器FIS包后等待設(shè)備端的響應(yīng),若設(shè)備端接收到主機(jī)的H2D命令寄存器FIS包,設(shè)備端則發(fā)送D2H命令寄存器包給主機(jī)端;DMA設(shè)置FIS包檢測(cè)設(shè)備端發(fā)送DMA設(shè)置FIS包給主機(jī)端,主機(jī)端CPU接收DMA設(shè)置FIS包并從其中解析出DMA數(shù)據(jù)傳輸?shù)牡刂泛烷L(zhǎng)度,每個(gè)DMA數(shù)據(jù)傳輸?shù)牡刂泛烷L(zhǎng)度對(duì)應(yīng)在內(nèi)存中的一個(gè)塊區(qū)域,每一個(gè)塊區(qū)域在應(yīng)用層驅(qū)動(dòng)中對(duì)應(yīng)一個(gè)slot命令,所述slot是內(nèi)存中一個(gè)塊區(qū)域在應(yīng)用層中驅(qū)動(dòng)命令對(duì)應(yīng)的標(biāo)記符號(hào),CPU取DMA設(shè)置FIS包中的數(shù)據(jù)的地址和長(zhǎng)度通過DCR總線接口寫到DMA硬件寄存器,所述數(shù)據(jù)的地址和長(zhǎng)度為數(shù)據(jù)地址對(duì);DMA激活FIS包檢測(cè)若設(shè)備端檢測(cè)到主機(jī)端要求寫數(shù)據(jù)時(shí),在設(shè)備端發(fā)送DMA設(shè)置FIS包后會(huì)給主機(jī)端發(fā)送DMA激活FIS包,然后CPU進(jìn)入到寫數(shù)據(jù)地址對(duì)預(yù)取狀態(tài);
數(shù)據(jù)地址對(duì)預(yù)取CPU將上述數(shù)據(jù)地址通過DCR總線接口寫到DMA預(yù)取緩存FIFO模
塊;
設(shè)置設(shè)備位FIS包檢測(cè)數(shù)據(jù)傳輸完成后主機(jī)端會(huì)收到設(shè)備端的SDB FIS包,結(jié)束一次數(shù)據(jù)傳輸操作。其中,每個(gè)DMA激活FIS包對(duì)應(yīng)一次最大寫數(shù)據(jù)為8k字節(jié)。數(shù)據(jù)地址對(duì)預(yù)取包括
寫數(shù)據(jù)地址對(duì)預(yù)取=CPU將寫數(shù)據(jù)地址對(duì)通過DCR總線接口寫到DMA預(yù)取緩存FIFO模
塊;
以及
讀數(shù)據(jù)地址對(duì)預(yù)取=CPU將讀數(shù)據(jù)地址對(duì)通過DCR總線接口寫到DMA預(yù)取緩存FIFO模塊。圖I所示的是DMA結(jié)構(gòu)框圖上端是LIS總線接口 2,負(fù)責(zé)DMA數(shù)據(jù)到內(nèi)存的讀寫;下端是Local link接口分為TX_local link接口 4和RX_Local link接口 5,負(fù)責(zé)接收和發(fā)送數(shù)據(jù)到SATA傳輸層的接口 ;H0ST接口 6和DCR接口 7是DCR總線與CPU的接口,負(fù)責(zé)DMA控制模塊的寄存器的DCR總線訪問接口實(shí)現(xiàn)和驅(qū)動(dòng)端硬件接口寄存器的DCR總線訪問接口實(shí)現(xiàn);預(yù)取緩存FIFO模塊3是DMA控制模塊的硬件緩存,負(fù)責(zé)預(yù)存DMA讀寫數(shù)據(jù)的地址和長(zhǎng)度;在DMA預(yù)取時(shí)DMA控制邏輯直接讀取緩存FIFO模塊的數(shù)據(jù)的地址和長(zhǎng)度來進(jìn)行DMA操作;DMA控制模塊I完成主要的DMA數(shù)據(jù)操作邏輯,包括DMA的預(yù)取狀態(tài)機(jī)實(shí)現(xiàn),DMA初始化,中斷管理等。以SATA控制器為例,說明DMA預(yù)取在SATA控制器中的位置和用法,SATA控制器的結(jié)構(gòu)框圖如圖2所示由SATA控制器物理層模塊19,SATA控制器數(shù)據(jù)鏈路層模塊18,DMA模塊17,信號(hào)控制模塊16,Rx_locallink接口模塊15,Tx_locallink接口模塊14,主機(jī)讀內(nèi)存接口模塊11,主機(jī)寫內(nèi)存接口模塊10,DCR接口模塊12,主機(jī)接口模塊13和CPU協(xié)處理器20構(gòu)成。主機(jī)內(nèi)存寫接口模塊10 :位于SATA控制器的傳輸層,是SATA控制器DMA寫內(nèi)存的接口,負(fù)責(zé)實(shí)現(xiàn)SATA控制器DMA操作內(nèi)存的I is接口實(shí)現(xiàn)(Lis接口是DMA訪問內(nèi)存的總線接口)。主機(jī)內(nèi)存讀接口模塊11 :位于SATA控制器的傳輸層,是SATA控制器DMA讀內(nèi)存的接口,負(fù)責(zé)實(shí)現(xiàn)SATA控制器DMA操作內(nèi)存的Lis接口實(shí)現(xiàn)(Lis接口是DMA訪問內(nèi)存的總線接口)。DCR接口模塊12:是CPU訪問DMA寄存器的DCR總線接口,負(fù)責(zé)將CPU的請(qǐng)求傳送給DMA,然后DMA按照請(qǐng)求的長(zhǎng)度,源地址和目標(biāo)地址來進(jìn)行數(shù)據(jù)搬移(數(shù)據(jù)搬移是指DMA讀寫內(nèi)存時(shí)數(shù)據(jù)在內(nèi)存和外設(shè)之間的流向,當(dāng)做DMA讀操作時(shí),是DMA把內(nèi)存的數(shù)據(jù)讀出來到外設(shè);當(dāng)做DMA寫操作時(shí),是DMA把外設(shè)的數(shù)據(jù)寫到內(nèi)存去)。主機(jī)接口模塊13:是CPU訪問DMA寄存器的DCR總線接口,負(fù)責(zé)完成對(duì)指定寄存器的訪問。Rx_locallink模塊15和Tx_locallink模塊14 :位于SATA控制器傳輸層(transport)和數(shù)據(jù)鏈路層(link)中間,負(fù)責(zé)實(shí)現(xiàn)數(shù)據(jù)鏈路層數(shù)據(jù)到傳輸層中DMA的locallink接口和數(shù)據(jù)緩存。在Rx_locallink和Tx_locallink模塊里面分別調(diào)用一個(gè)TX_fifo和RX_fifo來緩存接收和發(fā)送數(shù)據(jù)。對(duì)RX_fifo和TX_fifo中數(shù)據(jù)的讀寫操作是由DMA來操作,DMA接收到CPU的請(qǐng)求,執(zhí)行在內(nèi)存和RX_fifo和TX_fifo中進(jìn)行數(shù)據(jù)搬移。信號(hào)控制模塊16 :負(fù)責(zé)local link接口信號(hào)跨時(shí)鐘域的轉(zhuǎn)換,保證Iocallink接口控制信號(hào)質(zhì)量。DMA模塊17 :是SATA控制器做數(shù)據(jù)搬移和DMA預(yù)取的控制模塊,保證傳輸數(shù)據(jù)的性能,SATA控制器的讀寫數(shù)據(jù)都通過DMA模塊實(shí)現(xiàn)在內(nèi)存中進(jìn)行交互。DMA模塊實(shí)現(xiàn)了DMA操作的狀態(tài)機(jī)狀態(tài)的跳轉(zhuǎn)和對(duì)地址對(duì)的預(yù)取功能,以及對(duì)數(shù)據(jù)通路的傳輸控制。SATA數(shù)據(jù)鏈路層模塊18 :位于SATA控制器的數(shù)據(jù)鏈路層(link),是SATA控制器物理層和傳輸層的數(shù)據(jù)接口。SATA數(shù)據(jù)鏈路層模塊實(shí)現(xiàn)SATA的數(shù)據(jù)鏈路層協(xié)議,負(fù)責(zé)產(chǎn)生和接收數(shù)據(jù)鏈路層協(xié)議的原語(yǔ),負(fù)責(zé)準(zhǔn)備每一幀數(shù)據(jù)信息結(jié)構(gòu)的傳輸,原語(yǔ)的解碼,檢測(cè)傳輸過程中的錯(cuò)誤信息等。通俗地說,我們的SATA控制器數(shù)據(jù)鏈路層模塊主要實(shí)現(xiàn)的是對(duì)link層傳輸數(shù)據(jù)的加解擾,拆組幀,CRC校驗(yàn)等,負(fù)責(zé)將幀數(shù)據(jù)傳輸請(qǐng)求轉(zhuǎn)換為幀數(shù)據(jù)的local link 接口請(qǐng)求。
SATA控制器物理層模塊19 :位于SATA控制器的物理層(phy),是控制器與外部存儲(chǔ)設(shè)備之間的硬件接口。SATA控制器物理層模塊由SATA協(xié)議物理層定義的數(shù)據(jù)鏈路收發(fā)器組成,數(shù)據(jù)鏈路收發(fā)器實(shí)現(xiàn)SATA數(shù)據(jù)鏈路的接收和發(fā)送、執(zhí)行數(shù)據(jù)鏈路的初始化,數(shù)據(jù)鏈路的電源管理以及設(shè)備接口的熱插拔操作。通俗的講我們的SATA控制器物理層模塊在整個(gè)SATA控制器中主要是實(shí)現(xiàn)做數(shù)據(jù)傳輸?shù)臏?zhǔn)備工作,實(shí)現(xiàn)控制器與外部硬件的握手,若握手完成則告訴我們的SATA數(shù)據(jù)鏈路層模塊可以傳輸數(shù)據(jù);若握手不成功,否則終止數(shù)據(jù)傳輸。CPU協(xié)處理模塊為SATA控制器的軟核(其實(shí)相當(dāng)于調(diào)用的一個(gè)軟核IP模塊),用于請(qǐng)求DMA操作和應(yīng)用層驅(qū)動(dòng)層硬件接口的實(shí)現(xiàn)。其它與控制器的硬件接口模塊有外圍硬件設(shè)備和內(nèi)存,控制器涉及到總線接口有Lis 接口,DCR 接口和 Local link 接口。Lis接口 DMA訪問內(nèi)存的總線接口。 DCR接口CPU訪問DMA寄存器的總線接口。Local link接口 link數(shù)據(jù)傳輸總線接口。圖3所示的是DMA預(yù)取模塊結(jié)構(gòu)圖,DMA預(yù)取模塊是SATA控制器做數(shù)據(jù)搬移的控制模塊,保證傳輸數(shù)據(jù)的性能SATA控制器的讀寫數(shù)據(jù)都通過DMA預(yù)取模塊來實(shí)現(xiàn)在內(nèi)存中進(jìn)行數(shù)據(jù)交互。DMA預(yù)取模塊通過硬件邏輯實(shí)現(xiàn)DMA狀態(tài)機(jī)的狀態(tài)跳轉(zhuǎn)和對(duì)地址對(duì)的預(yù)取以及對(duì)總線接口寄存器和控制信息位的判斷和控制,保證數(shù)據(jù)通路傳輸?shù)男阅?。DMA模塊內(nèi)部的功能實(shí)現(xiàn)包括有七塊,分別是DMA讀寫內(nèi)存的LIS接口模塊26,DMA狀態(tài)機(jī)20,接收數(shù)據(jù)緩存(RX_fifo) 24,發(fā)送數(shù)據(jù)緩存(TX_fifo) 22,信息控制模塊23和預(yù)取緩存FIFO模塊21。DMA讀寫內(nèi)存接口的LIS接口 26邏輯實(shí)現(xiàn)DMA操作讀寫內(nèi)存的LIS總線接口 ;接收數(shù)據(jù)緩存(RX_fifo)24邏輯實(shí)現(xiàn)寫入內(nèi)存數(shù)據(jù)緩存;
發(fā)送數(shù)據(jù)緩存(TX_fifo)22邏輯實(shí)現(xiàn)讀出內(nèi)存數(shù)據(jù)緩存;
信息控制模塊23邏輯實(shí)現(xiàn)對(duì)Local link接口信號(hào)的跨時(shí)鐘域處理和對(duì)DMA與Locallink接口數(shù)據(jù)的接收和發(fā)送的數(shù)據(jù)控制;
預(yù)取緩存FIFO模塊21硬件邏輯實(shí)現(xiàn)DMA預(yù)取地址對(duì)的緩存。DMA狀態(tài)機(jī)20是整個(gè)DMA預(yù)取和狀態(tài)控制的執(zhí)行者,DMA操作可以是讀內(nèi)存和寫內(nèi)存。讀內(nèi)存時(shí)將內(nèi)存中的有效地址對(duì)的數(shù)據(jù)從內(nèi)存搬移到Tx_l0callink_fif0中然后輸出到device(Tx_locallink_fifo就是以上提到的發(fā)送數(shù)據(jù)緩存接口中調(diào)用的fifo)。寫內(nèi)存時(shí)將Rx_locallink_fifo中的數(shù)據(jù)搬移到內(nèi)存的有效地址中(Rx_locallink_fifo就是以上提到的接收數(shù)據(jù)緩存接口中調(diào)用的fifo)在Rx_locallink_fifo中緩存的是從Device中流過來的有效數(shù)據(jù),DMA寫操作時(shí)被讀出到內(nèi)存中。
DMA狀態(tài)機(jī)處理CPU的DCR總線接口的硬件寄存器的值來執(zhí)行DMA的讀寫操作。DMA請(qǐng)求讀寫操作時(shí),CPU首先會(huì)通過DCR總線將DMA要操作的數(shù)據(jù)地址和長(zhǎng)度(地址對(duì))發(fā)送到硬件緩存中,每一次做DMA操作時(shí)CPU會(huì)判斷當(dāng)前操作的地址對(duì)在內(nèi)存區(qū)域?qū)?yīng)標(biāo)記符號(hào),然后把當(dāng)前的地址對(duì)發(fā)送到硬件緩存FIFO中,DMA狀態(tài)機(jī)做DMA讀寫操作時(shí)直接預(yù)取在硬件緩存中的地址對(duì)來做數(shù)據(jù)的搬移。DMA狀態(tài)機(jī)和數(shù)據(jù)讀寫操作是通過硬件邏輯實(shí)現(xiàn)的。DMA地址對(duì)預(yù)取發(fā)生在SATA協(xié)議傳輸層CPU協(xié)處理器請(qǐng)求做DMA操作的DataFIS包傳輸時(shí)來緩存數(shù)據(jù)的地址和長(zhǎng)度。CPU協(xié)處理器請(qǐng)求DMA讀寫操作是通過對(duì)Host和Device端交互的數(shù)據(jù)包的狀態(tài)信息來判斷的,舉例說明DMA讀寫操作方式
在NCQ(SATA協(xié)議規(guī)定的傳輸層數(shù)據(jù)包傳輸?shù)囊环N方式Native Queued Command的縮寫)讀數(shù)據(jù)時(shí)主機(jī)(Host)端先發(fā)H2D命令寄存器FIS包(H2D Register FIS包);設(shè)備端(Device)接收到Host端發(fā)來的H2D Register FIS包后會(huì)解析包的內(nèi)容,判斷是讀數(shù)據(jù)請(qǐng)求,然后會(huì)給Host回D2H命令寄存器包(D2H Register FIS包);接著發(fā)送DMA設(shè)置FIS包(DMA Setup FIS包),在接著就是發(fā)送Data FIS包給Host端。在發(fā)送Data FIS包時(shí),我們就可以對(duì)Data FIS包的數(shù)據(jù)結(jié)構(gòu)的地址和長(zhǎng)度作緩存。Data FIS包的數(shù)據(jù)結(jié)構(gòu)的地址和長(zhǎng)度是對(duì)應(yīng)CPU協(xié)處理器定義的傳輸層的數(shù)據(jù)結(jié)構(gòu)的指針。Data FIS包數(shù)據(jù)發(fā)送完成后,Device端會(huì)給Host端發(fā)送置設(shè)備位FIS包(Set Device FIS包),表示數(shù)據(jù)發(fā)送完成。當(dāng)DMA讀完成時(shí),DMA狀態(tài)機(jī)會(huì)給CPU協(xié)處理器返回DMA操作完成的標(biāo)志位信號(hào)DMA_ok和DMA完成中斷請(qǐng)求。在NCQ 寫數(shù)據(jù)時(shí)Host 端先發(fā) H2D Register FIS 包(H2D 為 Host to Device);Device接收到Host端發(fā)來的H2D Register FIS包后會(huì)解析包的內(nèi)容,判斷是寫數(shù)據(jù)請(qǐng)求,然后會(huì)給 Host 回 D2H Register FIS 包(D2H 為 Device to Host);接著發(fā)送 DMA SetupFIS包。在跟著會(huì)發(fā)送DMA Activate FIS給Host端。當(dāng)Host端接收到Device端發(fā)來的DMA Activate FIS包后,Host端就開始發(fā)Data FIS包給Device端進(jìn)行寫數(shù)據(jù)了。當(dāng)Data FIS包發(fā)送完成后Device端會(huì)給Host端發(fā)送Set Device FIS包,表示數(shù)據(jù)接收完成。每個(gè)DMA Activate FIS包最大長(zhǎng)度為8k字節(jié),如果發(fā)送Data FIS包時(shí),數(shù)據(jù)長(zhǎng)度大于8k時(shí),Device端會(huì)在沒8k數(shù)據(jù)接收完成時(shí)給Host端回一個(gè)DAM Activate FIS包。當(dāng)DMA寫操作結(jié)束時(shí),DMA狀態(tài)機(jī)會(huì)給CPU協(xié)處理器返回DMA操作完成的標(biāo)志位信號(hào)DMA_ok和DMA完成中斷請(qǐng)求。圖4所示的是CPU協(xié)處理DMA預(yù)取流程圖,CPU協(xié)處理器完成SATA控制器數(shù)據(jù)傳輸?shù)膫鬏攲訁f(xié)議,協(xié)處理器對(duì)DMA數(shù)據(jù)的地址和長(zhǎng)度進(jìn)行判斷和預(yù)存。CPU協(xié)處理器DMA預(yù)取流程大致如下
CPU 一開始處于空閑狀態(tài),當(dāng)DMA請(qǐng)求讀寫操作時(shí),主機(jī)端首先發(fā)送H2D命令寄存器FIS包到設(shè)備端,然后等待接收設(shè)備端的FIS包信息。在設(shè)備端收到主機(jī)短的H2D命令寄存器FIS包后會(huì)回復(fù)主機(jī)D2H命令寄存器FIS包和DMA設(shè)置FIS包給主機(jī)端。如果DMA請(qǐng)求狀態(tài)是讀操作,則設(shè)備端在回復(fù)DMA設(shè)置FIS包后接著發(fā)送數(shù)據(jù)FIS包給主機(jī),CPU在檢測(cè)到DMA設(shè)置FIS包時(shí)解析DMA設(shè)置FIS包的內(nèi)容,從中取出DMA數(shù)據(jù)傳輸?shù)牡刂泛烷L(zhǎng)度,每一次DMA數(shù)據(jù)傳輸?shù)牡刂泛烷L(zhǎng)度對(duì)應(yīng)在內(nèi)存中的一個(gè)塊區(qū)域,每一個(gè)塊區(qū)域在應(yīng)用層驅(qū)動(dòng)中對(duì)應(yīng)一個(gè)slot命令。slot相當(dāng)于是內(nèi)存中一個(gè)塊區(qū)域在應(yīng)用層中驅(qū)動(dòng)命令對(duì)應(yīng)的標(biāo)記符號(hào)。我們只需要去取這個(gè)slot命令符號(hào)就能知道要對(duì)哪一塊的內(nèi)存地址進(jìn)行讀寫操作。CPU取DMA設(shè)置FIS包中的數(shù)據(jù)地址和長(zhǎng)度通過DCR總線接口寫到DMA硬件寄存器,即寫道硬件預(yù)取緩存FIFO中。DMA讀操作時(shí)直接預(yù)取緩存FIFO中的地址和長(zhǎng)度來作讀操作。如果DMA請(qǐng)求狀態(tài)是寫操作,則設(shè)備端在回復(fù)DMA設(shè)置FIS包后接著發(fā)送DMA激活FIS包給主機(jī)端。主機(jī)端收到DMA激活FIS包后,開始對(duì)設(shè)備端寫數(shù)據(jù),主機(jī)端開始發(fā)送數(shù)據(jù)FIS包給設(shè)備端。DMA直接取預(yù)取緩存FIFO中的地址和長(zhǎng)度來作寫操作。DMA讀寫數(shù)據(jù)完成后設(shè)備端發(fā)送SDB (設(shè)置設(shè)備位)FIS給主機(jī)端來結(jié)束一次DMA的預(yù)取操作。
10
圖5所示的是DMA預(yù)取狀態(tài)流程圖
DMA預(yù)取狀態(tài)流程圖一開始處于空閑(S_IDLE)狀態(tài),當(dāng)檢測(cè)到DMA請(qǐng)求時(shí)進(jìn)入到總線請(qǐng)求狀態(tài)(S_BUS_REQ),總線請(qǐng)求狀態(tài)等待DMA的讀寫請(qǐng)求狀態(tài),如果判斷DMA請(qǐng)求狀態(tài)為DMA寫操作,則進(jìn)入到寫請(qǐng)求(S_WRT_REQ)狀態(tài);如果判斷DMA請(qǐng)求狀態(tài)為DMA讀操作,則進(jìn)入到讀地址請(qǐng)求(S_ADR_REQ)狀態(tài)。在寫請(qǐng)求狀態(tài)時(shí),發(fā)送寫狀態(tài)信息到內(nèi)存控制器,等待總線的寫接收請(qǐng)求信號(hào)。收到總線的寫接收請(qǐng)求信號(hào)后則跳到寫數(shù)據(jù)(S_WRT_DAT)狀態(tài)進(jìn)行DMA的寫數(shù)據(jù)操作。在這個(gè)過程中判斷寫數(shù)據(jù)完成的響應(yīng),當(dāng)收到寫數(shù)據(jù)完成響應(yīng)信號(hào)就跳到寫數(shù)據(jù)響應(yīng)(S_WRT_ACK)狀態(tài)。寫數(shù)據(jù)響應(yīng)狀態(tài)檢測(cè)數(shù)據(jù)幀結(jié)束標(biāo)識(shí)符,如果接收到幀結(jié)束標(biāo)識(shí)符說明數(shù)據(jù)一次DMA寫操作完成,退出狀態(tài)跳轉(zhuǎn)到空閑(S_IDLE)狀態(tài);如果沒有接收到幀結(jié)束標(biāo)識(shí)符,則說明數(shù)據(jù)的操作沒有完成,狀態(tài)跳轉(zhuǎn)到總線請(qǐng)求(S_BUS_REQ)狀態(tài)。在讀地址請(qǐng)求狀態(tài)時(shí),等待總線的讀接收請(qǐng)求信號(hào)。收到總線的讀接收請(qǐng)求信號(hào)后則跳到讀數(shù)據(jù)等待(S_WAI_DAT)狀態(tài)進(jìn)行DMA的讀數(shù)據(jù)操作。在這個(gè)過程中等待總線讀數(shù)據(jù)完成響應(yīng)信號(hào),如果接收到總線讀數(shù)據(jù)完成響應(yīng)信號(hào),則說明DMA讀數(shù)據(jù)操作完成,狀態(tài)跳轉(zhuǎn)到空閑(S_IDLE)狀態(tài);如果沒有接收到總線讀數(shù)據(jù)完成響應(yīng)信號(hào),則說明數(shù)據(jù)的操作沒有完成,狀態(tài)跳轉(zhuǎn)到總線請(qǐng)求(S_BUS_REQ)狀態(tài)。判斷讀數(shù)據(jù)完成響應(yīng)信號(hào),當(dāng)收到讀數(shù)據(jù)完成響應(yīng)信號(hào)就跳到讀數(shù)據(jù)響應(yīng)(S_WRT.ACK)狀態(tài)。寫數(shù)據(jù)響應(yīng)狀態(tài)檢測(cè)數(shù)據(jù)幀結(jié)束標(biāo)識(shí)符,如果接收到幀結(jié)束標(biāo)識(shí)符說明數(shù)據(jù)一次DMA寫操作完成,退出狀態(tài)跳轉(zhuǎn)到空閑(S_IDLE)狀態(tài)。表I :DMA請(qǐng)求DCR總線寄存器列表
權(quán)利要求
1.一種基于SATA控制器的DMA地址對(duì)預(yù)取方法,其特征在于,包括LIS總線接口模塊, DMA狀態(tài)機(jī),接收數(shù)據(jù)緩存,發(fā)送數(shù)據(jù)緩存,信息控制模塊和預(yù)取緩存FIFO模塊;所述LIS總線接口模塊為連接DMA狀態(tài)機(jī)和內(nèi)存的LIS總線提供接口,所述LIS總線為在DMA和內(nèi)存間進(jìn)行數(shù)據(jù)傳輸?shù)臄?shù)據(jù)總線;所述接收數(shù)據(jù)緩存緩存DMA寫入內(nèi)存的數(shù)據(jù);所述發(fā)送數(shù)據(jù)緩存緩存DMA讀出內(nèi)存中的數(shù)據(jù);所述信息控制模塊對(duì)Local link總線接口信號(hào)的跨時(shí)鐘域進(jìn)行處理和對(duì)DMA通過 Local link總線接收和發(fā)送數(shù)據(jù)進(jìn)行控制;所述預(yù)取緩存FIFO模塊緩存DMA預(yù)取數(shù)據(jù)的地址對(duì);所述DMA狀態(tài)機(jī)執(zhí)行DMA請(qǐng)求,處理DCR總線寄存器的狀態(tài)信息和處理DCR總線寄存器地址對(duì)信息并對(duì)地址對(duì)進(jìn)行預(yù)取,實(shí)現(xiàn)對(duì)地址對(duì)對(duì)應(yīng)在內(nèi)存中的預(yù)取數(shù)據(jù)進(jìn)行數(shù)據(jù)搬移,同時(shí)控制DMA狀態(tài)機(jī)各個(gè)狀態(tài)的跳變和各個(gè)狀態(tài)的邏輯輸出。
2.一種基于權(quán)利要求I所述的基于SATA控制器的DMA地址對(duì)預(yù)取的方法,其特征在于,所述DMA狀態(tài)機(jī);DMA狀態(tài)機(jī)主要是實(shí)現(xiàn)SATA控制器到內(nèi)存的數(shù)據(jù)搬移和對(duì)數(shù)據(jù)地址對(duì)的預(yù)取控制, 保證傳輸數(shù)據(jù)的性能,通過硬件邏輯實(shí)現(xiàn)DMA狀態(tài)機(jī)的狀態(tài)跳轉(zhuǎn)和地址對(duì)的預(yù)取功能以及 DCR總線接口寄存器的控制信息位的判斷和控制DMA讀寫,實(shí)現(xiàn)DMA的LIS接口對(duì)內(nèi)存數(shù)據(jù)的搬移,保證讀寫數(shù)據(jù)通路的傳輸性能。
3.一種基于權(quán)利要求2所述的基于SATA控制器的DMA地址對(duì)預(yù)取的方法,其特征在于,所述DCR總線接口寄存器DCR總線接口寄存器值通過DCR總線接口的CPU協(xié)處理器端實(shí)現(xiàn)對(duì)SATA控制器傳輸層 FIS包的解析,獲取DMA地址對(duì)預(yù)取的地址和長(zhǎng)度并將地址對(duì)信息通過DCR總線下發(fā)到DMA 狀態(tài)機(jī)的地址對(duì)寄存器。
4.一種基于權(quán)利要求2和3所述的基于SATA控制器的DMA地址對(duì)預(yù)取的方法,其特征在于,CPU協(xié)處理器的處理FIS包過程和DMA狀態(tài)機(jī)對(duì)傳輸數(shù)據(jù)的地址對(duì)的預(yù)取過程和預(yù)取時(shí)間以及位置,包括以下步驟發(fā)送H2D命令寄存器FIS包主機(jī)端發(fā)送H2D命令寄存器FIS包到設(shè)備端,該H2D命令寄存器FIS包內(nèi)容包含有主機(jī)端要求的讀、寫和包的類型命令字信息;D2H命令寄存器包檢測(cè)上述主機(jī)端發(fā)送完H2D命令寄存器FIS包后等待上述設(shè)備端的響應(yīng),若上述設(shè)備端接收到主機(jī)的H2D命令寄存器FIS包,上述設(shè)備端則發(fā)送D2H命令寄存器包給上述主機(jī)端;DMA設(shè)置FIS包檢測(cè)上述設(shè)備端發(fā)送DMA設(shè)置FIS包給上述主機(jī)端,主機(jī)端CPU接收 DMA設(shè)置FIS包并從其中解析出DMA數(shù)據(jù)傳輸?shù)牡刂泛烷L(zhǎng)度,每個(gè)DMA數(shù)據(jù)傳輸?shù)牡刂泛烷L(zhǎng)度對(duì)應(yīng)在內(nèi)存中的一個(gè)塊區(qū)域,每一個(gè)塊區(qū)域在應(yīng)用層驅(qū)動(dòng)中對(duì)應(yīng)一個(gè)slot命令,所述 slot是內(nèi)存中一個(gè)塊區(qū)域在應(yīng)用層中驅(qū)動(dòng)命令對(duì)應(yīng)的標(biāo)記符號(hào),CPU取DMA設(shè)置FIS包中的數(shù)據(jù)的地址和長(zhǎng)度通過DCR總線接口寫到DMA硬件寄存器,所述數(shù)據(jù)的地址和長(zhǎng)度為數(shù)據(jù)地址對(duì);DMA激活FIS包檢測(cè)若設(shè)備端檢測(cè)到主機(jī)端要求寫數(shù)據(jù)時(shí),在設(shè)備端發(fā)送DMA設(shè)置 FIS包后會(huì)給主機(jī)端發(fā)送DMA激活FIS包,然后CPU進(jìn)入到寫數(shù)據(jù)地址對(duì)預(yù)取狀態(tài);數(shù)據(jù)地址對(duì)預(yù)取CPU將上述數(shù)據(jù)地址通過DCR總線接口寫到DMA預(yù)取緩存FIFO模塊;設(shè)置設(shè)備位FIS包檢測(cè)數(shù)據(jù)傳輸完成后主機(jī)端會(huì)收到設(shè)備端的SDB FIS包,結(jié)束一次數(shù)據(jù)傳輸操作。
5.根據(jù)權(quán)利要求4所述的基于SATA控制器的DMA地址對(duì)預(yù)讀取方法,其特征在于,所述數(shù)據(jù)地址對(duì)預(yù)取包括寫數(shù)據(jù)地址對(duì)預(yù)取=CPU將寫數(shù)據(jù)地址對(duì)通過DCR總線接口寫到DMA預(yù)取緩存FIFO模塊;以及讀數(shù)據(jù)地址對(duì)預(yù)取=CPU將讀數(shù)據(jù)地址對(duì)通過DCR總線接口寫到DMA預(yù)取緩存 FIFO模塊。
全文摘要
本發(fā)明公開了一種基于SATA控制器的DMA地址對(duì)預(yù)取的方法,通過硬件邏輯調(diào)用一個(gè)預(yù)取緩存FIFO模塊,緩存FIFO模塊對(duì)DMA預(yù)操作的地址和長(zhǎng)度(地址對(duì))進(jìn)行緩存。DMA做數(shù)據(jù)傳輸時(shí),CPU處理DMA的中斷請(qǐng)求,判斷傳輸層數(shù)據(jù)交互的信息,并從數(shù)據(jù)包中解析出DMA操作的地址對(duì)信息,通過DCR總線將數(shù)據(jù)的地址對(duì)信息下發(fā)到硬件緩存FIFO模塊。只要硬件緩存FIFO模塊為空,CPU就會(huì)將地址對(duì)信息下發(fā)到硬件緩存FIFO中。DMA做數(shù)據(jù)傳輸時(shí),直接從硬件緩存FIFO中去取地址對(duì)信息,省去了DMA去內(nèi)存取地址對(duì)信息來做數(shù)據(jù)傳輸?shù)臅r(shí)間,無(wú)需等待CPU操作DMA請(qǐng)求的時(shí)間,提高了DMA數(shù)據(jù)傳輸效率的性能同時(shí)提高了CPU操作IO的效率。
文檔編號(hào)G06F13/28GK102937939SQ201210381708
公開日2013年2月20日 申請(qǐng)日期2012年10月10日 優(yōu)先權(quán)日2012年10月10日
發(fā)明者張慶敏, 張衡, 胡剛 申請(qǐng)人:無(wú)錫眾志和達(dá)存儲(chǔ)技術(shù)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1