專利名稱::一種點(diǎn)到多點(diǎn)數(shù)據(jù)分配dma控制器實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及把數(shù)據(jù)從一個(gè)源端口向多個(gè)目標(biāo)端口同步轉(zhuǎn)發(fā)和定制的實(shí)現(xiàn)方法,適用于需要實(shí)時(shí)傳輸過程量采集數(shù)據(jù)的電力系統(tǒng)繼電保護(hù)領(lǐng)域和實(shí)時(shí)工業(yè)過程控制領(lǐng)域,以及在其他需要共享數(shù)據(jù)源并對(duì)點(diǎn)到多點(diǎn)的數(shù)據(jù)分配的響應(yīng)速度有嚴(yán)格要求的場(chǎng)合,如在千兆以太網(wǎng)數(shù)據(jù)交換設(shè)備中實(shí)現(xiàn)數(shù)據(jù)多點(diǎn)轉(zhuǎn)發(fā)和定制的應(yīng)用等。具體地說,本發(fā)明涉及一種點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA(直接存儲(chǔ)存取方式)控制器的實(shí)現(xiàn)方法。二、
背景技術(shù):
在實(shí)時(shí)數(shù)據(jù)分配系統(tǒng)設(shè)計(jì)時(shí),為了有效共享數(shù)據(jù)和系統(tǒng)提高響應(yīng)速度,需要將同一個(gè)數(shù)據(jù)源按不同應(yīng)用要求同歩轉(zhuǎn)發(fā)到不同應(yīng)用接口同時(shí)完成數(shù)據(jù)定制。目前現(xiàn)有的點(diǎn)到多點(diǎn)的數(shù)據(jù)分配方法主要包括以下兩種方法1.為每個(gè)定制的應(yīng)用設(shè)計(jì)一個(gè)查找表,利用MCU將數(shù)據(jù)源讀出,按照各個(gè)查找表對(duì)數(shù)據(jù)的定制要求,確定是否轉(zhuǎn)發(fā)數(shù)據(jù)元素到該應(yīng)用。2.利用SGDMA(scatter-gatherDMA)或鏈表式DMA依次將一個(gè)數(shù)據(jù)源重復(fù)復(fù)制到不同的應(yīng)用接口。目前現(xiàn)有的點(diǎn)到多點(diǎn)的數(shù)據(jù)分發(fā)方法的不足之處1.MCU在處理數(shù)據(jù)搬移時(shí)由于要執(zhí)行大量的循環(huán)操作和査表及比較操作,效率比較低,而且利用MCU處理數(shù)據(jù)分配任務(wù)時(shí)不能保證多個(gè)應(yīng)用接口并發(fā)處理,只能串行處理。為了滿足實(shí)時(shí)性,需要MCU具有很高的主頻和帶寬,增加主頻和帶寬意味著增加系統(tǒng)成本。2.SGDMA或鏈表式DMA可以實(shí)現(xiàn)從一個(gè)源到多個(gè)目標(biāo)的簡(jiǎn)單數(shù)據(jù)分配,但不能對(duì)特定的數(shù)據(jù)元素進(jìn)行屏蔽和篩選,而且其數(shù)據(jù)分配策略是從一個(gè)端口到另一個(gè)端口串行進(jìn)行的,不能保證數(shù)據(jù)向多個(gè)應(yīng)用同步寫入。參考文獻(xiàn)l.謝俊趙峰實(shí)時(shí)圖像處理系統(tǒng)中DMA控制器的設(shè)計(jì)和驗(yàn)證電子技術(shù)應(yīng)用2007年第l期2.唐威劉佑寶,劉軍華.DMA控制器件的設(shè)計(jì)和仿真.微電子學(xué)和計(jì)算機(jī),2002,(12).3.柳利軍周敏鋒千兆以太網(wǎng)交換芯片DMA單元的FPGA實(shí)現(xiàn)光通信技術(shù)2006,(5)4.蔡菲娜曹祁利用FPGA實(shí)現(xiàn)DMA方式的高速數(shù)據(jù)采集微電子學(xué)與計(jì)算機(jī)2005.3.5.劉煌峰高雪蓮一種多通道DMA控制器的IP核設(shè)計(jì)中國電力教育20076.AlteracorporationScatter-GatherDMAControllerCoreQuartusIIhandbook,volume5may2007三、
發(fā)明內(nèi)容本發(fā)明目的是提出一種由一個(gè)數(shù)據(jù)源向多個(gè)應(yīng)用接口迸行實(shí)時(shí)分配的方法。本發(fā)明是通過這樣方案實(shí)現(xiàn)的(1)構(gòu)建一個(gè)DMA讀端口,從外部數(shù)據(jù)空間讀入數(shù)據(jù)到DMA內(nèi)部緩沖器,該讀端口包含一個(gè)描述符表,通過配置DMA讀端口的描述符,實(shí)現(xiàn)多次DMA讀傳輸過程(每次DMA傳輸包含多個(gè)外部存儲(chǔ)器的讀時(shí)序,數(shù)量由描述符確定)。(2)構(gòu)建多個(gè)DMA寫端口,使每個(gè)寫端口對(duì)應(yīng)于一個(gè)應(yīng)用接口,DMA寫端口負(fù)責(zé)將DMA控制器的內(nèi)部緩沖器的數(shù)據(jù)寫入到各自的應(yīng)用接口,每個(gè)寫端口包含一個(gè)獨(dú)立的描述符表。(3)通過為DMA寫端口配置不同描述符,控制寫端口的目標(biāo)地址增加方式和屏蔽對(duì)特定地址寫操作實(shí)現(xiàn)數(shù)據(jù)定制。(4)構(gòu)建一個(gè)狀態(tài)機(jī)統(tǒng)一控制DMA控制器的讀端口描述符和各個(gè)寫端口描述符的加載及DMA的啟動(dòng)和停止,在讀端口讀周期結(jié)束后立即啟動(dòng)所有寫端口的總線寫周期,根據(jù)寫端口描述符產(chǎn)生相應(yīng)的外部寫時(shí)序,實(shí)現(xiàn)點(diǎn)到多點(diǎn)的數(shù)據(jù)同歩轉(zhuǎn)發(fā)。點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器實(shí)現(xiàn)方法適合需要將一個(gè)數(shù)據(jù)源高速同步并且可定制地分配到多個(gè)應(yīng)用接口的場(chǎng)合。本發(fā)明的特點(diǎn)(1).具有一個(gè)讀端口和多個(gè)寫端口,所有的寫端口共享數(shù)據(jù)總線,簡(jiǎn)化設(shè)計(jì)邏輯,通過描述符控制某個(gè)寫端口屏蔽對(duì)特定地址的寫操作,實(shí)現(xiàn)數(shù)據(jù)元素按應(yīng)用要求定制并同步寫入到多個(gè)不同的應(yīng)用端口;(2).利用同一個(gè)狀態(tài)機(jī)控制DMA讀端口和所有的寫端口的接口啟停和傳輸過程,狀態(tài)機(jī)設(shè)計(jì)簡(jiǎn)單;(3).讀寫端口的描述符表分開采用不同的描述符表指針,但所有的描述符表指針都由一個(gè)統(tǒng)一的描述符表地址計(jì)數(shù)器生成,具有嚴(yán)格的相關(guān)性,保證讀寫端口之間描述符讀取同步;(4).DMA讀寫端口配置同時(shí)從各自的描述符表讀取配置,DMA描述符執(zhí)行速度快。(5).通過對(duì)寫端口描述符的配置實(shí)現(xiàn)應(yīng)用接口對(duì)數(shù)據(jù)元素的定制,而且多個(gè)寫端口并發(fā)工作,數(shù)據(jù)吞吐量大。(6).DMA描述符采用簡(jiǎn)單數(shù)組式描述符表構(gòu)成鏈?zhǔn)紻MA,可以用簡(jiǎn)單邏輯控制描述符加載,每個(gè)描述符定義一次數(shù)據(jù)傳輸,DMA—次傳輸結(jié)束后自動(dòng)讀取下一個(gè)描述符并重新配置DMA的讀寫端口進(jìn)行新的傳輸,當(dāng)描述符為O時(shí)結(jié)束整個(gè)DMA傳輸.四圖l是本發(fā)明點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器系統(tǒng)框圖圖2是本發(fā)明點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器的狀態(tài)變遷圖五具體實(shí)施方式3.1.點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器構(gòu)成點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器如圖1所示,DMA控制器由一個(gè)讀端口和多個(gè)寫端口構(gòu)成,每個(gè)控制端口關(guān)聯(lián)一個(gè)DMA描述符表。整個(gè)控制器由一個(gè)狀態(tài)機(jī)控制,在啟動(dòng)信號(hào)DMA—START的控制下描述符讀取和數(shù)據(jù)傳輸過程。由讀端口根據(jù)描述符配置依次從外部接口讀入數(shù)據(jù)元素至內(nèi)部DMA緩沖,寫端口總線周期由讀端口同歩啟動(dòng),各個(gè)寫端口根據(jù)描述符把數(shù)據(jù)元素寫入對(duì)應(yīng)的接口。3.2.讀端口及描述符表實(shí)現(xiàn)點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器的讀端口由讀端口狀態(tài)機(jī)根據(jù)讀描述符控制數(shù)據(jù)傳輸,每個(gè)描述符由32位組〈D31,….D0〉數(shù)據(jù)構(gòu)成,描述符表結(jié)構(gòu)如下所示<D31,…,D16〉讀端口源地址DMA—SAddr〈D15,D14,D13,D12〉一讀端口地址增長(zhǎng)方式,〈0000〉-允許每個(gè)總線讀周期自增源地址〈0001〉-固定地址讀模式〈0010〉到<1111〉-未定義〈Dll,…,DO〉一次傳輸數(shù)據(jù)長(zhǎng)度DMA—LEN3.3.DMA寫端口及描述符表實(shí)現(xiàn)點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器的寫端口由狀態(tài)機(jī)根據(jù)寫描述符控制,每個(gè)描述符由32位組〈D31,DO〉數(shù)據(jù)構(gòu)成,描述符表結(jié)構(gòu)如下所示<D31,,D16〉寫端口目標(biāo)地址DMA—DAddr〈D15,D14〉寫端口地址增長(zhǎng)方式,定義如下,〈00〉固定地址寫模式〈01〉每次總線寫周期都自增目標(biāo)地址〈10〉:根據(jù)隨后的寫掩碼精確控制,允許總線寫時(shí)自增目標(biāo)地址〈11〉:每個(gè)總線寫周期自增目標(biāo)地址,但由隨后的寫掩碼控制是否產(chǎn)生寫時(shí)序<D13,…,DO〉寫端口掩碼,每一位對(duì)應(yīng)一次寫操作,0:本次寫將被忽略,不產(chǎn)生寫操作1:本次寫傳輸產(chǎn)生總線寫時(shí)序由于本實(shí)現(xiàn)使用14位的掩碼對(duì)應(yīng)14個(gè)寫操作,所以如果要對(duì)寫端口的數(shù)據(jù)進(jìn)行定制,則一次傳輸不能超過十四個(gè)數(shù)據(jù)元素,可以通過增加描述符的數(shù)量或增加寫端口描述符的寬度實(shí)現(xiàn)對(duì)更多數(shù)據(jù)元素的定制。3.4.DMA控制器的狀態(tài)變遷圖,如圖2所示本發(fā)明采用圖2所示的狀態(tài)機(jī)來控制DMA的描述符讀和數(shù)據(jù)傳輸過程。狀態(tài)變遷圖的各個(gè)狀態(tài)描述如下DMAJDLE:空閑狀態(tài),系統(tǒng)上電或復(fù)位狀態(tài),描述符表指針指向描述符表入口,在DMA控制器接收到啟動(dòng)信號(hào)DMA一START后轉(zhuǎn)入畫A一READj:ONFIG狀態(tài),讀取描述符;DMA—DONE:DMA完成數(shù)據(jù)傳輸后狀態(tài),描述符表指針指向描述符表入口,在接收到啟動(dòng)信號(hào)DMA—START后轉(zhuǎn)入DMA一READ—CONFIG狀態(tài),讀取描述符;DMA一READ一CONFIG:描述符讀狀態(tài),DMA控制器從配置存儲(chǔ)空間分別為讀端口和各個(gè)寫端口讀取描述符,隨后自加描述表指針,使其指向下一個(gè)描述符,并轉(zhuǎn)入狀態(tài)DMA—PRE—TRANSFER配置讀寫端口;DMA—PRE—TRANSFER:DMA配置狀態(tài),配置完成后轉(zhuǎn)入DMA—DATA—TRANSFER;DMA—DATA—TRANSFER:DMA數(shù)據(jù)傳輸狀態(tài),在此狀態(tài),DMA讀端口從外部總線讀入一個(gè)數(shù)據(jù)元素,存入DMA緩沖器,隨后DMA寫端口啟動(dòng)外部寫周期,將DMA緩沖器中的數(shù)據(jù)按照寫端口的配置寫入相應(yīng)接口,或者忽略某個(gè)寫端口的寫操作(由寫端口描述符確定)。3.6.讀寫端口之間同步本發(fā)明為讀端口和每個(gè)寫端口都設(shè)計(jì)了配置存儲(chǔ)空間,它們共享同一個(gè)描述符表地址計(jì)數(shù)器,由同一個(gè)狀態(tài)機(jī)控制讀端口和寫端口,當(dāng)DMA控制器處于DMA一READJX)NFIG狀態(tài)時(shí),讀寫端口根據(jù)同一個(gè)描述符表地址計(jì)數(shù)器,生成各自的描述符表指針,同時(shí)讀取描述符。每個(gè)DMA傳輸周期中傳輸?shù)臄?shù)據(jù)元素多少由讀端口描述符控制,描述符表地址計(jì)數(shù)器在DMA一START信號(hào)控制下回歸到表首,每個(gè)讀端口的讀周期在所有寫端口都將產(chǎn)生一個(gè)寫周期,但是否產(chǎn)生外部寫時(shí)序由寫端口的描述符控制,從而實(shí)現(xiàn)讀寫端口之間的同歩和數(shù)據(jù)定制。實(shí)現(xiàn)時(shí)可以根據(jù)讀寫端口的速率和位寬,分別增加讀寫端口等待周期,并按實(shí)際流量要求配置函A內(nèi)部緩沖器。3.7.數(shù)據(jù)定制的實(shí)現(xiàn)本發(fā)明通過對(duì)寫端口的描述符進(jìn)行配置實(shí)現(xiàn)數(shù)據(jù)定制,具體實(shí)現(xiàn)方法如下3.7.1.實(shí)現(xiàn)數(shù)據(jù)分配若應(yīng)用不需要定制數(shù)據(jù),只是簡(jiǎn)單地將源數(shù)據(jù)復(fù)制到多個(gè)目標(biāo),則根據(jù)源和目標(biāo)接口的性質(zhì),確定讀寫端口的地址和地址增長(zhǎng)方式以及傳輸長(zhǎng)度,接口為FIFO模式時(shí)采用固定地址模式,接口為Memory模式時(shí)采用地址自增模式,實(shí)際使用時(shí)可以根據(jù)應(yīng)用要求設(shè)計(jì)不同的地址增長(zhǎng)模式。DMA—次數(shù)據(jù)傳輸長(zhǎng)度由讀端口確定。3.7.2.實(shí)現(xiàn)數(shù)據(jù)定制根據(jù)源端口的外設(shè)性質(zhì),確定讀端口的地址增長(zhǎng)模式,參見3.7.1。對(duì)寫端口按應(yīng)用要求配置描述符數(shù)組.例如需要將源端口的數(shù)據(jù)按表l的方式寫入目標(biāo)端口0和目標(biāo)端口l表1數(shù)據(jù)定制表<table>tableseeoriginaldocumentpage6</column></row><table>表1定義了一次DMA數(shù)據(jù)定制傳輸過程,第一行為源端口地址偏移和源數(shù)據(jù)讀取順序,通過DMA讀端口描述符定義本次傳輸?shù)淖x地址和長(zhǎng)度。第二行定義數(shù)據(jù)向端口O傳輸方式,將數(shù)據(jù)依次復(fù)制。第三行定義了數(shù)據(jù)向目標(biāo)端口l的傳輸方式,傳輸中,丟棄了數(shù)據(jù)元素^、《、A并將隨后的數(shù)據(jù)依次向前移動(dòng),則對(duì)本次傳輸定義讀端口的描述符和寫端口O及寫端口l的描述符如下-讀端口<D31,…,D16〉讀端口源地址,假設(shè)為OlOOh<D15,D14,D13,D12〉一讀端口地址增長(zhǎng)方式,為<0000>〈Dll,…,D0〉一次傳輸數(shù)據(jù)長(zhǎng)度,為OEh則讀端口本次傳輸?shù)拿枋龇麨?100OOOEH(十六進(jìn)制)寫端口0:<D31,,D16〉寫端口目標(biāo)地址,假設(shè)為0200h〈D15,D14〉寫端口地址增長(zhǎng)方式,為<01〉〈D13,…,D0〉寫端口掩碼,由于傳輸所有數(shù)據(jù),為,3FFFh則寫端口0本次傳輸?shù)拿枋龇麨?2007FFFh寫端口1:<D31,…,D16>:寫端口目標(biāo)地址,假設(shè)為:0300h〈D15,D14〉寫端口地址增長(zhǎng)方式,為<10〉<D13,…,D0〉寫端口掩碼,由于忽略4、《、^,則為3FC7h則寫端口l本次傳輸?shù)拿枋龇麨?300BFC7h(十六進(jìn)制)用類似的方法,確定其他傳輸?shù)淖x寫端口的描述符,并用一個(gè)為O的描述符放在描述表的最后,表示整個(gè)傳輸結(jié)束,將這些描述符分別寫入讀端口和各個(gè)寫端口的配置存儲(chǔ)空間,在啟動(dòng)信號(hào)DMA—START的啟動(dòng)下,DMA控制器將完成從一個(gè)源到多個(gè)目標(biāo)的數(shù)據(jù)分配任務(wù)。權(quán)利要求1、一種點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器實(shí)現(xiàn)方法,其特征是步驟如下(1)構(gòu)建一個(gè)DMA讀端口,從外部數(shù)據(jù)空間讀入數(shù)據(jù)到DMA內(nèi)部緩沖器,通過配置DMA讀端口的描述符,實(shí)現(xiàn)多次DMA讀傳輸過程,每次DMA傳輸可以包含多個(gè)外部存儲(chǔ)器的讀時(shí)序,數(shù)量由描述符確定;(2)構(gòu)建多個(gè)DMA寫端口,每個(gè)寫端口對(duì)應(yīng)于各自的應(yīng)用接口,數(shù)量由應(yīng)用確定;DMA寫端口將DMA控制器的內(nèi)部緩沖器的數(shù)據(jù)寫入到各自的應(yīng)用接口;(3)為DMA寫端口配置不同描述符,通過控制寫端口的目標(biāo)地址增加方式以及屏蔽對(duì)特定地址寫操作實(shí)現(xiàn)數(shù)據(jù)定制;(4)構(gòu)建一個(gè)狀態(tài)機(jī)統(tǒng)一控制DMA控制器的讀端口描述符和各個(gè)寫端口描述符的加載及DMA的啟動(dòng)和停止,在讀端口讀周期結(jié)束后立即啟動(dòng)所有寫端口的總線寫周期,根據(jù)寫端口描述符產(chǎn)生相應(yīng)的外部寫時(shí)序,實(shí)現(xiàn)點(diǎn)到多點(diǎn)的數(shù)據(jù)同步轉(zhuǎn)發(fā)。2、根據(jù)權(quán)利要求1所述的一種點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器實(shí)現(xiàn)方法,其特征是讀端口和每個(gè)寫端口具有獨(dú)立配置存儲(chǔ)空間,它們共享同一個(gè)描述符表地址計(jì)數(shù)器,由同一個(gè)狀態(tài)機(jī)控制讀端口和寫端口,當(dāng)DMA控制器處于描述符讀狀態(tài)DMA—READ一CONFIG時(shí),讀寫端口根據(jù)同一個(gè)描述符表地址計(jì)數(shù)器,生成各自的描述符表指針,同時(shí)讀取描述符。3、根據(jù)權(quán)利要求1所述的一種點(diǎn)到多點(diǎn)的數(shù)據(jù)分配匿A控制器實(shí)現(xiàn)方法,其特征是每個(gè)DMA傳輸周期中傳輸?shù)臄?shù)據(jù)元素多少由讀描述符控制,描述符表地址計(jì)數(shù)器在啟動(dòng)信號(hào)(DMA一START)控制下回歸到表首獲取第一個(gè)描述符并開始數(shù)據(jù)傳輸,當(dāng)讀描述符為零時(shí)結(jié)束DMA數(shù)據(jù)傳輸,讀端口的每個(gè)讀周期將在所有寫端口都將產(chǎn)生一個(gè)寫周期;4、根據(jù)權(quán)利要求1所述的一種點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器實(shí)現(xiàn)方法,其特征是通過寫端口的描述符中定義的寫掩碼屏蔽對(duì)特定目標(biāo)地址的數(shù)據(jù)寫和地址增長(zhǎng)方式,實(shí)現(xiàn)對(duì)寫端口數(shù)據(jù)的定制。全文摘要一種點(diǎn)到多點(diǎn)的數(shù)據(jù)分配DMA控制器實(shí)現(xiàn)方法,步驟如下(1)構(gòu)建一個(gè)DMA讀端口,從外部數(shù)據(jù)空間讀入數(shù)據(jù)到DMA內(nèi)部緩沖器,通過配置DMA讀端口的描述符,實(shí)現(xiàn)多次DMA讀傳輸過程;(2)構(gòu)建多個(gè)DMA寫端口,每個(gè)寫端口對(duì)應(yīng)于各自的應(yīng)用接口;(3)為DMA寫端口配置不同描述符,通過控制寫端口的目標(biāo)地址增加方式以及屏蔽對(duì)特定地址寫操作實(shí)現(xiàn)數(shù)據(jù)定制;(4)構(gòu)建一個(gè)狀態(tài)機(jī)統(tǒng)一控制DMA控制器的讀端口描述符和各個(gè)寫端口描述符的加載及DMA的啟動(dòng)和停止,在讀端口讀周期結(jié)束后立即啟動(dòng)所有寫端口的總線寫周期,根據(jù)寫端口描述符產(chǎn)生相應(yīng)的外部寫時(shí)序,實(shí)現(xiàn)點(diǎn)到多點(diǎn)的數(shù)據(jù)同步轉(zhuǎn)發(fā)。文檔編號(hào)G06F13/28GK101334761SQ20081012407公開日2008年12月31日申請(qǐng)日期2008年6月11日優(yōu)先權(quán)日2008年6月11日發(fā)明者龐吉耀申請(qǐng)人:南京磐能電力科技股份有限公司