国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種dma讀操作的實現(xiàn)裝置和方法

      文檔序號:6439335閱讀:194來源:國知局
      專利名稱:一種dma讀操作的實現(xiàn)裝置和方法
      一種DMA讀操作的實現(xiàn)裝置和方法技術(shù)領(lǐng)域
      本發(fā)明屬于計算機(jī)IO通信領(lǐng)域,具體涉及一種DMA讀操作的實現(xiàn)裝置和方法。
      技術(shù)背景
      DMA (Direct Memory Access,直接內(nèi)存存取),允許不同速度的硬件裝置來溝通, 而不需要依于CPU的大量中斷負(fù)載。否則,CPU需要從來源把每一片段的資料復(fù)制到暫存器,然后把他們再次寫回到新的地方。在這個時間中,CPU對于其他的工作來說就無法使用。 DMA傳輸將數(shù)據(jù)從一個地址空間復(fù)制到另外一個地址空間。當(dāng)CPU初始化這個傳輸動作,傳輸動作本身是由DMA控制器來實行和完成。典型的例子就是移動一個外部內(nèi)存的區(qū)塊到芯片內(nèi)部更快的內(nèi)存區(qū)。像是這樣的操作并沒有讓處理器工作拖延,反而可以被重新排程去處理其他的工作。DMA傳輸對于高效能的嵌入式系統(tǒng)算法和網(wǎng)絡(luò)是很重要的。
      現(xiàn)有的外設(shè)在進(jìn)行DMA讀操作時,首先需要CPU將當(dāng)前DMA讀操作的描述符信息通過寫寄存器的方式告知外設(shè),外設(shè)DMA弓I擎分析DMA讀描述符后發(fā)起DMA讀操作,最后外設(shè)通過中斷請求告知CPU DMA讀操作完成。
      專利號為ZL200810004252. 6的專利披露了一種高速多協(xié)議數(shù)據(jù)傳輸系統(tǒng)和方法,該方法數(shù)據(jù)傳輸?shù)牧鞒倘缟纤?,存在幾個影響性能的問題1)每次DMA讀操作開始之前都需要CPU將描述符寫到外設(shè),每次DMA讀操作結(jié)束之后都需要外設(shè)中斷CPU,這對CPU 是一個不小的負(fù)擔(dān);2)由于IO總線的特性所致,DMA操作的長度較大時效率較高,如果存在很多小的DMA操作,將嚴(yán)重影響系統(tǒng)性能。
      專利號為ZL200910091053. 8的專利披露了一種直接存儲器訪問的實現(xiàn)方法,該方法采用固定連續(xù)緩沖區(qū)以及查詢方式實現(xiàn)DMA,避免了 CPU中斷以及大量寄存器寫操作帶來的開銷,但是存在以下問題1)該方法只針對DMA寫操作了設(shè)計。2)在大量小塊數(shù)據(jù)傳輸時,同樣存在總線利用率利用不高。發(fā)明內(nèi)容
      本發(fā)明的目的在于,提供一種DMA讀操作的實現(xiàn)裝置和方法,解決現(xiàn)有技術(shù)中利用DMA方式從主機(jī)內(nèi)存讀取數(shù)據(jù)效率不高的問題。
      為實現(xiàn)上述的目的,本發(fā)明提供一種DMA讀操作的實現(xiàn)裝置,所述實現(xiàn)裝置包括 主機(jī)單元和與所述主機(jī)單元連接的網(wǎng)卡單元;其改進(jìn)之處在于,所述主機(jī)單元包括CPU和內(nèi)存模塊;所述CPU控制所述內(nèi)存模塊;所述網(wǎng)卡單元包括DMA讀寫操作模塊和DMA讀引擎 (DMAReadEngine);所述DMA讀引擎(DMAReadEngine)控制所述DMA讀操作模塊。
      本發(fā)明提供的優(yōu)選技術(shù)方案中,所述內(nèi)存模塊包括緩沖區(qū)寫指針(wr_ptr)、緩沖區(qū)讀指針(rd_ptr)、緩沖區(qū)基地址(kise^ddr)、緩沖區(qū)長度(Ien);所述網(wǎng)卡單元包括基地址寄存器(baSe_addr reg)、長度寄存器(len reg)、緩沖區(qū)寫指針寄存器(wr_ptr reg)和緩沖區(qū)讀指針寄存器(rd_ptr reg)。
      本發(fā)明提供的第二優(yōu)選技術(shù)方案中,所述CPU包括緩沖區(qū)讀指針模塊(rd_ptr_cpu) 。
      本發(fā)明提供的第三優(yōu)選技術(shù)方案中,所述DMA讀引擎(DMAReadEngine)比較所述緩沖區(qū)寫指針(wr_ptr)和所述緩沖區(qū)讀指針(rd_ptr),計算出緩沖區(qū)BUF當(dāng)前待讀取數(shù)據(jù)長度 cur_rd_len ;
      所述DMA讀引擎(DMAReadEngine)向主機(jī)單元發(fā)送DMA讀請求,請求地址為kiSe_ addr+rd_ptr,長度為 cur_rd_len ;
      所述DMA讀引擎(DMAReadEngine)等待DMA讀請求返回,然后更新所述緩沖區(qū)讀指針(rd_ptr)至Ij rd—ptr+cur—rd—len 處。
      本發(fā)明提供的第四優(yōu)選技術(shù)方案中,提供一種DMA讀操作的實現(xiàn)方法,其改進(jìn)之處在于,所述方法包括如下步驟
      1 分別對所述網(wǎng)卡單元中的所述基地址寄存器(baSe_addr reg)、所述長度寄存器(len reg)、所述緩沖區(qū)寫指針寄存器(Wr_ptr reg)和所述緩沖區(qū)讀指針寄存器(rd_ptr reg)初始化,所述所有寄存器的初始值設(shè)置為0 ;2 所述CPU將緩沖區(qū)的基地址(base_ addr)和長度信息(Ien)分別寫到所述基地址寄存器(baSe_addr reg)和所述長度寄存器 (len reg)中;3 所述CPU讀取緩沖區(qū)讀指針寄存器(rd_ptr reg)的值,并計算出當(dāng)前緩沖區(qū)(BUF)空閑空間大??;4 判斷當(dāng)前緩沖區(qū)(BUF)空閑空間大小是否小于當(dāng)前待傳送的數(shù)據(jù)塊大小,如果判斷結(jié)果為“是”,則返回步驟3 ;如果判斷結(jié)果為“否”,則所述CPU將這塊數(shù)據(jù)寫到緩沖區(qū)(BUF)的地址為baSe_addr+Wr_ptr處,然后將所述緩沖區(qū)寫指針(wr_ptr) 更新到wr_ptr+Cur_wr_len處,并寫到所述緩沖區(qū)寫指針寄存器(wr_ptr reg)中。
      本發(fā)明提供的第五優(yōu)選技術(shù)方案中,在所述步驟3中,所述CPU定時讀取所述緩沖區(qū)讀指針寄存器(rd_ptr reg)的值,并將其保存在所述緩沖區(qū)讀指針模塊(rd_ptr_CpU) 中,所述CPU比較所述緩沖區(qū)讀指針模塊(rd_ptr_CpU)和所述緩沖區(qū)寫指針(wr_ptr)計算出當(dāng)前緩沖區(qū)空閑空間大小。
      與現(xiàn)有技術(shù)比,本發(fā)明提供的DMA讀操作的實現(xiàn)裝置和方法,避免了描述符交換和CPU中斷,將大大減少CPU的參與,降低CPU負(fù)擔(dān),提高IO總線利用率;再者,解決了在現(xiàn)有的DMA讀操作中,在出現(xiàn)大量的小數(shù)據(jù)塊的交換時,由于描述符交換和中斷所占的開銷比例相對很大,總線的利用率將會非常低的問題;而且DMA讀操作的實現(xiàn)裝置和方法可以將較小的DMA讀操作合并成較大的DMA讀操作,使DMA讀操作對于小數(shù)據(jù)塊交換和大數(shù)據(jù)塊交換沒有差別。


      圖1為DMA讀操作的實現(xiàn)裝置的結(jié)構(gòu)圖。
      圖2為DMA讀操作的實現(xiàn)方法的流程圖。
      具體實施方式
      如圖1所示,DMA讀操作的實現(xiàn)裝置,包括主機(jī)單元和網(wǎng)卡單元;所述主機(jī)單元和網(wǎng)卡單元相連接;所述主機(jī)單元包括CPU和內(nèi)存模塊;所述CPU控制所述內(nèi)存模塊進(jìn)行操作;所述內(nèi)存模塊包括緩沖區(qū)寫指針(wr_ptr)、緩沖區(qū)讀指針(rd_ptr)、基地址寄存器 (base_addr reg)、長度寄存器(len reg)、緩沖區(qū)寫指針寄存器(wr_ptr reg)和緩沖區(qū)讀指針寄存器(rd_ptr reg);所述基地址寄存器(iDasejddr reg)、所述長度寄存器(Ien reg)、所述緩沖區(qū)寫指針寄存器(wr_ptr reg)和所述緩沖區(qū)讀指針寄存器(rd_ptr reg) 設(shè)置在所述內(nèi)存模塊的一塊連續(xù)的緩沖區(qū)中;所述網(wǎng)卡單元包括DMA讀寫操作模塊和DMA 讀引擎(DMAReadEngine);所述DMA讀引擎控制所述DMA讀寫操作模塊的操作;所述CPU包括緩沖區(qū)讀指針模塊(rd_ptr_CpU)。
      如圖2所示,DMA讀操作的實現(xiàn)方法,該方法將多個DMA操作合并成一個DMA操作, 可以帶來較大的益處。該方法的具體實施步驟如下
      主機(jī)CPU在設(shè)備驅(qū)動程序中申請一塊連續(xù)的內(nèi)存區(qū)域BUF,設(shè)備上設(shè)計四個寄存器base_addr reg、Ien reg、wr_ptr reg禾口 rd_ptr reg,分別存儲發(fā)包緩沖區(qū)緩沖區(qū)基地址t3ase_addr、緩沖區(qū)長度len、緩沖區(qū)寫指針wr_ptr和緩沖區(qū)讀指針rd_ptr,所有寄存器初始化為0 ;主機(jī)CPU側(cè)
      步驟1 對所述內(nèi)存模塊中的所述基地址寄存器03aSe_addr reg)、所述長度寄存器(len reg)、所述緩沖區(qū)寫指針寄存器(Wr_ptr reg)和所述緩沖區(qū)讀指針寄存器(rd_ptr reg)進(jìn)行初始化,將所述所有寄存器的初始值設(shè)置為0 ;
      步驟2 所述CPU將緩沖區(qū)的基地址(baSe_addr)和長度信息(Ien)分別寫到所述基地址寄存器(baSe_addr reg)、所述長度寄存器(len reg)中;
      步驟3 所述CPU等待到網(wǎng)卡單元的數(shù)據(jù)傳輸請求,讀取緩沖區(qū)讀指針寄存器(rd_ Ptr reg)的值,并計算出當(dāng)前緩沖區(qū)(BUF)空閑空間大??;在所述步驟3中,所述CPU定時讀取所述緩沖區(qū)讀指針寄存器(rd_ptr reg)的值,并保存在所述緩沖區(qū)讀指針模塊(rd_ ptr_cpu)中,所述CPU等待到設(shè)備的數(shù)據(jù)傳輸請求,然后比較所述緩沖區(qū)讀指針模塊(rd_ ptr_cpu)和所述緩沖區(qū)寫指針(wr_ptr)計算出當(dāng)前緩沖區(qū)空閑空間大??;
      步驟4 判斷當(dāng)前緩沖區(qū)(BUF)空閑空間大小是否小于當(dāng)前待傳送的數(shù)據(jù)塊大小 (cur_wr_len),如果判斷結(jié)果為“是”,則返回步驟3 ;如果判斷結(jié)果為“否”,則所述CPU將這塊數(shù)據(jù)寫到緩沖區(qū)(BUF)的地址為base_addr+wr_ptr處,然后將所述緩沖區(qū)寫指針(wr_ ptr)更新到wr_ptr+cur_wr_len處,并寫到所述緩沖區(qū)寫指針寄存器(wr_ptr reg)中。
      由于寫外設(shè)寄存器的操作開銷較大,主機(jī)CPU可以不用每個數(shù)據(jù)塊傳輸都進(jìn)行, 而是采用定時寫的方式實現(xiàn),主機(jī)CPU維護(hù)一個變量wr_ptr_cpu,并定時的將wr_ptr_cpu 資額到外設(shè)寄存器wr_ptr_reg中。設(shè)備側(cè)
      所述DMA讀引擎(DMAReadEngine)比較所述緩沖區(qū)寫指針(wr_ptr)和所述緩沖區(qū)讀指針(rd_ptr),計算出緩沖區(qū)BUF當(dāng)前待讀取數(shù)據(jù)長度Cur_rd_len ;
      所述DMA讀引擎(DMAReadEngine)向主機(jī)單元發(fā)送DMA讀請求,請求地址為kiSe_ addr+rd_ptr,長度為 cur_rd_len ;
      所述DMA讀引擎(DMAReadEngine)等待DMA讀請求返回,然后更新所述緩沖區(qū)讀指針(rd_ptr)至Ij rd—ptr+cur—rd—len 處。
      需要聲明的是,本發(fā)明內(nèi)容及具體實施方式
      意在證明本發(fā)明所提供技術(shù)方案的實際應(yīng)用,不應(yīng)解釋為對本發(fā)明保護(hù)范圍的限定。本領(lǐng)域技術(shù)人員在閱讀本申請說明書后,在其精神和原理啟發(fā)下,可作各種修改、等同替換、或改進(jìn)。但這些變更或修改均在申請待批的保護(hù)范圍內(nèi)。
      權(quán)利要求
      1.一種DMA讀操作的實現(xiàn)裝置,所述實現(xiàn)裝置包括主機(jī)單元和與所述主機(jī)單元連接的網(wǎng)卡單元;其特征在于,所述主機(jī)單元包括CPU和內(nèi)存模塊;所述CPU控制所述內(nèi)存模塊;所述網(wǎng)卡單元包括DMA讀寫操作模塊和DMA讀引擎(DMAReadEngine);所述DMA讀引擎 (DMAReadEngine)控制所述DMA讀操作模塊。
      2.根據(jù)權(quán)利要求1所述的實現(xiàn)裝置,其特征在于,所述內(nèi)存模塊包括緩沖區(qū)寫指針 (wr_ptr)、緩沖區(qū)讀指針(rd_ptr)、緩沖區(qū)基地址(l3ase_addr)、緩沖區(qū)長度(Ien);所述網(wǎng)卡單元包括基地址寄存器(baSe_addr reg)、長度寄存器(len reg)、緩沖區(qū)寫指針寄存器 (wr_ptr reg)和緩沖區(qū)讀指針寄存器(rd_ptr reg)。
      3.根據(jù)權(quán)利要求1所述的實現(xiàn)裝置,其特征在于,所述CPU包括緩沖區(qū)讀指針模塊 (rd_ptr_cpu)。
      4.根據(jù)權(quán)利要求1所述的實現(xiàn)裝置,其特征在于,所述DMA讀引擎(DMAReadEngine)比較所述緩沖區(qū)寫指針(wr_ptr)和所述緩沖區(qū)讀指針(rd_ptr),計算出緩沖區(qū)BUF當(dāng)前待讀取數(shù)據(jù)長度cur_rd_len ;所述DMA讀引擎(DMAReadEngine)向主機(jī)單元發(fā)送DMA讀請求,請求地址為base_ addr+rd_tr,長度為 cur_rd_len ;所述DMA讀引擎(DMAReadEngine)等待DMA讀請求返回,然后更新所述緩沖區(qū)讀指針 (rd_ptr)至Ij rd_ptr+cur_rd_len 處。
      5.根據(jù)1-4項權(quán)利要求任一項所述的DMA讀操作的實現(xiàn)裝置的DMA讀操作的實現(xiàn)方法,其特征在于,所述方法包括如下步驟1 分別對所述網(wǎng)卡單元中的所述基地址寄存器(baSe_addr reg)、所述長度寄存器 (len reg)、所述緩沖區(qū)寫指針寄存器(Wr_ptr reg)和所述緩沖區(qū)讀指針寄存器(rd_ptr reg)初始化,所述所有寄存器的初始值設(shè)置為0 ;2 所述CPU將緩沖區(qū)的基地址(base_ addr)和長度信息(Ien)分別寫到所述基地址寄存器(baSe_addr reg)和所述長度寄存器 (len reg)中;3 所述CPU讀取緩沖區(qū)讀指針寄存器(rd_ptr reg)的值,并計算出當(dāng)前緩沖區(qū)(BUF)空閑空間大??;4 判斷當(dāng)前緩沖區(qū)(BUF)空閑空間大小是否小于當(dāng)前待傳送的數(shù)據(jù)塊大小,如果判斷結(jié)果為“是”,則返回步驟3 ;如果判斷結(jié)果為“否”,則所述CPU將這塊數(shù)據(jù)寫到緩沖區(qū)(BUF)的地址為baSe_addr+Wr_ptr處,然后將所述緩沖區(qū)寫指針(wr_ptr) 更新到wr_ptr+Cur_wr_len處,并寫到所述緩沖區(qū)寫指針寄存器(wr_ptr reg)中。
      6.根據(jù)權(quán)利要求5所述的實現(xiàn)方法,其特征在于,在所述步驟3中,所述CPU定時讀取所述緩沖區(qū)讀指針寄存器(rd_ptr reg)的值,并將其保存在所述緩沖區(qū)讀指針模塊(rd_ ptr_cpu)中,所述CPU比較所述緩沖區(qū)讀指針模塊(rd_ptr_CpU)和所述緩沖區(qū)寫指針 (wr_ptr)計算出當(dāng)前緩沖區(qū)空閑空間大小。
      全文摘要
      本發(fā)明提供了一種DMA讀操作的實現(xiàn)裝置和方法,實現(xiàn)裝置包括主機(jī)單元和與所述主機(jī)單元連接的網(wǎng)卡單元;所述主機(jī)單元包括CPU和內(nèi)存模塊;所述網(wǎng)卡單元包括DMA讀寫操作模塊和DMA讀引擎;所述DMA讀引擎控制所述DMA讀寫操作模塊的操作。實現(xiàn)方法包括讀取緩沖區(qū)讀指針寄存器的值,并計算出當(dāng)前緩沖區(qū)空閑空間大?。慌袛喈?dāng)前緩沖區(qū)空閑空間大小是否小于當(dāng)前待傳送的數(shù)據(jù)塊大小,如果判斷結(jié)果為“否”,則CPU將這塊數(shù)據(jù)寫到緩沖區(qū)的地址為base_addr+wr_ptr處,然后將緩沖區(qū)寫指針更新到wr_ptr+cur_wr_len處,并寫到所述緩沖區(qū)寫指針寄存器中。本發(fā)明提供的DMA讀操作的實現(xiàn)裝置和方法避免了描述符交換和CPU中斷,將大大減少CPU的參與,降低CPU負(fù)擔(dān),提高IO總線利用率。
      文檔編號G06F13/28GK102521179SQ20111038317
      公開日2012年6月27日 申請日期2011年11月28日 優(yōu)先權(quán)日2011年11月28日
      發(fā)明者劉朝輝, 劉燦, 姬乃軍, 張英文, 李鋒偉, 李靜, 竇曉光 申請人:曙光信息產(chǎn)業(yè)股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1