專利名稱:基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通信領(lǐng)域,具體地,涉及ー種用于讀取內(nèi)存數(shù)據(jù)的基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法。
背景技術(shù):
目前,隨著計算機技術(shù)的發(fā)展,總線也由并行總線發(fā)展到高速串行總線。總線的讀寫帶寬已經(jīng)達到了 lGB/s以上,大數(shù)據(jù)量的讀寫多依靠DMA來處理,所以DMA工作模式,讀寫方式會直接影響總線帶寬的利用率?,F(xiàn)有的DMA多為并行總線設計,僅適合于并行總線讀寫方式。如果應用到高速串行總線,會極大地影響讀寫效率,無法發(fā)揮高速串行總線的高帶寬。以總線的讀過程為例,總線主端會先發(fā)送讀請求,從端收到讀請求,然后響應請求數(shù)據(jù),傳輸數(shù)據(jù)直到完成。并行 總線的響應速度很快,僅幾個時鐘,IOOns內(nèi)響應讀請求,但是傳輸數(shù)據(jù)相對較慢。而高速串行總線,由于總線延時較大,讀請求響應很慢,Ius以上,但是數(shù)據(jù)傳輸比較快。
發(fā)明內(nèi)容
本發(fā)明的目的在于,針對上述問題,提出,以實現(xiàn)數(shù)據(jù)傳輸快并且響應快的優(yōu)點。為實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是
一種基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法,包括寫操作和讀操作 所述讀操作具體步驟如下
主機通過DCR設置DMA寄存器,TX狀態(tài)機根據(jù)所述DMA寄存器設置依次循環(huán)發(fā)送讀描述符,讀數(shù)據(jù)和寫描述符請求,然后由端ロ狀態(tài)機控制完成上述各種請求,所述端ロ狀態(tài)機通過LIS總線發(fā)出讀或?qū)懖僮鳎?br>
所述LIS總線讀寫操作具體如下
所述端ロ狀態(tài)機發(fā)送多個讀描述符與讀數(shù)據(jù)操作通過LIS總線處理,該LIS總線將所述多個讀請求依次順序發(fā)出,然后LIS總線依次收到數(shù)據(jù)I、數(shù)據(jù)2直至數(shù)據(jù)n,所述端ロ狀態(tài)機將收到的數(shù)據(jù)分別更新到寄存器文件或發(fā)送到StreamLink接ロ ;
在主機設置DCR寄存器的同吋,RX狀態(tài)機根據(jù)所述DMA寄存器設置依次循環(huán)發(fā)送讀描述符,寫數(shù)據(jù)和寫描述符請求,然后端ロ狀態(tài)機控制完成上述各種請求,所述端ロ狀態(tài)機通過LIS總線發(fā)出讀或?qū)懖僮鳌_Mー步的,所述TX狀態(tài)機讀取描述符,包括以下步驟
步驟I:判斷TX狀態(tài)機是否處于空閑狀態(tài),若處于空閑狀態(tài)則由主機通過DCR寫TX描述符寄存器,TX狀態(tài)機檢測TX寄存器,
步驟2 :如果檢測到TX寄存器中當前描述符與結(jié)尾描述符不同,則發(fā)送ー個CL8R (讀描述符)請求給TX/RX仲裁器,該CL8R請求完成后,將寄存器的完成讀描述符功能位置為完成讀描述符狀態(tài);
步驟3 :連續(xù)發(fā)送幾個B16R (讀數(shù)據(jù))請求給TX/RX仲裁器,直到描述符中要求傳輸?shù)臄?shù)據(jù)全部從內(nèi)存讀出并發(fā)送到StreamLink接ロ,然后將寄存器的完成數(shù)據(jù)位置位;
步驟4 :所述TX狀態(tài)機發(fā)送ー個CL8W (寫描述符)請求給TX / RX仲裁器,將完成狀態(tài)信息寫回內(nèi)存,完成CL8W請求之后,將寄存器的繼續(xù)信號置位或者將寄存器的停止信號置位,如果狀態(tài)寄存器顯示下ー個描述符指針不是ー個空指針和未設置停止結(jié)束位,則將寄存器的繼續(xù)信號置位并將狀態(tài)機轉(zhuǎn)換到取得描述符狀態(tài),否則將寄存器的停止信號置位并將TX狀態(tài)機轉(zhuǎn)換到空閑狀態(tài)。進ー步的,所述RX狀態(tài)機讀取描述符,包括以下步驟
步驟I:判斷RX狀態(tài)機是否處于空閑狀態(tài),若處于空閑狀態(tài)則由主機通過DCR寫RX描述符寄存器,并檢查RX描述符寄存器;
步驟2 :如果檢測到TX寄存器中當前描述符與結(jié)尾描述符不同,則發(fā)送ー個CL8R請求給TX/RX仲裁器,該CL8R請求完成后,將寄存器的完成讀描述符功能位置為完成讀描述符 狀態(tài);
步驟3 :連續(xù)發(fā)送幾個B16W (寫數(shù)據(jù))請求給TX/RX仲裁器,直到StreamLink接ロ收集到的所有數(shù)據(jù)并寫入內(nèi)存,將寄存器的完成數(shù)據(jù)位置位;
步驟4 :所述RX狀態(tài)機發(fā)送ー個CL8W的請求給TX / RX仲裁器,在完成該CL8W請求之后,將寄存器的DMA繼續(xù)位置位或者將寄存器的DMA停止位置位,如果狀態(tài)寄存器顯示下ー個描述符指針不是ー個空指針和未設置停止結(jié)束位,則將寄存器的DMA繼續(xù)位置位并將狀態(tài)機轉(zhuǎn)換到取得描述符狀態(tài),否則將寄存器的DMA停止位置位并將RX狀態(tài)機轉(zhuǎn)換到空閑狀態(tài)。進ー步的,所述端ロ狀態(tài)機讀取描述符并將數(shù)據(jù)發(fā)送到TX_streamlink和RX_streamlink接口上,包括以下步驟
步驟I :判斷端ロ狀態(tài)機是否處于空閑狀態(tài),如端ロ狀態(tài)機處于空閑狀態(tài),則TX/RX仲裁器發(fā)出ー個CL8R請求或者B16W請求;
步驟2 :所述端ロ狀態(tài)機根據(jù)上述的CL8R請求或者B16W請求訪問寄存器文件中的緩沖區(qū)地址和緩沖區(qū)長度寄存器;
步驟3 :若上述CL8R請求或者B16W請求被接受,則上述端ロ狀態(tài)機將緩沖區(qū)地址和緩沖區(qū)長度計數(shù)器的值從寄存器文件載入;
步驟4 :如果所述端ロ狀態(tài)機從上述緩沖區(qū)載入的地址和數(shù)據(jù)沒有錯誤,則計數(shù)器載入緩沖區(qū)的地址和長度計數(shù)器的值,然后所述端ロ狀態(tài)機發(fā)出ー個CL8R或者B16W請求,若這個請求被接受,讀端ロ狀態(tài)機可以轉(zhuǎn)換到步驟5或步驟9兩個狀態(tài)中的其中ー個;
步驟5 :若接受CL8R請求,則上述端ロ狀態(tài)機在設置控制信號去讀取ー個描述符;并等待端ロ狀態(tài)機上的RdDataRdy的信號被置位;
步驟6 :若RdDataRdy的信號被置位,則所述端ロ狀態(tài)機請求訪問寄存器文件,從PCIE卡的讀FIFO中獲取下個描述符指針、緩沖區(qū)地址、緩沖區(qū)長度寄存器以及狀態(tài)寄存器值,并將描述符指針、緩沖區(qū)地址、緩沖區(qū)長度寄存器以及狀態(tài)寄存器值存儲在狀態(tài)寄存器;步驟7 :所述端ロ狀態(tài)機清空寄存器中的描述符,等待StreamLink接ロ接收DMA數(shù)據(jù),如StreamLink接ロ接收到Dst_Rdy信號,則所述端ロ狀態(tài)機轉(zhuǎn)換到空閑狀態(tài);
步驟8:若接受B16Ws請求,則上述端ロ狀態(tài)機設置控制信號從內(nèi)存讀數(shù)據(jù)傳輸?shù)絊treamLink接ロ,并將數(shù)據(jù)存儲到寄存器,端ロ狀態(tài)機請求訪問寄存器文件,如果訪問被接受,上述緩沖區(qū)地址和緩沖區(qū)長度寄存器的值更新為下一次緩沖區(qū)地址和緩沖區(qū)長度寄存器的值,然后讀取內(nèi)存中的數(shù)據(jù)并將該數(shù)據(jù)發(fā)送到StreamLink接ロ ;
步驟9 :如所有的數(shù)據(jù)獲取完成或者被重置,所述端ロ狀態(tài)機就清空所有數(shù)據(jù);
步驟10,如數(shù)據(jù)的最后一個字符被StreamLink接ロ識別,則端ロ狀態(tài)機回到空閑狀態(tài)。本發(fā)明的技術(shù)方案提供ー種DMA架構(gòu),并采用讀取描述符的方法,并將描述符集中讀取中描述符列表中,提前對描述符進行預讀,然后根據(jù)預讀的描述符命令進行數(shù)據(jù)的讀寫,從而達到了數(shù)據(jù)傳輸快并且響應快的目的。下面通過附圖和實施例,對本發(fā)明的技術(shù)方案做進ー步的詳細描述?!?br>
附圖用來提供對本發(fā)明的進ー步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實施例一起用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的限制。在附圖中
圖I為本發(fā)明實施例所述的DMA的結(jié)構(gòu)框 圖2為采用了本發(fā)明所述的DMA結(jié)構(gòu)的PCIE壓縮卡結(jié)構(gòu)框 圖3為本發(fā)明實施例所述的DMA控制模塊的結(jié)構(gòu)框 圖4為本發(fā)明所述的RX狀態(tài)機讀寫數(shù)據(jù)的流程 圖5為本發(fā)明所述的TX狀態(tài)機讀寫數(shù)據(jù)的流程 圖6為本發(fā)明所述端ロ狀態(tài)機讀的流程 圖7為本發(fā)明所述端ロ狀態(tài)機寫的流程 圖8為本發(fā)明所述的基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法讀時序圖; 圖9為本發(fā)明所述的基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法讀讀序圖。
具體實施例方式以下結(jié)合附圖對本發(fā)明的優(yōu)選實施例進行說明,應當理解,此處所描述的優(yōu)選實施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。如圖I至圖3所示,一種基于高速串行總線的通用DMA結(jié)構(gòu),包括負責DMA數(shù)據(jù)讀寫的LIS總線、提供DMA數(shù)據(jù)發(fā)送與接收的StreamLink (為快速數(shù)據(jù)傳輸所設計的高速數(shù)據(jù)總線)接ロ、DCR寄存器、DMA控制模塊以及DCR寄存器訪問接ロ DCR總線;
DCR寄存器負責DMA狀態(tài)檢測,寄存器管理;
DMA控制模塊負責DMA控制邏輯。其中DMA控制模塊包括端ロ狀態(tài)機、RX狀態(tài)機、TX/RX仲裁器和TX狀態(tài)機;
端ロ狀態(tài)機為DMA的核心控制端;所有的描述符讀寫控制和數(shù)據(jù)讀寫控制都在端ロ狀態(tài)機中進行,完成從TX/RX仲裁器發(fā)來的讀寫請求;
所述RX狀態(tài)機從內(nèi)存中讀描述符,或通過StreamlLink接ロ收集數(shù)據(jù)和寫數(shù)據(jù)到內(nèi)存,將描述符狀態(tài)回寫到內(nèi)存;
所述TX狀態(tài)機是控制發(fā)起操作請求,包括從內(nèi)存讀描述符,從內(nèi)存讀數(shù)據(jù)發(fā)送到StreamlLink接ロ,并將描述符狀態(tài)回寫到內(nèi)存中,或者寫完成狀態(tài)和應用程序定義數(shù)據(jù)回到內(nèi)存。
TX/RX仲裁器對TX狀態(tài)機和RX狀態(tài)機讀寫描述符或數(shù)據(jù)的次序進行裁決,一次只允許ー個讀或?qū)懖僮魍ㄟ^,主要功能是對RX狀態(tài)機發(fā)起的操作和TX狀態(tài)機發(fā)起的操作進行仲裁,將操作按讀操作和寫操作分類,并決定接收誰的操作請求。DCR寄存器包括寄存器文件仲裁器、DCR接口和中斷寄存器;
寄存器文件仲裁器對寄存器中的文件訪問次序進行裁決,一次只允許ー個狀態(tài)機訪 問;
中斷寄存器中斷控制/狀態(tài)寄存器;
DCR接ロ寄存器文件仲裁器通過DCR接ロ訪問寄存器。如圖2所示,DMA上端接ロ LIS總線負責DMA數(shù)據(jù)讀寫,下端StreamLink接ロ提供發(fā)送與接收獨立,全雙エ接ロ。還包括DMA寄存器訪問接ロ DCR總線,主要負責DMA狀態(tài)檢測,寄存器管理功能。DMA控制部分主要完成DMA控制邏輯,包括DMA初始化,描述符預讀與控制,中斷管理等。StreamLink接ロ為下端提供ー個全雙エ,發(fā)送接ロ與接收接ロ。DMA 讀寫 pipeline 方法
DMA讀寫提供pipeline方式
讀過程DMA可以連續(xù)發(fā)幾個讀請求,然后接收讀響應的數(shù)據(jù)。寫過程DMA可以連續(xù)發(fā)寫請求的同時,發(fā)送寫數(shù)據(jù)。DMA讀寫提供兩個參數(shù)如下
Brust_num 最大數(shù)據(jù)突發(fā)長度 Pipeline_num 最大流水線深度
最大數(shù)據(jù)突發(fā)長度是指一次讀或?qū)懻埱螅畲竽苷埱蠖嗌僮止?jié)。最大流水線深度是指最多可以連續(xù)發(fā)多少個讀或?qū)懻埱?。兩個參數(shù)可以動態(tài)設置,以便適應不同的高速串行總線接口和不同的應用。高速串行總線的每次數(shù)據(jù)傳輸,都需要經(jīng)歷組包、校驗、編碼、串行化等過程,傳輸延時比較大。如果DMA讀寫可以支持流水線方式,數(shù)據(jù)傳輸就可以形成流水線,數(shù)據(jù)傳輸就能無間隔,可以充分利用高速串行總線的高帶寬,同時也避免傳輸延時造成的效能浪費。DMA中寄存器說明如下
表一寄存器說明表
權(quán)利要求
1.一種基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法,其特征在于,包括寫操作和讀操作 所述讀操作具體步驟如下 主機通過DCR設置DMA寄存器,TX狀態(tài)機根據(jù)所述DMA寄存器設置依次循環(huán)發(fā)送讀描述符,讀數(shù)據(jù)和寫描述符請求,然后由端ロ狀態(tài)機控制完成上述各種請求,所述端ロ狀態(tài)機通過LIS總線發(fā)出讀或?qū)懖僮鳎? 所述LIS總線讀寫操作具體如下 所述端ロ狀態(tài)機發(fā)送多個讀描述符與讀數(shù)據(jù)操作通過LIS總線處理,該LIS總線將所述多個讀請求依次順序發(fā)出,然后LIS總線依次收到數(shù)據(jù)I、數(shù)據(jù)2直至數(shù)據(jù)n,所述端ロ狀態(tài)機將收到的數(shù)據(jù)分別更新到寄存器文件或發(fā)送到StreamLink接ロ ;· 在主機設置DCR寄存器的同吋,RX狀態(tài)機根據(jù)所述DMA寄存器設置依次循環(huán)發(fā)送讀描述符,寫數(shù)據(jù)和寫描述符請求,然后端ロ狀態(tài)機控制完成上述各種請求,所述端ロ狀態(tài)機通過LIS總線發(fā)出讀或?qū)懖僮鳌?br>
2.根據(jù)權(quán)利要求I所述的基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法,其特征在于,所述TX狀態(tài)機讀取請求如下 步驟I:判斷TX狀態(tài)機是否處于空閑狀態(tài),若處于空閑狀態(tài)則由主機通過DCR寫TX描述符寄存器,TX狀態(tài)機檢測TX寄存器, 步驟2 :如果檢測到TX寄存器中當前描述符與結(jié)尾描述符不同,則發(fā)送ー個CL8R (讀描述符)請求給TX/RX仲裁器,該CL8R請求完成后,將寄存器的完成讀描述符功能位置為完成讀描述符狀態(tài); 步驟3 :連續(xù)發(fā)送幾個B16R (讀數(shù)據(jù))請求給TX/RX仲裁器,直到描述符中要求傳輸?shù)臄?shù)據(jù)全部從內(nèi)存讀出并發(fā)送到StreamLink接ロ,然后將寄存器的完成數(shù)據(jù)位置位; 步驟4 :所述TX狀態(tài)機發(fā)送ー個CL8W (寫描述符)請求給TX / RX仲裁器,將完成狀態(tài)信息寫回內(nèi)存,完成CL8W請求之后,將寄存器的繼續(xù)信號置位或者將寄存器的停止信號置位,如果狀態(tài)寄存器顯示下ー個描述符指針不是ー個空指針和未設置停止結(jié)束位,則將寄存器的繼續(xù)信號置位并將? ?狀態(tài)機轉(zhuǎn)換到取得描述符狀態(tài),否則將寄存器的停止信號置位并將TX狀態(tài)機轉(zhuǎn)換到空閑狀態(tài)。
3.根據(jù)權(quán)利要求I所述的基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法,所述RX狀態(tài)機讀取請求如下,包括以下步驟 步驟I:判斷RX狀態(tài)機是否處于空閑狀態(tài),若處于空閑狀態(tài)則由主機通過DCR寫RX描述符寄存器,并檢查RX描述符寄存器; 步驟2 :如果檢測到TX寄存器中當前描述符與結(jié)尾描述符不同,則發(fā)送ー個CL8R請求給TX/RX仲裁器,該CL8R請求完成后,將寄存器的完成讀描述符功能位置為完成讀描述符狀態(tài); 步驟3 :連續(xù)發(fā)送幾個B16W (寫數(shù)據(jù))請求給TX/RX仲裁器,直到StreamLink接ロ收集到的所有數(shù)據(jù)并寫入內(nèi)存,將寄存器的完成數(shù)據(jù)位置位; 步驟4 :所述RX狀態(tài)機發(fā)送ー個CL8W的請求給TX / RX仲裁器,在完成該CL8W請求之后,將寄存器的DMA繼續(xù)位置位或者將寄存器的DMA停止位置位,如果狀態(tài)寄存器顯示下ー個描述符指針不是ー個空指針和未設置停止結(jié)束位,則將寄存器的DMA繼續(xù)位置位并將? ?狀態(tài)機轉(zhuǎn)換到取得描述符狀態(tài),否則將寄存器的DMA停止位置位并將RX狀態(tài)機轉(zhuǎn)換到空閑狀態(tài)。
4.根據(jù)權(quán)利要求I所述的基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法,其特征在于,所述端ロ狀態(tài)機完成請求,具體包括以下步驟 步驟I :判斷端ロ狀態(tài)機是否處于空閑狀態(tài),如端ロ狀態(tài)機處于空閑狀態(tài),則TX/RX仲裁器發(fā)出ー個CL8R請求或者B16W請求; 步驟2 :所述端ロ狀態(tài)機根據(jù)上述的CL8R請求或者B16W請求訪問寄存器文件中的緩沖區(qū)地址和緩沖區(qū)長度寄存器; 步驟3 :若上述CL8R請求或者B16W請求被接受,則上述端ロ狀態(tài)機將緩沖區(qū)地址和緩沖區(qū)長度計數(shù)器的值從寄存器文件載入; 步驟4 :如果所述端ロ狀態(tài)機從上述緩沖區(qū)載入的地址和數(shù)據(jù)沒有錯誤,則計數(shù)器載入緩沖區(qū)的地址和長度計數(shù)器的值,然后所述端ロ狀態(tài)機發(fā)出ー個CL8R或者B16W請求,若這個請求被接受,讀端ロ狀態(tài)機可以轉(zhuǎn)換到步驟5或步驟9兩個狀態(tài)中的其中ー個; 步驟5 :若接受CL8R請求,則上述端ロ狀態(tài)機在設置控制信號去讀取ー個描述符;并等待端ロ狀態(tài)機上的RdDataRdy的信號被置位; 步驟6 :若RdDataRdy的信號被置位,則所述端ロ狀態(tài)機請求訪問寄存器文件,從PCIE卡的讀FIFO中獲取下個描述符指針、緩沖區(qū)地址、緩沖區(qū)長度寄存器以及狀態(tài)寄存器值,并將描述符指針、緩沖區(qū)地址、緩沖區(qū)長度寄存器以及狀態(tài)寄存器值存儲在狀態(tài)寄存器;步驟7 :所述端ロ狀態(tài)機清空寄存器中的描述符,等待StreamLink接ロ接收DMA數(shù)據(jù),如StreamLink接ロ接收到Dst_Rdy信號,則所述端ロ狀態(tài)機轉(zhuǎn)換到空閑狀態(tài); 步驟8 :若接受B16Ws請求,則上述端ロ狀態(tài)機設置控制信號從內(nèi)存讀數(shù)據(jù)傳輸?shù)絊treamLink接ロ,并將數(shù)據(jù)存儲到寄存器,端ロ狀態(tài)機請求訪問寄存器文件,如果訪問被接受,上述緩沖區(qū)地址和緩沖區(qū)長度寄存器的值更新為下一次緩沖區(qū)地址和緩沖區(qū)長度寄存器的值,然后讀取內(nèi)存中的數(shù)據(jù)并將該數(shù)據(jù)發(fā)送到StreamLink接ロ ; 步驟9 :如所有的數(shù)據(jù)獲取完成或者被重置,所述端ロ狀態(tài)機就清空所有數(shù)據(jù); 步驟10,如數(shù)據(jù)的最后一個字符被StreamLink接ロ識別,則端ロ狀態(tài)機回到空閑狀態(tài)。
全文摘要
本發(fā)明公開了一種基于高速串行總線的DMA結(jié)構(gòu)的pipeline讀寫方法,主機通過DCR設置DMA寄存器,TX狀態(tài)機根據(jù)設置依次循環(huán)發(fā)送讀描述符,讀數(shù)據(jù)和寫描述符請求,然后由端口狀態(tài)機控制完成上述各種請求,端口狀態(tài)機通過LIS總線發(fā)出讀或?qū)懖僮?,端口狀態(tài)機發(fā)送多個讀描述符與讀數(shù)據(jù)操作通過LIS總線處理,該LIS總線將所述多個讀請求依次順序發(fā)出,然后LIS總線依次接受數(shù)據(jù),端口狀態(tài)機將收到的數(shù)據(jù)分別更新到寄存器文件或發(fā)送到streamLink接口;同時,RX狀態(tài)機根據(jù)設置依次循環(huán)發(fā)送讀描述符,寫數(shù)據(jù)和寫描述符請求,然后端口狀態(tài)機控制完成各種請求,所述端口狀態(tài)機通過LIS總線發(fā)出讀或?qū)懖僮鳌?br>
文檔編號G06F13/28GK102841871SQ201210283510
公開日2012年12月26日 申請日期2012年8月10日 優(yōu)先權(quán)日2012年8月10日
發(fā)明者張慶敏, 張衡, 胡剛, 宋君 申請人:無錫眾志和達存儲技術(shù)股份有限公司