两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng)和方法

文檔序號(hào):7918378閱讀:420來(lái)源:國(guó)知局
專利名稱:多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng)和方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)字信息的傳輸,尤其涉及一種多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng)和方法。
背景技術(shù)
在現(xiàn)有技術(shù)中,沒(méi)有芯片內(nèi)部與片外主存之間多通道數(shù)據(jù)直接訪問(wèn)的方法,對(duì)于芯片內(nèi)部與片外主存之間采用數(shù)據(jù)的單通道訪問(wèn)在寬帶應(yīng)用中對(duì)于設(shè)備性能的提升產(chǎn)生阻礙。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種實(shí)現(xiàn)芯片內(nèi)部與片外主存之間多通道不連續(xù)數(shù)據(jù)直接訪問(wèn)的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng)和方法。
本發(fā)明所采用的技術(shù)方案為這種多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng),其特征在于它包括直接訪問(wèn)處理模塊,該直接訪問(wèn)處理模塊包括接收DMA模塊和發(fā)送DMA模塊;在接收DMA模塊中具有FREE_FIFO存儲(chǔ)器、DONE_FIFO存儲(chǔ)器和配置RAM存儲(chǔ)器,以及用于訪問(wèn)控制的控制邏輯,F(xiàn)REE_FIFO存儲(chǔ)器用于存放空閑隊(duì)列描述子Free Queue Descriptor,DONE_FIFO存儲(chǔ)器用于存放完成隊(duì)列描述子Done Queue Descriptor;在發(fā)送DMA模塊中具有PENDING_FIFO存儲(chǔ)器、DONE_FIFO存儲(chǔ)器和配置RAM存儲(chǔ)器,以及用于訪問(wèn)控制的控制邏輯,PENDING_FIFO存儲(chǔ)器用于存放待發(fā)送隊(duì)列描述子,DONE_FIFO存儲(chǔ)器用于存放發(fā)送完成隊(duì)列描述子;所述的接收DMA模塊(21)中配置用于存放空閑隊(duì)列描述子的數(shù)據(jù)FIFO存儲(chǔ)器。
這種用于上述多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng)的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)方法,其特征在于在接收數(shù)據(jù)時(shí),各通道的數(shù)據(jù)經(jīng)數(shù)據(jù)處理模塊的正常處理后,包數(shù)據(jù)發(fā)至接收DMA模塊;接收DMA模塊根據(jù)空閑隊(duì)列描述子Free QueueDescriptor提供的片外主存中的空閑數(shù)據(jù)緩存區(qū)地址以及最后用于描述該緩存區(qū)的信息的包數(shù)據(jù)描述子在片外主存中的位置經(jīng)總線接口模塊,通過(guò)片外總線將數(shù)據(jù)存入片外主存;在發(fā)送數(shù)據(jù)時(shí),待發(fā)送包鏈的數(shù)據(jù)經(jīng)片外總線通過(guò)總線接口模塊,在發(fā)送DMA模塊產(chǎn)生發(fā)送完成隊(duì)列描述子,CPU將需要發(fā)送的數(shù)據(jù)通過(guò)待發(fā)送包描述子和待發(fā)送隊(duì)列描述子的形式寫到片外主存中的待發(fā)送包數(shù)據(jù)描述子隊(duì)列和待發(fā)送隊(duì)列中,更新發(fā)送DMA模塊中的待發(fā)送隊(duì)列描述子的指針,發(fā)送DMA模塊根據(jù)待發(fā)送隊(duì)列描述子及待發(fā)送包數(shù)據(jù)描述子的信息,修改待發(fā)送包數(shù)據(jù)描述子和配置RAM的信息,將CPU要發(fā)送的待發(fā)送包數(shù)據(jù)串鏈起來(lái),從數(shù)據(jù)處理模塊傳至相應(yīng)的通道;所述的包數(shù)據(jù)描述子的數(shù)據(jù)結(jié)構(gòu)包括Data Buffer Address數(shù)據(jù)緩存區(qū)的起始地址;Next Descriptor Pointer數(shù)據(jù)包下一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針;Length該數(shù)據(jù)緩存區(qū)的數(shù)據(jù)長(zhǎng)度;Buffer Status數(shù)據(jù)緩存區(qū)狀態(tài),用以表示該數(shù)據(jù)緩存區(qū)里填的數(shù)據(jù)是該數(shù)據(jù)包的開(kāi)始部分還是中間部分,或者最后部分;Channel通道號(hào),數(shù)據(jù)屬于哪個(gè)通道;所述的接收DMA模塊使用完成隊(duì)列描述子Done Queue Descriptor反映接收DMA模塊將數(shù)據(jù)填到空閑數(shù)據(jù)緩存區(qū)后,CPU處理時(shí)需要用到的已經(jīng)填到主存里的完整的或非完整的數(shù)據(jù)包的信息;接收DMA模塊中的配置RAM存儲(chǔ)器按通道分塊,用于存放接收DMA模塊在從數(shù)據(jù)處理模塊接收各通道數(shù)據(jù)過(guò)程中根據(jù)控制邏輯產(chǎn)生的有關(guān)包數(shù)據(jù)描述子等各種信息;接收DMA模塊在數(shù)據(jù)包長(zhǎng)度超過(guò)一個(gè)數(shù)據(jù)緩存區(qū)的容量時(shí),通過(guò)包數(shù)據(jù)描述子和完成隊(duì)列描述子的信息,將多個(gè)數(shù)據(jù)緩存區(qū)鏈接起來(lái)存放一個(gè)完整的數(shù)據(jù)包;接收DMA模塊通過(guò)中斷告訴CPU有數(shù)據(jù)可以處理,CPU通過(guò)接收完成隊(duì)列描述子中的第一個(gè)數(shù)據(jù)緩沖區(qū)的包數(shù)據(jù)描述子指針,找到第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子,根據(jù)其中的數(shù)據(jù)緩存區(qū)開(kāi)始地址找到第一個(gè)數(shù)據(jù)緩存區(qū),處理完第一個(gè)數(shù)據(jù)緩存區(qū)的數(shù)據(jù)后,根據(jù)第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子中的信息找到第二個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子……依此類推,直至將該數(shù)據(jù)包或要處理的數(shù)據(jù)全部處理完畢。
所述的發(fā)送DMA模塊接收到CPU的信息,通知某個(gè)通道的一個(gè)待發(fā)送包鏈,發(fā)送DMA模塊存放待發(fā)送隊(duì)列描述子,待發(fā)送隊(duì)列描述子反映待發(fā)送包鏈的第一個(gè)數(shù)據(jù)緩存區(qū)對(duì)應(yīng)的包數(shù)據(jù)描述子及該待發(fā)送包鏈屬于哪個(gè)通道,待發(fā)送隊(duì)列描述子對(duì)應(yīng)相應(yīng)的待發(fā)包數(shù)據(jù)描述子;待發(fā)送包鏈的數(shù)據(jù)經(jīng)片外總線通過(guò)總線接口模塊,由發(fā)送DM模塊根據(jù)相應(yīng)的控制邏輯產(chǎn)生發(fā)送完成隊(duì)列描述子,存放到內(nèi)部的DONE_FIFO存儲(chǔ)器中;CPU將需要發(fā)送的數(shù)據(jù)通過(guò)待發(fā)送包描述子和待發(fā)送隊(duì)列描述子的形式寫到片外主存中的待發(fā)送包數(shù)據(jù)描述子隊(duì)列和待發(fā)送隊(duì)列中,更新發(fā)送DMA模塊中的待發(fā)送隊(duì)列描述子的指針,發(fā)送DMA模塊讀取待發(fā)送隊(duì)列描述子;發(fā)送DMA模塊根據(jù)待發(fā)送隊(duì)列描述子及待發(fā)送包數(shù)據(jù)描述子的信息,修改待發(fā)送包數(shù)據(jù)描述子和配置RAM的信息,將CPU要發(fā)送的待發(fā)送包數(shù)據(jù)串鏈起來(lái),根據(jù)待發(fā)送包數(shù)據(jù)所屬通道的包數(shù)據(jù)發(fā)送情況,產(chǎn)生正確的狀態(tài)信息放在配置RAM中,同時(shí)響應(yīng)數(shù)據(jù)模塊申請(qǐng)包數(shù)據(jù)的請(qǐng)求,從數(shù)據(jù)處理模塊傳至相應(yīng)的通道。
所述的數(shù)據(jù)處理模塊向發(fā)送DMA模塊申請(qǐng)某個(gè)通道的數(shù)據(jù)時(shí),發(fā)送DMA模塊根據(jù)數(shù)據(jù)處理模塊送過(guò)來(lái)的通道號(hào)從配置RAM存儲(chǔ)器中讀出數(shù)據(jù)處理模塊想要申請(qǐng)的通道的信息,從主存中讀出相應(yīng)的待發(fā)包數(shù)據(jù)描述子,根據(jù)其中的信息從主存中的數(shù)據(jù)緩沖區(qū)讀出數(shù)據(jù)送給數(shù)據(jù)處理模塊,遞減當(dāng)前數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量。
所述的數(shù)據(jù)處理模塊如果還未等發(fā)送DMA模塊將當(dāng)前正在讀的數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)全部讀出送給數(shù)據(jù)處理模塊就因?yàn)閮?nèi)部原因而停止接收數(shù)據(jù),要求停止當(dāng)前傳送,發(fā)送DMA模塊停止從數(shù)據(jù)緩存區(qū)讀數(shù)據(jù),將當(dāng)前讀數(shù)據(jù)緩沖區(qū)地址寫到配置RAM存儲(chǔ)器該通道部分的相應(yīng)信息中;待數(shù)據(jù)處理模塊在其有能力接收該通道的數(shù)據(jù)的時(shí)候,向發(fā)送DMA模塊申請(qǐng)?jiān)撏ǖ赖臄?shù)據(jù),發(fā)送DMA模塊從配置RAM存儲(chǔ)器讀出該通道的信息,發(fā)現(xiàn)向數(shù)據(jù)緩沖區(qū)讀數(shù)據(jù)送給數(shù)據(jù)處理模塊、遞減數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量。
所述的接收DMA模塊中,完成隊(duì)列描述子Done Queue Descriptor主要包括需要處理的數(shù)據(jù)包或數(shù)據(jù)屬于那個(gè)通道、需要處理的數(shù)據(jù)包或數(shù)據(jù)占了幾個(gè)數(shù)據(jù)緩存區(qū)、需要處理的數(shù)據(jù)包或數(shù)據(jù)所占用的幾個(gè)數(shù)據(jù)緩存區(qū)的第一個(gè)緩存區(qū)所對(duì)應(yīng)的包數(shù)據(jù)描述子指針、需要處理的數(shù)據(jù)是否一個(gè)完整的數(shù)據(jù)包;其數(shù)據(jù)結(jié)構(gòu)包括Descriptor Pointer指向數(shù)據(jù)包或則包數(shù)據(jù)所占的第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子的指針;Channel數(shù)據(jù)屬于哪個(gè)通道;Buffers等待CPU處理的數(shù)據(jù)包或數(shù)據(jù)占用了幾個(gè)數(shù)據(jù)緩存區(qū);Packet Status包數(shù)據(jù)狀態(tài),記錄在接收過(guò)程中發(fā)生錯(cuò)誤的類型;EOF包結(jié)束符,表示一個(gè)數(shù)據(jù)包已結(jié)束;在接收DMA模塊中,配置RAM存儲(chǔ)器按通道分塊,用于存放接收DAM在從數(shù)據(jù)處理模塊接收各通道數(shù)據(jù)過(guò)程中產(chǎn)生的一些中間信息,以及CPU對(duì)各通道的配置信息,其數(shù)據(jù)結(jié)構(gòu)包括Current Data Buufer Address數(shù)據(jù)緩存區(qū)當(dāng)前地址,由接收DMA模塊(21)寫入;Current Descriptor Pointer當(dāng)前數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針,由接收DMA模塊(21)寫入;Start Descriptor PointerCPU要處理數(shù)據(jù)的第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針,由接收DMA模塊寫入;Threshold控制接收DMA模塊在填了幾個(gè)數(shù)據(jù)緩存區(qū)后生成一個(gè)接收完成隊(duì)列描述子,由CPU寫入;Data Number數(shù)據(jù)緩存區(qū)的數(shù)據(jù)量,由接收DMA模塊寫入,CPU初始化時(shí)置零;
Threshold Count當(dāng)前數(shù)據(jù)包所占用的實(shí)際數(shù)據(jù)緩存區(qū)數(shù),由接收DMA模塊寫入,CPU初始化時(shí)置零;Buffer Size該通道數(shù)據(jù)緩存區(qū)的大小,由CPU寫入;接收DMA模塊在數(shù)據(jù)包長(zhǎng)度超過(guò)一個(gè)數(shù)據(jù)緩存區(qū)的容量時(shí),通過(guò)Next Descriptor Pointer和EOF位,將多個(gè)數(shù)據(jù)緩存區(qū)鏈接起來(lái)存放一個(gè)完整的數(shù)據(jù)包;所述的接收DMA模塊中配置數(shù)據(jù)FIFO存儲(chǔ)器,在FREE_FIFO存儲(chǔ)器中的空閑隊(duì)列描述子數(shù)目少于某個(gè)設(shè)定的門限時(shí),根據(jù)其內(nèi)部實(shí)時(shí)調(diào)整的讀空閑隊(duì)列指針通過(guò)總線接口控制模塊從片外主存中的空閑隊(duì)列存放空閑隊(duì)列描述子的緩存區(qū),讀取足夠多的空閑隊(duì)列描述子將FREE_FIFO存儲(chǔ)器填滿;接收DMA模塊接到數(shù)據(jù)處理模塊向接收DMA模塊的請(qǐng)求,一邊從數(shù)據(jù)處理模塊接收數(shù)據(jù)填到數(shù)據(jù)FIFO存儲(chǔ)器中,同時(shí)從配置RAM存儲(chǔ)器中將該通道的信息讀出。
本發(fā)明的有益效果為在本發(fā)明中,在接收DMA模塊中具有FREE_FIFO存儲(chǔ)器、DONE_FIFO存儲(chǔ)器和配置RAM存儲(chǔ)器,以及用于訪問(wèn)控制的控制邏輯,F(xiàn)REE_FIFO存儲(chǔ)器用于存放空閑隊(duì)列描述子,DONE_FIFO存儲(chǔ)器用于存放完成隊(duì)列描述子,利用空閑隊(duì)列描述子、完成隊(duì)列描述子、配置RAM、包數(shù)據(jù)描述子等數(shù)據(jù)結(jié)構(gòu)信息,用一個(gè)接收DMA模塊不連續(xù)地接收各通道的數(shù)據(jù),在接收DMA模塊中配置數(shù)據(jù)FIFO存儲(chǔ)器,在FREE_FIFO存儲(chǔ)器中的空閑隊(duì)列描述子數(shù)目少于某個(gè)設(shè)定的門限時(shí),根據(jù)其內(nèi)部實(shí)時(shí)調(diào)整的讀空閑隊(duì)列指針通過(guò)總線接口控制模塊從片外主存中的空閑隊(duì)列,以讀取足夠多的空閑隊(duì)列描述子將FREEFIFO存儲(chǔ)器填滿,接收DMA模塊接到數(shù)據(jù)處理模塊向接收DMA模塊的請(qǐng)求,一邊從數(shù)據(jù)處理模塊接收數(shù)據(jù)填到數(shù)據(jù)FIFO存儲(chǔ)器中,同時(shí)從配置RAM存儲(chǔ)器中將該通道的信息讀出,可以加快處理速度;在發(fā)送DMA模塊中具有PENDING_FIFO存儲(chǔ)器、DONE_FIFO存儲(chǔ)器和配置RAM存儲(chǔ)器,以及用于訪問(wèn)控制的控制邏輯,PENDING_FIFO存儲(chǔ)器用于存放待發(fā)送隊(duì)列描述子,DONE_FIFO存儲(chǔ)器用于存放發(fā)送完成隊(duì)列描述子,利用待發(fā)送隊(duì)列描述子、發(fā)送完成隊(duì)列描述子、配置RAM、待發(fā)包數(shù)據(jù)描述子的數(shù)據(jù)結(jié)構(gòu)信息用一個(gè)發(fā)送DMA模塊不連續(xù)地發(fā)送多通道數(shù)據(jù),當(dāng)芯片內(nèi)部通過(guò)片外總線和片外主存之間進(jìn)行不連續(xù)數(shù)據(jù)傳送時(shí),將各通道的連續(xù)數(shù)據(jù)從芯片內(nèi)部寫到片外主存中的正確位置并通知CPU作處理,可根據(jù)需要隨時(shí)停止當(dāng)前正在進(jìn)行的數(shù)據(jù)搬移,將各通道在主存中的連續(xù)數(shù)據(jù)正確發(fā)送到各通道;本發(fā)明能經(jīng)濟(jì)、智能、高效地處理芯片內(nèi)部和片外主存之間多通道數(shù)據(jù)的不連續(xù)數(shù)據(jù)搬移,實(shí)現(xiàn)芯片內(nèi)部與片外主存之間多通道不連續(xù)數(shù)據(jù)直接訪問(wèn)。


圖1為本發(fā)明總體結(jié)構(gòu)示意圖;
圖2為接收DMA模塊結(jié)構(gòu)示意圖;圖3為接收DMA模塊中配置RAM存儲(chǔ)器數(shù)據(jù)結(jié)構(gòu)示意圖;圖4為接收處理流程示意圖;圖5為接收完成隊(duì)列描述子、包數(shù)據(jù)描述子、數(shù)據(jù)緩存區(qū)之間的關(guān)系示意圖;圖6為發(fā)送DMA模塊結(jié)構(gòu)示意圖;圖7為待發(fā)送隊(duì)列描述子指向通道的一個(gè)待發(fā)送數(shù)據(jù)包的例子示意圖;圖8為待發(fā)送隊(duì)列描述子指向通道的兩個(gè)待發(fā)送數(shù)據(jù)包的例子示意圖;圖9為發(fā)送DMA模塊中配置RAM存儲(chǔ)器數(shù)據(jù)結(jié)構(gòu)示意圖;圖10為發(fā)送DMA模塊串鏈流程示意圖;圖11為發(fā)送DMA模塊串鏈結(jié)構(gòu)示意圖;圖12為發(fā)送DMA模塊發(fā)送數(shù)據(jù)流程示意圖。
具體實(shí)施例方式
下面根據(jù)附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明根據(jù)圖1、圖2、圖3、圖4、圖5、圖6、圖7、圖8、圖9、圖10、圖11和圖12在本發(fā)明中,如圖1、圖2和圖6所示,直接訪問(wèn)處理模塊包括接收DMA模塊21和發(fā)送DMA模塊22;在接收DMA模塊21中具有FREE_FIFO存儲(chǔ)器、DONE_FIFO存儲(chǔ)器和配置RAM存儲(chǔ)器,以及用于訪問(wèn)控制的控制邏輯,F(xiàn)REE_FIFO存儲(chǔ)器用于存放空閑隊(duì)列描述子Free QueueDescriptor,DONE_FIFO存儲(chǔ)器用于存放完成隊(duì)列描述子;在發(fā)送DMA模塊22中具有PENDING_FIFO存儲(chǔ)器、DONE_FIFO存儲(chǔ)器和配置RAM存儲(chǔ)器,以及用于訪問(wèn)控制的控制邏輯,PENDING_FIFO存儲(chǔ)器用于存放待發(fā)送隊(duì)列描述子,DONE_FIFO存儲(chǔ)器用于存放發(fā)送完成隊(duì)列描述子;如圖1和圖2所示,各通道的數(shù)據(jù)經(jīng)數(shù)據(jù)處理模塊1的正常處理后,包數(shù)據(jù)發(fā)至接收DMA模塊21;接收DMA模塊21根據(jù)空閑隊(duì)列描述子FreeQueue Descriptor提供的片外主存中的空閑數(shù)據(jù)緩存區(qū)地址以及最后用于描述該緩存區(qū)的信息的包數(shù)據(jù)描述子在片外主存中的位置經(jīng)總線接口模塊3,通過(guò)片外總線將數(shù)據(jù)存入片外主存;空閑隊(duì)列描述子FreeQueue Descriptor的數(shù)據(jù)結(jié)構(gòu)如表1所示

表1其中Free Data Buffer Address片外主存中空閑數(shù)據(jù)緩存區(qū)的起始地址;Free Packet Descriptor Pointer包數(shù)據(jù)描述子指針,指向用于描述該數(shù)據(jù)緩存區(qū)的信息的包數(shù)據(jù)描述子在主存中的位置。
如表2所示,包數(shù)據(jù)描述子的數(shù)據(jù)結(jié)構(gòu)包括Data Buffer Address數(shù)據(jù)緩存區(qū)的起始地址;Next Descriptor Pointer數(shù)據(jù)包下一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針;Length該數(shù)據(jù)緩存區(qū)的數(shù)據(jù)長(zhǎng)度;Buffer Status數(shù)據(jù)緩存區(qū)狀態(tài),用以表示該數(shù)據(jù)緩存區(qū)里填的數(shù)據(jù)是該數(shù)據(jù)包的開(kāi)始部分還是中間部分,或者最后部分;其中000代表數(shù)據(jù)包的第一個(gè)數(shù)據(jù)緩存區(qū);010代表數(shù)據(jù)包的中間數(shù)據(jù)緩存區(qū);100代表數(shù)據(jù)包的最后一個(gè)數(shù)據(jù)緩存區(qū);Channel通道號(hào),數(shù)據(jù)屬于哪個(gè)通道;


表2接收DMA模塊21使用完成隊(duì)列描述子Done Queue Descriptor反映接收DMA模塊21在將數(shù)據(jù)填到一個(gè)或多個(gè)空閑數(shù)據(jù)緩存區(qū)后,或者將一個(gè)數(shù)據(jù)包全部填到片外主存的空閑數(shù)據(jù)緩存區(qū)后,CPU處理時(shí)需要用到的已經(jīng)填到主存里的完整的或非完整的數(shù)據(jù)包的信息;如表3所示,在接收DMA模塊21中,完成隊(duì)列描述子Done QueueDescriptor主要包括需要處理的數(shù)據(jù)包或數(shù)據(jù)屬于那個(gè)通道、需要處理的數(shù)據(jù)包或數(shù)據(jù)占了幾個(gè)數(shù)據(jù)緩存區(qū)、需要處理的數(shù)據(jù)包或數(shù)據(jù)所占用的幾個(gè)數(shù)據(jù)緩存區(qū)的第一個(gè)緩存區(qū)所對(duì)應(yīng)的包數(shù)據(jù)描述子指針、需要處理的數(shù)據(jù)是否一個(gè)完整的數(shù)據(jù)包;其數(shù)據(jù)結(jié)構(gòu)包括Descriptor Pointer指向數(shù)據(jù)包或則包數(shù)據(jù)所占的第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子的指針;Channel數(shù)據(jù)屬于哪個(gè)通道;Buffers等待CPU處理的數(shù)據(jù)包或數(shù)據(jù)占用了幾個(gè)數(shù)據(jù)緩存區(qū);Packet Status包數(shù)據(jù)狀態(tài),記錄在接收過(guò)程中發(fā)生錯(cuò)誤的類型;EOF包結(jié)束符,表示一個(gè)數(shù)據(jù)包已結(jié)束。

表3接收DMA模塊21中的配置RAM存儲(chǔ)器存儲(chǔ)器按通道分塊,用于存放接收DMA模塊2 1在從數(shù)據(jù)處理模塊1接收各通道數(shù)據(jù)過(guò)程中根據(jù)控制邏輯產(chǎn)生的有關(guān)包數(shù)據(jù)描述子等各種信息,利用包數(shù)據(jù)描述子記錄數(shù)據(jù)緩存區(qū)的信息以及CPU在處理時(shí)知道被處理數(shù)據(jù)的信息;如圖3所示,在接收DMA模塊21中,配置RAM存儲(chǔ)器按通道分塊,用于存放接收DAM在從數(shù)據(jù)處理模塊1接收各通道數(shù)據(jù)過(guò)程中產(chǎn)生的一些中間信息,以及CPU對(duì)各通道的配置信息,其數(shù)據(jù)結(jié)構(gòu)包括Current Data Buufer Address數(shù)據(jù)緩存區(qū)當(dāng)前地址,由接收DMA模塊21寫入;Current Descriptor Pointer當(dāng)前數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針,由接收DMA模塊21寫入;Start Descriptor PointerCPU要處理數(shù)據(jù)的第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子,由接收DMA模塊21寫入;Threshold控制接收DMA模塊21在填了幾個(gè)數(shù)據(jù)緩存區(qū)后生成一個(gè)接收完成隊(duì)列描述子,由CPU寫入;Data Number數(shù)據(jù)緩存區(qū)的數(shù)據(jù)量,由接收DMA模塊21寫入,CPU初始化時(shí)置零;Threshold Count當(dāng)前數(shù)據(jù)包所占用的實(shí)際數(shù)據(jù)緩存區(qū)數(shù),由接收DMA模塊21寫入,CPU初始化時(shí)置零;Buffer Size該通道數(shù)據(jù)緩存區(qū)的大小,由CPU寫入;接收DMA模塊21在數(shù)據(jù)包長(zhǎng)度超過(guò)一個(gè)數(shù)據(jù)緩存區(qū)的容量時(shí),通過(guò)包數(shù)據(jù)描述子和完成隊(duì)列描述子的信息,將多個(gè)數(shù)據(jù)緩存區(qū)鏈接起來(lái)存放一個(gè)完整的數(shù)據(jù)包;接收DMA模塊21在數(shù)據(jù)包長(zhǎng)度超過(guò)一個(gè)數(shù)據(jù)緩存區(qū)的容量時(shí),通過(guò)Next Descriptor Pointer和EOF位,將多個(gè)數(shù)據(jù)緩存區(qū)鏈接起來(lái)存放一個(gè)完整的數(shù)據(jù)包;接收DMA模塊21中配置數(shù)據(jù)FIFO存儲(chǔ)器,在FREE_FIFO存儲(chǔ)器中的空閑隊(duì)列描述子數(shù)目少于某個(gè)設(shè)定的門限時(shí),根據(jù)其內(nèi)部實(shí)時(shí)調(diào)整的讀空閑隊(duì)列指針通過(guò)總線接口控制模塊從片外主存中的空閑隊(duì)列存放空閑隊(duì)列描述子的緩存區(qū),讀取足夠多的空閑隊(duì)列描述子將FREE_FIFO填滿;接收DMA模塊21接到數(shù)據(jù)處理模塊1向接收DMA模塊21的請(qǐng)求,一邊從數(shù)據(jù)處理模塊1接收數(shù)據(jù)填到數(shù)據(jù)FIFO存儲(chǔ)器中,同時(shí)從配置RAM存儲(chǔ)器中將該通道的信息讀出。
根據(jù)圖1、圖2,如圖4和圖5所示,如果配置RAM存儲(chǔ)器中的Threshold Count和Data Number都為“0”,表示剛開(kāi)始接收該當(dāng)前通道的數(shù)據(jù),或則接收DMA模塊21在通知CPU處理該通道過(guò)去接收的數(shù)據(jù)后直到現(xiàn)在才接收該通道的數(shù)據(jù),需要將數(shù)據(jù)填到一個(gè)新的數(shù)據(jù)緩沖區(qū),接收DMA模塊21從FREE_FIFO存儲(chǔ)器讀出一個(gè)空閑隊(duì)列描述子,根據(jù)其中空閑數(shù)據(jù)緩存區(qū)地址Free Data Buffer Address將包數(shù)據(jù)填入數(shù)據(jù)緩存區(qū),同時(shí)遞增數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)量、實(shí)時(shí)調(diào)整寫數(shù)據(jù)緩存區(qū)的地址,同時(shí)用指向該數(shù)據(jù)緩沖區(qū)的包數(shù)據(jù)描述子的包數(shù)據(jù)描述子指針更新配置RAM存儲(chǔ)器的Current Descriptor;如果從數(shù)據(jù)處理模塊1接收的數(shù)據(jù)不足以填滿一個(gè)數(shù)據(jù)緩存區(qū),或則還沒(méi)有接收到一個(gè)完整的數(shù)據(jù)包,接收DMA模塊21在數(shù)據(jù)FIFO存儲(chǔ)器為空時(shí),結(jié)束通過(guò)總線接口模塊3向數(shù)據(jù)緩沖區(qū)填數(shù)據(jù)的操作,用該數(shù)據(jù)緩存區(qū)中的當(dāng)前數(shù)據(jù)量更新配置RAM存儲(chǔ)器中的Data Number、用寫數(shù)據(jù)緩沖區(qū)地址更新配置RAM存儲(chǔ)器中的Current Data BufferAddress、該數(shù)據(jù)包目前已經(jīng)占用了片外主存中的幾個(gè)數(shù)據(jù)緩存區(qū)更新配置RAM存儲(chǔ)器中的Threshold Count;接收DMA模塊21從數(shù)據(jù)處理模塊1再次接收到該通道的數(shù)據(jù)時(shí),發(fā)現(xiàn)配置RAM存儲(chǔ)器中的Data Number或Threshold Count不為“0”,則根據(jù)配置RAM存儲(chǔ)器中的Current Data Buffer Address通過(guò)接口控制模塊緊接著上次填的地址將數(shù)據(jù)填入上次未填滿的數(shù)據(jù)緩存區(qū),遞增已經(jīng)填在該數(shù)據(jù)緩存區(qū)的實(shí)際數(shù)據(jù)量、調(diào)整寫數(shù)據(jù)緩存區(qū)地址;接收DMA模塊21在向數(shù)據(jù)緩存區(qū)填寫數(shù)據(jù)過(guò)程中,發(fā)現(xiàn)已經(jīng)填到數(shù)據(jù)緩存區(qū)的數(shù)據(jù)量達(dá)到了配置RAM存儲(chǔ)器中的Buffer Size,CPU給該通道設(shè)置的數(shù)據(jù)緩沖區(qū)最多可緩存的數(shù)據(jù)量,判斷已經(jīng)填滿了一個(gè)數(shù)據(jù)緩沖區(qū),將該數(shù)據(jù)包占用的數(shù)據(jù)緩存區(qū)加一,同時(shí)根據(jù)從數(shù)據(jù)處理模塊1接收的數(shù)據(jù)中發(fā)現(xiàn)該數(shù)據(jù)包未結(jié)束,則從FREE_FIFO存儲(chǔ)器讀出的一個(gè)新空閑隊(duì)列描述子找到下一個(gè)空閑數(shù)據(jù)緩存區(qū),然后用新空閑隊(duì)列描述子中的包數(shù)據(jù)描述子指針寫配置RAM存儲(chǔ)器中Current DescriptorPointer指向的包數(shù)據(jù)描述子中的Next Descriptor Pointer域,用當(dāng)前被填滿的數(shù)據(jù)緩存區(qū)的起始地址、數(shù)據(jù)所屬通道、該數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)量、該數(shù)據(jù)緩沖區(qū)在當(dāng)前數(shù)據(jù)包中的狀態(tài),該數(shù)據(jù)包數(shù)據(jù)占用的幾個(gè)數(shù)據(jù)緩沖區(qū)中的第一個(gè)數(shù)據(jù)緩沖區(qū),該數(shù)據(jù)包數(shù)據(jù)占用的幾個(gè)數(shù)據(jù)緩存區(qū)的中間一個(gè),該數(shù)據(jù)包數(shù)據(jù)占用的幾個(gè)數(shù)據(jù)緩沖區(qū)的最后一個(gè)數(shù)據(jù)緩沖區(qū),寫包數(shù)據(jù)描述子的相應(yīng)域,用新讀出的空閑隊(duì)列描述子中的Free Packet Descriptor Pointer更新配置RAM存儲(chǔ)器中的CurrentDescriptor Pointer如果發(fā)現(xiàn)當(dāng)前數(shù)據(jù)包全部被填完或已經(jīng)填滿了當(dāng)前數(shù)據(jù)緩沖區(qū),且當(dāng)前該數(shù)據(jù)包占用的數(shù)據(jù)緩沖區(qū)數(shù)目已經(jīng)達(dá)到了配置RAM存儲(chǔ)器中Threshold值,即CPU預(yù)先設(shè)定的填多少個(gè)數(shù)據(jù)緩沖區(qū)生成一個(gè)完成隊(duì)列描述子,則將當(dāng)前數(shù)據(jù)包或數(shù)據(jù)所屬通道、配置RAM存儲(chǔ)器中的Threshold Count,即數(shù)據(jù)包或數(shù)據(jù)目前已經(jīng)占用的數(shù)據(jù)緩存區(qū)數(shù)目、配置RAM存儲(chǔ)器中的Start Descriptor Pointer,即數(shù)據(jù)包或數(shù)據(jù)所占用的幾個(gè)數(shù)據(jù)緩存區(qū)的第一個(gè)緩存區(qū)所對(duì)應(yīng)的包數(shù)據(jù)描述子指針、包結(jié)束符,即用以表示需要處理的數(shù)據(jù)是一個(gè)完整的數(shù)據(jù)包還是數(shù)據(jù)包的一部分?jǐn)?shù)據(jù),作為完成隊(duì)列描述子寫入DONE_FIFO存儲(chǔ)器,將配置RAM存儲(chǔ)器中的Threshold Count和Data Number清零;接收DMA模塊21在DONE_FIFO存儲(chǔ)器里有了一定數(shù)目的接收完成隊(duì)列描述子時(shí),根據(jù)其內(nèi)部實(shí)時(shí)調(diào)整的寫完成隊(duì)列指針將DONE_FIFO存儲(chǔ)器里的接收完成隊(duì)列描述子按順序?qū)懭胫鞔嬷械慕邮胀瓿申?duì)列存放接收完成隊(duì)列描述子的緩存空間,并通過(guò)中斷告訴CPU有數(shù)據(jù)可以處理,將該數(shù)據(jù)包或要處理的數(shù)據(jù)全部處理完畢。
這樣,接收DMA模塊21通過(guò)中斷告訴CPU有數(shù)據(jù)可以處理,CPU通過(guò)接收完成隊(duì)列描述子中的第一個(gè)數(shù)據(jù)緩沖區(qū)的包數(shù)據(jù)描述子指針,找到第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子,根據(jù)其中的數(shù)據(jù)緩存區(qū)開(kāi)始地址找到第一個(gè)數(shù)據(jù)緩存區(qū),處理完第一個(gè)數(shù)據(jù)緩存區(qū)的數(shù)據(jù)后,根據(jù)第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子中的信息找到第二個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子,再根據(jù)包數(shù)據(jù)描述子中數(shù)據(jù)緩存區(qū)開(kāi)始地址找到第二個(gè)數(shù)據(jù)緩存區(qū),處理完第二個(gè)數(shù)據(jù)緩存區(qū)后再根據(jù)第二個(gè)數(shù)據(jù)緩沖區(qū)的包數(shù)據(jù)描述子中的信息找到第三個(gè)數(shù)據(jù)緩沖區(qū)的包數(shù)據(jù)描述子……依此類推,直至將該數(shù)據(jù)包或要處理的數(shù)據(jù)全部處理完畢;根據(jù)圖1、圖6、圖7、圖8、圖9、圖10、圖11和圖12所示,在發(fā)送DMA模塊22中,CPU通知發(fā)送DMA模塊22某個(gè)通道的一個(gè)待發(fā)送包鏈,發(fā)送DMA模塊22存放待發(fā)送隊(duì)列描述子,待發(fā)送隊(duì)列描述子反映待發(fā)送包鏈的第一個(gè)數(shù)據(jù)緩存區(qū)對(duì)應(yīng)的包數(shù)據(jù)描述子及該待發(fā)送包鏈屬于哪個(gè)通道,待發(fā)送隊(duì)列描述子對(duì)應(yīng)相應(yīng)的待發(fā)包數(shù)據(jù)描述子;如表4所示,待發(fā)送隊(duì)列描述子數(shù)據(jù)結(jié)構(gòu)

表4其中Descriptor Pointer描述子指針,指向待發(fā)送包鏈的第一個(gè)數(shù)據(jù)緩存區(qū)對(duì)應(yīng)的包數(shù)據(jù)描述子。
Channel通道號(hào),表明待發(fā)送包鏈屬于哪個(gè)通道。
在發(fā)送DMA模塊22中,待發(fā)包數(shù)據(jù)描述子的數(shù)據(jù)結(jié)構(gòu)如表5所示

表5
其中Data Buffer Address待發(fā)送數(shù)據(jù)緩存區(qū)起始地址,由CPU寫入;Next Descriptor Poitner下一待發(fā)送包數(shù)據(jù)描述子,在EOF為“0”時(shí)指向該待發(fā)送數(shù)據(jù)包的下個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子。在EOF和CV都是“1”的時(shí)候,指向下個(gè)待發(fā)送數(shù)據(jù)包的的第一個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子,由CPU寫入;Length數(shù)據(jù)長(zhǎng)度,待發(fā)送數(shù)據(jù)緩存區(qū)的數(shù)據(jù)量,由CPU寫入;CV鏈有效標(biāo)識(shí)(Chain Valid),該位作用在介紹Next DescriptorPointer時(shí)已經(jīng)介紹過(guò),由CPU寫入;EOF幀結(jié)束表示(End Of Frame),為“1”表示當(dāng)前待數(shù)據(jù)緩存區(qū)是該待發(fā)送數(shù)據(jù)包的最后一個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)了,由CPU寫入;Next Pengding Descriptor Pointer在PV為“1”的時(shí)候有效,發(fā)送DMA模塊22內(nèi)部只存放兩個(gè)待發(fā)送包鏈,如果某個(gè)通道有多個(gè)待發(fā)送包鏈的話,發(fā)送DMA模塊22通過(guò)寫該域,并置PV為“1”,將多個(gè)待發(fā)送包鏈串起來(lái),然后在發(fā)送數(shù)據(jù)過(guò)程中,通過(guò)讀PV和該域的指針,將一個(gè)通道的待發(fā)送包鏈中的所有數(shù)據(jù)正確發(fā)送出去。
Channel通道號(hào),由CPU寫入;PV下一待發(fā)送隊(duì)列指針有效標(biāo)識(shí)Pending Descriptor Valid,為“1”表示Next Pending Descriptor Pointer有效,由發(fā)送DMA模塊22寫入;待發(fā)送隊(duì)列描述子的數(shù)據(jù)結(jié)構(gòu)包括Descriptor Pointer描述子指針,指向待發(fā)送包鏈的第一個(gè)數(shù)據(jù)緩存區(qū)對(duì)應(yīng)的包數(shù)據(jù)描述子。
Channel通道號(hào),表明待發(fā)送包鏈屬于哪個(gè)通道。
待發(fā)送包鏈的數(shù)據(jù)經(jīng)片外總線通過(guò)總線接口模塊3,由發(fā)送DMA模塊22根據(jù)相應(yīng)的控制邏輯發(fā)送至數(shù)據(jù)處理模塊1,在發(fā)送DMA模塊22產(chǎn)生發(fā)送完成隊(duì)列描述子,存放到內(nèi)部的DONE_FIFO存儲(chǔ)器中,在DONE_FIFO存儲(chǔ)器中的發(fā)送完成隊(duì)列數(shù)目超過(guò)其上限時(shí),自動(dòng)寫到片外主存中的發(fā)送完成隊(duì)列同時(shí)報(bào)中斷給CPU,該發(fā)送完成隊(duì)列描述子記錄發(fā)送DMA模塊22在發(fā)完一個(gè)待發(fā)送數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)或一個(gè)完整的待發(fā)送數(shù)據(jù)包過(guò)程中記錄的信息;例如整個(gè)數(shù)據(jù)包被完整發(fā)送、待發(fā)送數(shù)據(jù)包的第一個(gè)待發(fā)送數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)被發(fā)送、待發(fā)送數(shù)據(jù)包的中間某個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)的數(shù)據(jù)被發(fā)送、待發(fā)送數(shù)據(jù)包的最后一個(gè)待發(fā)送數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)被發(fā)送,如果在發(fā)送數(shù)據(jù)過(guò)程中有錯(cuò)誤發(fā)生,則記錄錯(cuò)誤現(xiàn)象或原因。
如表6所示,發(fā)送完成隊(duì)列描述子的數(shù)據(jù)結(jié)構(gòu)如下

表6其中Descriptor Pointer包數(shù)據(jù)描述子指針,用于指向已經(jīng)被發(fā)送出去的待發(fā)送包的第一個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子,或則指向已經(jīng)被發(fā)送出去的待發(fā)送緩存區(qū)的包數(shù)據(jù)描述子。
Channel通道號(hào),被發(fā)送數(shù)據(jù)屬于哪個(gè)通道,由發(fā)送DMA模塊22寫入;Status狀態(tài),主要記錄被發(fā)送數(shù)據(jù)在待發(fā)送包中的位置,以及記錄在發(fā)送數(shù)據(jù)過(guò)程中的出錯(cuò)情況。
EOF幀結(jié)束標(biāo)識(shí),End Of Frame。
在發(fā)送DMA模塊22中,配置RAM存儲(chǔ)器按通道分塊,存放發(fā)送DMA模塊22在發(fā)送包數(shù)據(jù)過(guò)程中需要用到的中間信息和CPU對(duì)該通道的配置信息;如圖9所示,其數(shù)據(jù)結(jié)構(gòu)包括Current Data Buffer Address待發(fā)送數(shù)據(jù)緩沖區(qū)的當(dāng)前地址,由發(fā)送DMA模塊22寫入,CPU只讀;DQS如果為“0”,發(fā)送DMA模塊22只在發(fā)送了一個(gè)數(shù)據(jù)包以后才寫完成隊(duì)列描述子,如果為“1”,發(fā)送DMA模塊22在發(fā)完一個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)的數(shù)據(jù)后寫完成隊(duì)列描述子;由CPU寫入;Length Left當(dāng)前待發(fā)送數(shù)據(jù)緩存區(qū)的剩余數(shù)據(jù)量,由發(fā)送DMA模塊22寫入;CPU初始化時(shí)置零;EOF和當(dāng)前待發(fā)送數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子中的EOF一樣,由發(fā)送DMA模塊22寫入,CPU初始化時(shí)置零;CV和當(dāng)前待發(fā)送數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子中的CV一樣,由發(fā)送DMA模塊22寫入,CPU初始化時(shí)置零;PENDST用于表示配置RAM存儲(chǔ)器中Next Dscriptor、Next PendingDescriptor的狀態(tài),由發(fā)送DMA模塊22寫入,CPU初始化時(shí)置零,如下所示PENDST Next Descriptor Pointer Next Pending Descriptor Pointer000 無(wú)效無(wú)效100 無(wú)效無(wú)效101 有效有效111 有效有效其中PENDST的最高為“0”表示該通道目前沒(méi)有它可以發(fā)送的數(shù)據(jù),為“1”表示有。
Next Descriptor Pointer下個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針Start Descriptor Pointer當(dāng)前待發(fā)送數(shù)據(jù)包的第一個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針。
Next Pending Descriptor Pointer下個(gè)待發(fā)送包鏈的第一個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針。
Last Pending Descriptor Pointer最后一個(gè)待發(fā)送包鏈的第一個(gè)待發(fā)送數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針。
CPU將需要發(fā)送的數(shù)據(jù)通過(guò)待發(fā)送包描述子和待發(fā)送隊(duì)列描述子的形式寫到片外主存中的待發(fā)送包數(shù)據(jù)描述子隊(duì)列和待發(fā)送隊(duì)列中,更新發(fā)送DMA模塊22中的待發(fā)送隊(duì)列描述子的指針,發(fā)送DMA模塊22讀取待發(fā)送隊(duì)列描述子;發(fā)送DMA模塊22根據(jù)待發(fā)送隊(duì)列描述子及待發(fā)送包數(shù)據(jù)描述子的信息,修改待發(fā)送包數(shù)據(jù)描述子和配置RAM的信息,將CPU要發(fā)送的待發(fā)送包數(shù)據(jù)串鏈起來(lái),根據(jù)待發(fā)送包數(shù)據(jù)所屬通道的包數(shù)據(jù)發(fā)送情況,產(chǎn)生正確的狀態(tài)信息放在配置RAM中,同時(shí)響應(yīng)數(shù)據(jù)模塊申請(qǐng)包數(shù)據(jù)的請(qǐng)求,從數(shù)據(jù)處理模塊1傳至相應(yīng)的通道;在發(fā)送DMA模塊22中,如圖10所示,串鏈數(shù)據(jù)的具體過(guò)程為1、在PENDING_FIFO存儲(chǔ)器非空時(shí)從PENDING_FIFO存儲(chǔ)器中讀出待發(fā)送隊(duì)列描述子,此時(shí)根據(jù)從配置RAM存儲(chǔ)器讀出的該通道的信職工息發(fā)現(xiàn)如果PENDST為“3’b000”,表示當(dāng)前該通道沒(méi)有要發(fā)送的數(shù)據(jù)包鏈,則用待發(fā)送隊(duì)列描述子中的包數(shù)據(jù)描述子指針寫配置RAM存儲(chǔ)器的Start Descriptor域,并修改PENDST為3’b100,表示該通道有一個(gè)待發(fā)送包鏈。
2、如果緊接著再次從PENDING_FIFO存儲(chǔ)器中讀出該通道的待發(fā)送隊(duì)列描述子,此時(shí)根據(jù)按通道從配置RAM存儲(chǔ)器讀出的信息中發(fā)現(xiàn)PENDST為“3’b100”,表示該通道有一個(gè)待發(fā)送包鏈,則將第二次讀出的待發(fā)送隊(duì)列描述子中的包數(shù)據(jù)描述子指針寫入該通道在配置RAM存儲(chǔ)器中的Next Pending Descriptor Pointer和LastPending Descriptor Pointer域,并置PENDST為3’b101,表示該通道至少有了兩個(gè)待發(fā)送包鏈。
3、如果緊接著從PENDING_FIFO存儲(chǔ)器中讀出的待發(fā)送隊(duì)列描述子還是屬于該通道,則根據(jù)從配置RAM存儲(chǔ)器中讀出的該通道的PENDST值,發(fā)現(xiàn)其為“3’b101”,表示該通道目前至少有兩個(gè)待發(fā)送包鏈,此時(shí)除了用這次讀出的發(fā)送隊(duì)列描述子更新該通道配置RAM存儲(chǔ)器中的Last Pending Descriptor Pointer之外,并將其寫到該通道在配置RAM存儲(chǔ)器中Next Pending Descriptor Pointer指向的包數(shù)據(jù)描述子中的Next Pending Descriptor Pointer域,同時(shí)將包數(shù)據(jù)描述子中的PV置“1”。
4、如果該通道還有多個(gè)待發(fā)送包鏈,具體表現(xiàn)為在PENDING_FIFO存儲(chǔ)器中讀出該通道的多個(gè)待發(fā)送隊(duì)列描述子,發(fā)送DMA模塊22只要按照上面3所示的那樣,就將該通道所有的發(fā)送包鏈,串了起來(lái)。
5、發(fā)送DMA模塊22通過(guò)上面步驟1、步驟2、步驟3、步驟4所述的操作,把每個(gè)端口當(dāng)前所有的待發(fā)送包鏈按端口串在一起,如圖11所示,顯示數(shù)據(jù)的串鏈結(jié)構(gòu)。
當(dāng)數(shù)據(jù)處理模塊1向發(fā)送DMA模塊22申請(qǐng)某個(gè)通道的數(shù)據(jù)時(shí),發(fā)送DMA模塊22根據(jù)數(shù)據(jù)處理模塊1送過(guò)來(lái)的通道號(hào)從配置RAM存儲(chǔ)器中讀出數(shù)據(jù)處理模塊1想要申請(qǐng)的通道的信息,從主存中讀出相應(yīng)的待發(fā)包數(shù)據(jù)描述子,根據(jù)其中的信息從主存中的數(shù)據(jù)緩沖區(qū)讀出數(shù)據(jù)送給數(shù)據(jù)處理模塊1,遞減當(dāng)前數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量;如果數(shù)據(jù)處理模塊1還未等發(fā)送DMA模塊22將當(dāng)前正在讀的數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)全部讀出送給數(shù)據(jù)處理模塊1就因?yàn)閮?nèi)部原因而停止接收數(shù)據(jù),要求停止當(dāng)前傳送,發(fā)送DMA模塊22停止從數(shù)據(jù)緩存區(qū)讀數(shù)據(jù),將當(dāng)前讀數(shù)據(jù)緩沖區(qū)地址寫到配置RAM存儲(chǔ)器該通道部分的相應(yīng)信息中;待數(shù)據(jù)處理模塊1在其有能力接收該通道的數(shù)據(jù)的時(shí)候,向發(fā)送DMA模塊22申請(qǐng)?jiān)撏ǖ赖臄?shù)據(jù),發(fā)送DMA模塊22從配置RAM存儲(chǔ)器讀出該通道的信息,發(fā)現(xiàn)向數(shù)據(jù)緩沖區(qū)讀數(shù)據(jù)送給數(shù)據(jù)處理模塊1、遞減數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量。
如圖12所示,當(dāng)數(shù)據(jù)處理模塊1向發(fā)送DMA模塊22申請(qǐng)某個(gè)通道的數(shù)據(jù)時(shí)1、如果PENDST為“3’b000”,表示該通道目前沒(méi)有待發(fā)送包鏈,發(fā)送DMA模塊22向數(shù)據(jù)處理模塊1發(fā)結(jié)束數(shù)據(jù)傳輸信號(hào),表示當(dāng)前本次傳輸結(jié)束;2、如果PENDST的最高位“1”,即PENDST的值為“3’b1xx”,表示不考慮PENDST低兩位的值,且從配置RAM存儲(chǔ)器中讀出的Length Left為“0”,表示目前還沒(méi)有發(fā)送過(guò)該通道的數(shù)據(jù),則根據(jù)該通道在配置RAM存儲(chǔ)器中的Start Descriptor Pointer的值從主存中讀出Start Descriptor Pointer指向的包數(shù)據(jù)描述子,根據(jù)其中的Data Buffer Address,從主存中的數(shù)據(jù)緩沖區(qū)讀出數(shù)據(jù)送給數(shù)據(jù)處理模塊1,遞減當(dāng)前數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量,同時(shí)如果Start Descriptor Pointer指向的包數(shù)據(jù)描述子中的EOF為“0”或則EOF和CV都為“1”,則將Start DescriptorPointer指向的包數(shù)據(jù)描述子中的Next Descriptor Pointer寫到該通道在配置RAM存儲(chǔ)器中的Next Descriptor Pointer域,同時(shí)將PENDST中的最高位和次高位置“1”,表示該通道配置RAM存儲(chǔ)器中的Next Descriptor Pointer有效;3、如果數(shù)據(jù)處理模塊1還未等發(fā)送DMA模塊22將當(dāng)前正在讀的數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)全部讀出送給數(shù)據(jù)處理模塊1就因?yàn)閮?nèi)部原因而停止接收數(shù)據(jù),要求停止當(dāng)前傳送,發(fā)送DMA模塊22停止從數(shù)據(jù)緩存區(qū)讀數(shù)據(jù),將當(dāng)前讀數(shù)據(jù)緩沖區(qū)地址寫到配置RAM存儲(chǔ)器該通道部分的Current Data Buffer Address,將數(shù)據(jù)緩沖區(qū)剩余數(shù)據(jù)量寫到配置RAM存儲(chǔ)器該通道部分的Length Left域。
4、數(shù)據(jù)處理模塊1在其有能力接收該通道的數(shù)據(jù)的時(shí)候,向發(fā)送DMA模塊22申請(qǐng)?jiān)撏ǖ赖臄?shù)據(jù),發(fā)送DMA模塊22從配置RAM存儲(chǔ)器讀出該通道的信息,發(fā)現(xiàn)Length Left域不為“0”,表示還未發(fā)送完一個(gè)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù),根據(jù)配置RAM存儲(chǔ)器中的Current Data Buffer Address向數(shù)據(jù)緩沖區(qū)讀數(shù)據(jù)送給數(shù)據(jù)處理模塊1、遞減數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量。
5、發(fā)送DMA模塊22將數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)全部送給數(shù)據(jù)處理模塊1以后,數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量為“0”,看配置RAM存儲(chǔ)器中該通道的PENDST中的次高位是否為“1”,如果為“1”,發(fā)送DMA模塊22根據(jù)配置RAM存儲(chǔ)器中的Next Descriptor Pointer從主存讀出對(duì)應(yīng)的包數(shù)據(jù)描述子a、如果包數(shù)據(jù)描述子中的EOF為“0”或則EOF和CV都為“1”,用包數(shù)據(jù)描述子中的Next Descripotor Pointer更新配置RAM存儲(chǔ)器中的Next Descriptor Pointer,置配置RAM存儲(chǔ)器中的PENDST的最高位和次高位為“1”,3’b11X表示該待發(fā)送數(shù)據(jù)包鏈有至少兩個(gè)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)組成;b、如果包數(shù)據(jù)描述子中的EOF為“1”且CV為“0”,置配置RAM存儲(chǔ)器中的次高位為“0”,3’b10X表示該數(shù)據(jù)緩沖區(qū)是待發(fā)送數(shù)據(jù)包鏈最后一個(gè)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù);c、如果此時(shí)數(shù)據(jù)處理模塊1可以繼續(xù)接收該通道的數(shù)據(jù),發(fā)送DMA模塊22根據(jù)包數(shù)據(jù)描述子中的Data Buffer Address通過(guò)接口控制模塊從外部主存中的數(shù)據(jù)緩沖區(qū)讀數(shù)據(jù)送給數(shù)據(jù)處理模塊1,遞減數(shù)據(jù)緩沖區(qū)中的剩余數(shù)據(jù)量;d、如果此時(shí)數(shù)據(jù)處理模塊1不能繼續(xù)接收該通道的數(shù)據(jù),要求結(jié)束本次傳輸,發(fā)送DMA模塊22用包數(shù)據(jù)描述子中的Data Buffer Address更新配置RAM存儲(chǔ)器中的CurrentData Buffer Address;包數(shù)據(jù)描述子中的Length更新配置RAM存儲(chǔ)器中的Length Left的值,這樣的話,等到數(shù)據(jù)處理模塊1下次再申請(qǐng)?jiān)撏ǖ罃?shù)據(jù)的時(shí)候可以繼續(xù)將待發(fā)送數(shù)據(jù)從數(shù)據(jù)緩沖區(qū)讀出送給數(shù)據(jù)處理模塊1;6、發(fā)送DMA模塊22在將一個(gè)待發(fā)送數(shù)據(jù)包鏈發(fā)完以后,即該數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量為零;且此時(shí)PENDST的次高位為“0”,如果PENDST中的最低位為“1”,表示該通道配置RAM存儲(chǔ)器中的Next Pending Descriptor Pointer域有效,發(fā)送DMA模塊22用配置RAM存儲(chǔ)器中的Next Pending Descriptor Pointer更新配置RAM存儲(chǔ)器中Start Descriptor的值,這樣的話,如果此時(shí)數(shù)據(jù)處理模塊1要求停止本次數(shù)據(jù)傳輸,等到數(shù)據(jù)處理模塊1下次再申請(qǐng)?jiān)撏ǖ罃?shù)據(jù)的時(shí)候還可完整地將該通道的待發(fā)送數(shù)據(jù)送給數(shù)據(jù)處理模塊1,從主存中讀出Next PendingDescripotr Pointer指向的包數(shù)據(jù)描述子
a、如果包數(shù)據(jù)描述子中的PV為“1”,用包數(shù)據(jù)描述子中的Next Pending Descriptor Pointer代替配置RAM存儲(chǔ)器中的Next Pending Descriptor Pointer,并將配置RAM存儲(chǔ)器中的PENDST最高位和最低位置“1”,3’b1X1表示當(dāng)前該通道至少有兩個(gè)待發(fā)送包鏈的數(shù)據(jù)等待發(fā)送;b、如果包數(shù)據(jù)描述子中的PV為“0”,置配置RAM存儲(chǔ)器中的PENDST最低位為“0”,3’b1X0表示當(dāng)前該發(fā)送包鏈?zhǔn)窃撏ǖ赖淖詈笠粋€(gè)待發(fā)送包鏈;c、如果包數(shù)據(jù)描述子中的EOF為“0”或則EOF和CV都為“1”,用包數(shù)據(jù)描述子中的Next Descripotor Pointer更新配置RAM存儲(chǔ)器中的Next Descriptor Pointer,置配置RAM存儲(chǔ)器中的PENDST的最高位和次高位為“1”,3’b11X表示該待發(fā)送數(shù)據(jù)包鏈有至少兩個(gè)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)組成;d、如果包數(shù)據(jù)描述子中的EOF為“1”且CV為“0”,置配置RAM存儲(chǔ)器中的次高位為“0”,3’b10X表示該數(shù)據(jù)緩沖區(qū)是待發(fā)送數(shù)據(jù)包鏈最后一個(gè)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù);7、發(fā)送DMA模塊22按上面步驟2至步驟6所示描述地一樣將該通道其他待發(fā)送包鏈所對(duì)應(yīng)的數(shù)據(jù)送給數(shù)據(jù)處理模塊1,直到發(fā)送DMA模塊22將該通道的最后一個(gè)數(shù)據(jù)包鏈中最后一個(gè)包數(shù)據(jù)描述子對(duì)應(yīng)的數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)送給數(shù)據(jù)處理模塊1以后,發(fā)現(xiàn)配置RAM存儲(chǔ)器中的PENDST的次高位和最低為都為“0”,表示該通道的已經(jīng)沒(méi)有待發(fā)送包鏈的數(shù)據(jù)等待發(fā)送的了,則將配置RAM存儲(chǔ)器中的PENDST清零,表示該通道所有待發(fā)送包鏈的數(shù)據(jù)都已被發(fā)送完畢,且將配置RAM存儲(chǔ)器中的Length Left清零;8、發(fā)送DMA模塊22按照上面步驟1至步驟7所示的將各通道的待發(fā)送數(shù)據(jù)送給數(shù)據(jù)處理模塊1處理,在向數(shù)據(jù)處理模塊1送完一個(gè)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)后,根據(jù)配置RAM存儲(chǔ)器中CPU設(shè)置的DQS值判斷是否需要生成一個(gè)完成隊(duì)列描述子;9、如果DQS的值為“1”,發(fā)送DMA模塊22用指向該數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子的包數(shù)據(jù)描述子指針,以及在發(fā)送數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)過(guò)程中記錄的狀態(tài)生成一個(gè)發(fā)送完成隊(duì)列描述子寫入DONE_FIFO存儲(chǔ)器中;10、如果DQS的值為“0”,發(fā)送DMA模塊22用配置RAM存儲(chǔ)器中的Start Descriptor Pointer和在發(fā)送數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)過(guò)程中記錄的狀態(tài)生成一個(gè)發(fā)送完成隊(duì)列描述子寫入DONE_FIFO存儲(chǔ)器;11、發(fā)送DMA模塊22在DONE_FIFO存儲(chǔ)器里有了一定數(shù)目的發(fā)送完成隊(duì)列描述子時(shí),根據(jù)其內(nèi)部實(shí)時(shí)調(diào)整的寫發(fā)送完成隊(duì)列指針將DONE_FIFO存儲(chǔ)器里的發(fā)送完成隊(duì)列描述子按順序?qū)懭胫鞔嬷械陌l(fā)送完成隊(duì)列存放發(fā)送完成隊(duì)列描述子的緩存空間,通知CPU各通道的哪些數(shù)據(jù)已經(jīng)被發(fā)送了。
權(quán)利要求
1.一種多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng),其特征在于它包括直接訪問(wèn)處理模塊,該直接訪問(wèn)處理模塊包括接收DMA模塊(21)和發(fā)送DMA模塊(22);在接收DMA模塊(21)中具有FREE FIFO存儲(chǔ)器、DONE_FIFO存儲(chǔ)器和配置RAM存儲(chǔ)器,以及用于訪問(wèn)控制的控制邏輯,F(xiàn)REE_FIFO存儲(chǔ)器用于存放空閑隊(duì)列描述子(Free QueueDescriptor),DONE_FIFO存儲(chǔ)器用于存放完成隊(duì)列描述子(DoneQueue Descriptor);在發(fā)送DMA模塊(22)中具有PENDING_FIFO存儲(chǔ)器、DONE_FIFO存儲(chǔ)器和配置RAM存儲(chǔ)器,以及用于訪問(wèn)控制的控制邏輯,PENDING_FIFO存儲(chǔ)器用于存放待發(fā)送隊(duì)列描述子,DONE_FIFO存儲(chǔ)器用于存放發(fā)送完成隊(duì)列描述子。
2.根據(jù)權(quán)利要求1所述的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng),其特征在于所述的接收DMA模塊(21)中配置用于存放空閑隊(duì)列描述子的數(shù)據(jù)FIFO存儲(chǔ)器。
3.一種用于權(quán)利要求1所述的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng)的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)方法,其特征在于在接收數(shù)據(jù)時(shí),各通道的數(shù)據(jù)經(jīng)數(shù)據(jù)處理模塊(1)的正常處理后,包數(shù)據(jù)發(fā)至接收DMA模塊(21);接收DMA模塊(21)根據(jù)空閑隊(duì)列描述子(Free Queue Descriptor)提供的片外主存中的空閑數(shù)據(jù)緩存區(qū)地址以及最后用于描述該緩存區(qū)的信息的包數(shù)據(jù)描述子在片外主存中的位置經(jīng)總線接口模塊(3),通過(guò)片外總線將數(shù)據(jù)存入片外主存;在發(fā)送數(shù)據(jù)時(shí),待發(fā)送包鏈的數(shù)據(jù)經(jīng)片外總線通過(guò)總線接口模塊(3),在發(fā)送DMA模塊(22)產(chǎn)生發(fā)送完成隊(duì)列描述子,CPU將需要發(fā)送的數(shù)據(jù)通過(guò)待發(fā)送包描述子和待發(fā)送隊(duì)列描述子的形式寫到片外主存中的待發(fā)送包數(shù)據(jù)描述子隊(duì)列和待發(fā)送隊(duì)列中,更新發(fā)送DMA模塊(22)中的待發(fā)送隊(duì)列描述子的指針,發(fā)送DMA模塊(22)根據(jù)待發(fā)送隊(duì)列描述子及待發(fā)送包數(shù)據(jù)描述子的信息,修改待發(fā)送包數(shù)據(jù)描述子和配置RAM的信息,將CPU要發(fā)送的待發(fā)送包數(shù)據(jù)串鏈起來(lái),從數(shù)據(jù)處理模塊(1)傳至相應(yīng)的通道。
4.根據(jù)權(quán)利要求3所述的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)方法,其特征在于所述的包數(shù)據(jù)描述子的數(shù)據(jù)結(jié)構(gòu)包括Data Buffer Address數(shù)據(jù)緩存區(qū)的起始地址;Next Descriptor Pointer數(shù)據(jù)包下一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針;Length該數(shù)據(jù)緩存區(qū)的數(shù)據(jù)長(zhǎng)度;Buffer Status數(shù)據(jù)緩存區(qū)狀態(tài),用以表示該數(shù)據(jù)緩存區(qū)里填的數(shù)據(jù)是該數(shù)據(jù)包的開(kāi)始部分還是中間部分,或者最后部分;Channel通道號(hào),數(shù)據(jù)屬于哪個(gè)通道;
5.根據(jù)權(quán)利要求3所述的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)方法,其特征在于1)所述的接收DMA模塊(21)使用完成隊(duì)列描述子(Done QueueDescriptor)反映接收DMA模塊(21)將數(shù)據(jù)填到空閑數(shù)據(jù)緩存區(qū)后,CPU處理時(shí)需要用到的已經(jīng)填到主存里的完整的或非完整的數(shù)據(jù)包的信息;2)接收DMA模塊(21)中的配置RAM存儲(chǔ)器按通道分塊,用于存放接收DMA模塊(21)在從數(shù)據(jù)處理模塊(1)接收各通道數(shù)據(jù)過(guò)程中根據(jù)控制邏輯產(chǎn)生的有關(guān)包數(shù)據(jù)描述子等各種信息;3)接收DMA模塊(21)在數(shù)據(jù)包長(zhǎng)度超過(guò)一個(gè)數(shù)據(jù)緩存區(qū)的容量時(shí),通過(guò)包數(shù)據(jù)描述子和完成隊(duì)列描述子的信息,將多個(gè)數(shù)據(jù)緩存區(qū)鏈接起來(lái)存放一個(gè)完整的數(shù)據(jù)包;4)接收DMA模塊(21)通過(guò)中斷告訴CPU有數(shù)據(jù)可以處理,CPU通過(guò)接收完成隊(duì)列描述子中的第一個(gè)數(shù)據(jù)緩沖區(qū)的包數(shù)據(jù)描述子指針,找到第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子,根據(jù)其中的數(shù)據(jù)緩存區(qū)開(kāi)始地址找到第一個(gè)數(shù)據(jù)緩存區(qū),處理完第一個(gè)數(shù)據(jù)緩存區(qū)的數(shù)據(jù)后,根據(jù)第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子中的信息找到第二個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子……依此類推,直至將該數(shù)據(jù)包或要處理的數(shù)據(jù)全部處理完畢。
6.根據(jù)權(quán)利要求3所述的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)方法,其特征在于1)所述的發(fā)送DMA模塊(22)接收到CPU的信息,通知某個(gè)通道的一個(gè)待發(fā)送包鏈,發(fā)送DMA模塊(22)存放待發(fā)送隊(duì)列描述子,待發(fā)送隊(duì)列描述子反映待發(fā)送包鏈的第一個(gè)數(shù)據(jù)緩存區(qū)對(duì)應(yīng)的包數(shù)據(jù)描述子及該待發(fā)送包鏈屬于哪個(gè)通道,待發(fā)送隊(duì)列描述子對(duì)應(yīng)相應(yīng)的待發(fā)包數(shù)據(jù)描述子;2)待發(fā)送包鏈的數(shù)據(jù)經(jīng)片外總線通過(guò)總線接口模塊(3),由發(fā)送DMA模塊(22)根據(jù)相應(yīng)的控制邏輯產(chǎn)生發(fā)送完成隊(duì)列描述子,存放到內(nèi)部的DONE_FIFO存儲(chǔ)器中;3)CPU將需要發(fā)送的數(shù)據(jù)通過(guò)待發(fā)送包描述子和待發(fā)送隊(duì)列描述子的形式寫到片外主存中的待發(fā)送包數(shù)據(jù)描述子隊(duì)列和待發(fā)送隊(duì)列中,更新發(fā)送DMA模塊(22)中的待發(fā)送隊(duì)列描述子的指針,發(fā)送DMA模塊(22)讀取待發(fā)送隊(duì)列描述子;發(fā)送DMA模塊(22)根據(jù)待發(fā)送隊(duì)列描述子及待發(fā)送包數(shù)據(jù)描述子的信息,修改待發(fā)送包數(shù)據(jù)描述子和配置RAM的信息,將CPU要發(fā)送的待發(fā)送包數(shù)據(jù)串鏈起來(lái),根據(jù)待發(fā)送包數(shù)據(jù)所屬通道的包數(shù)據(jù)發(fā)送情況,產(chǎn)生正確的狀態(tài)信息放在配置RAM中,同時(shí)響應(yīng)數(shù)據(jù)模塊申請(qǐng)包數(shù)據(jù)的請(qǐng)求,從數(shù)據(jù)處理模塊(1)傳至相應(yīng)的通道。
7.根據(jù)權(quán)利要求6所述的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)方法,其特征在于所述的數(shù)據(jù)處理模塊(1)向發(fā)送DMA模塊(22)申請(qǐng)某個(gè)通道的數(shù)據(jù)時(shí),發(fā)送DMA模塊(22)根據(jù)數(shù)據(jù)處理模塊(1)送過(guò)來(lái)的通道號(hào)從配置RAM存儲(chǔ)器中讀出數(shù)據(jù)處理模塊(1)想要申請(qǐng)的通道的信息,從主存中讀出相應(yīng)的待發(fā)包數(shù)據(jù)描述子,根據(jù)其中的信息從主存中的數(shù)據(jù)緩沖區(qū)讀出數(shù)據(jù)送給數(shù)據(jù)處理模塊(1),遞減當(dāng)前數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量。
8.根據(jù)權(quán)利要求7所述的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)方法,其特征在于所述的數(shù)據(jù)處理模塊(1)如果還未等發(fā)送DMA模塊(22)將當(dāng)前正在讀的數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)全部讀出送給數(shù)據(jù)處理模塊(1)就因?yàn)閮?nèi)部原因而停止接收數(shù)據(jù),要求停止當(dāng)前傳送,發(fā)送DMA模塊(22)停止從數(shù)據(jù)緩存區(qū)讀數(shù)據(jù),將當(dāng)前讀數(shù)據(jù)緩沖區(qū)地址寫到配置RAM存儲(chǔ)器該通道部分的相應(yīng)信息中;待數(shù)據(jù)處理模塊(1)在其有能力接收該通道的數(shù)據(jù)的時(shí)候,向發(fā)送DMA模塊(22)申請(qǐng)?jiān)撏ǖ赖臄?shù)據(jù),發(fā)送DMA模塊(22)從配置RAM存儲(chǔ)器讀出該通道的信息,發(fā)現(xiàn)向數(shù)據(jù)緩沖區(qū)讀數(shù)據(jù)送給數(shù)據(jù)處理模塊(1)、遞減數(shù)據(jù)緩沖區(qū)的剩余數(shù)據(jù)量。
9.根據(jù)權(quán)利要求5所述的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)方法,其特征在于1)、所述的接收DMA模塊(21)中,完成隊(duì)列描述子(Done QueueDescriptor)主要包括需要處理的數(shù)據(jù)包或數(shù)據(jù)屬于那個(gè)通道、需要處理的數(shù)據(jù)包或數(shù)據(jù)占了幾個(gè)數(shù)據(jù)緩存區(qū)、需要處理的數(shù)據(jù)包或數(shù)據(jù)所占用的幾個(gè)數(shù)據(jù)緩存區(qū)的第一個(gè)緩存區(qū)所對(duì)應(yīng)的包數(shù)據(jù)描述子指針、需要處理的數(shù)據(jù)是否一個(gè)完整的數(shù)據(jù)包;其數(shù)據(jù)結(jié)構(gòu)包括Descriptor Pointer指向數(shù)據(jù)包或則包數(shù)據(jù)所占的第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子的指針;Channel數(shù)據(jù)屬于哪個(gè)通道;Buffers等待CPU處理的數(shù)據(jù)包或數(shù)據(jù)占用了幾個(gè)數(shù)據(jù)緩存區(qū);Packet Status包數(shù)據(jù)狀態(tài),記錄在接收過(guò)程中發(fā)生錯(cuò)誤的類型;EOF包結(jié)束符,表示一個(gè)數(shù)據(jù)包已結(jié)束;2)、在接收DMA模塊(21)中,配置RAM存儲(chǔ)器按通道分塊,用于存放接收DAM在從數(shù)據(jù)處理模塊(1)接收各通道數(shù)據(jù)過(guò)程中產(chǎn)生的一些中間信息,以及CPU對(duì)各通道的配置信息,其數(shù)據(jù)結(jié)構(gòu)包括Current Data Buufer Address數(shù)據(jù)緩存區(qū)當(dāng)前地址,由接收DMA模塊(21)寫入;Current Descriptor Pointer當(dāng)前數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針,由接收DMA模塊(21)寫入;Start Descriptor PointerCPU要處理數(shù)據(jù)的第一個(gè)數(shù)據(jù)緩存區(qū)的包數(shù)據(jù)描述子指針,由接收DMA模塊(21)寫入;Threshold控制接收DMA模塊(21)在填了幾個(gè)數(shù)據(jù)緩存區(qū)后生成一個(gè)接收完成隊(duì)列描述子,由CPU寫入;Data Number數(shù)據(jù)緩存區(qū)的數(shù)據(jù)量,由接收DMA模塊(21)寫入,CPU初始化時(shí)置零;Threshold Count當(dāng)前數(shù)據(jù)包所占用的實(shí)際數(shù)據(jù)緩存區(qū)數(shù);,由接收DMA模塊(21)寫入,CPU初始化時(shí)置零;Buffer Size該通道數(shù)據(jù)緩存區(qū)的大小,由CPU寫入;3)、接收DMA模塊(21)在數(shù)據(jù)包長(zhǎng)度超過(guò)一個(gè)數(shù)據(jù)緩存區(qū)的容量時(shí),通過(guò)Next Descriptor Pointer和EOF位,將多個(gè)數(shù)據(jù)緩存區(qū)鏈接起來(lái)存放一個(gè)完整的數(shù)據(jù)包。
10.根據(jù)權(quán)利要求3或5或9所述的多通道數(shù)據(jù)直接內(nèi)存訪問(wèn)方法,其特征在于所述的接收DMA模塊(21)中配置數(shù)據(jù)FIFO存儲(chǔ)器,在FREE_FIFO存儲(chǔ)器中的空閑隊(duì)列描述子數(shù)目少于某個(gè)設(shè)定的門限時(shí),根據(jù)其內(nèi)部實(shí)時(shí)調(diào)整的讀空閑隊(duì)列指針通過(guò)總線接口控制模塊從片外主存中的空閑隊(duì)列存放空閑隊(duì)列描述子的緩存區(qū),讀取足夠多的空閑隊(duì)列描述子將FREE_FIFO存儲(chǔ)器填滿;接收DMA模塊(21)接到數(shù)據(jù)處理模塊(1)向接收DMA模塊(21)的請(qǐng)求,一邊從數(shù)據(jù)處理模塊(1)接收數(shù)據(jù)填到數(shù)據(jù)FIFO存儲(chǔ)器中,同時(shí)從配置RAM存儲(chǔ)器中將該通道的信息讀出。
全文摘要
一種涉及數(shù)字信息傳輸?shù)亩嗤ǖ罃?shù)據(jù)直接內(nèi)存訪問(wèn)系統(tǒng)和方法,本發(fā)明利用空閑隊(duì)列描述子、完成隊(duì)列描述子等數(shù)據(jù)結(jié)構(gòu)信息,用一個(gè)接收DMA模塊不連續(xù)地接收各通道的數(shù)據(jù),在FREE_FIFO存儲(chǔ)器中的空閑隊(duì)列描述子數(shù)目少于某個(gè)設(shè)定的門限時(shí),根據(jù)其內(nèi)部實(shí)時(shí)調(diào)整的讀空閑隊(duì)列指針通過(guò)總線接口控制模塊從片外主存中的空閑隊(duì)列;在發(fā)送DMA模塊中,利用待發(fā)送隊(duì)列描述子、發(fā)送完成隊(duì)列描述子、配置RAM、待發(fā)包數(shù)據(jù)描述子的數(shù)據(jù)結(jié)構(gòu)信息用一個(gè)發(fā)送DMA模塊不連續(xù)地發(fā)送多通道數(shù)據(jù),將各通道在主存中的連續(xù)數(shù)據(jù)正確發(fā)送到各通道,經(jīng)濟(jì)、智能、高效地處理芯片內(nèi)部和片外主存之間多通道數(shù)據(jù)的不連續(xù)數(shù)據(jù)搬移。
文檔編號(hào)H04L29/02GK1474568SQ02128709
公開(kāi)日2004年2月11日 申請(qǐng)日期2002年8月6日 優(yōu)先權(quán)日2002年8月6日
發(fā)明者胡骎, 程明強(qiáng), 胡 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
通渭县| 南江县| 依兰县| 松江区| 铁力市| 白城市| 类乌齐县| 汶川县| 红安县| 临猗县| 澳门| 简阳市| 武鸣县| 昭觉县| 和平县| 固阳县| 宁蒗| 邻水| 调兵山市| 滦南县| 连平县| 饶河县| 罗甸县| 大洼县| 安远县| 楚雄市| 泗阳县| 重庆市| 抚顺县| 叙永县| 高要市| 中西区| 根河市| 内黄县| 凤凰县| 榕江县| 桓仁| 比如县| 安塞县| 札达县| 南汇区|