專利名稱:一種直接存儲器訪問控制器及其控制方法
技術領域:
本發明涉及計算機技術中微處理器系統,尤其涉及信號、數據在存儲器、輸入/輸出設備或者中央處理器之間的傳送,具體的說,涉及直接存儲器訪問控制器DMA(Direct Memory Access)及其控制方法。
傳統的DMA控制器一般采用兩種傳輸方式。一種是直接方式,即CPU把一個DMA傳輸命令(包括源地址、目的地址、數據量、控制字)寫入DMA控制器的內部寄存器,DMA控制器根據這個DMA傳輸命令控制總線完成數據傳輸任務。另一種是鏈式方式,在鏈式方式下,CPU把DMA的命令描述符和DMA傳輸命令放在存儲器內,該命令描述符指明了對應DMA命令在存儲器中的地址、下一個命令描述符在存儲器中的地址以及控制信息。DMA控制器根據CPU寫入其內部寄存器中第一個命令描述符從存儲器中讀入傳輸命令和下一個描述符,開始數據傳輸。一個命令傳輸完成后,DMA控制器讀入新的傳輸命令和新的命令描述符,再執行新的傳輸命令;直到命令鏈上所有的傳輸命令執行完成為止,該過程結束。由上述兩種傳輸方式的比較可知,直接方式控制簡單,但是很難處理數據在非連續空間傳輸的情況,它中斷的次數比鏈式模式要多,從而增加了CPU的時間開銷;鏈式方式雖然方便處理多個命令的情況,但控制復雜,使用不方便。在高速數據傳輸過程中,為避免丟失數據,要求DMA控制器的命令間隔不能超過實際數據傳輸需要的最長時間間隔。在直接方式下,因為DMA控制器執行新的命令需要插入CPU中斷響應時間,所以在高速數據傳輸中容易丟失數據;而在鏈式模式下,雖然可以不插入CPU中斷響應時間,但仍然要從存儲器中讀取描述符和DMA命令,如果考慮到讀取存儲器的延時在高速傳輸中仍然面臨丟失數據的危險。
本發明的目的在于提出一種DMA控制器及其控制方法,能方便地處理數據在非連續空間傳輸的情況,并能避免在高速數據傳輸中丟失數據,既實現鏈式工作模式的功能,又簡化鏈式工作模式的設計復雜度。
本發明公開的一種直接存儲器訪問控制器DMA(Direct MemoryAccess),包括傳輸數據用的DBUS地址總線和數據總線,暫存數據FIFO單元,使DMA控制器可以作為從設備被CPU訪問的讀寫控制邏輯單元和控制DMA命令執行的控制執行部件;還包括可存放兩個以上命令的兩個以上命令寄存器組,每組命令寄存器包括控制寄存器CR、數據量寄存器WCR、目的地址寄存器DAR和源地址寄存器SAR;所述命令寄存器組順序相聯,且第一命令寄存器組與所述控制執行部件相聯,該控制執行部件與暫存數據的數據FIFO相聯,該控制執行部件及暫存數據的數據FIFO還連接所述數據總線;最后一個命令寄存器組與所述讀寫控制邏輯單元相聯,該讀寫控制邏輯單元的地址譯碼使CPU可以通過數據總線CBUS訪問每一個命令寄存器組。
本發明公開的一種直接存儲器訪問控制器DMA(Direct Memory Access)的控制方法,包括下述步驟①CPU把兩個以上包括源地址、目的地址、數據量和控制字的DMA傳輸命令分別寫入DMA控制器的兩個以上內部寄存器組;②DMA控制器接收到數據傳輸請求后,根據第一命令寄存器組中的DMA傳輸命令控制總線完成數據傳輸任務,并使第一命令寄存器組中數據量寄存器WCR0的值為0;③如果此時其它命令寄存器組非空即其相應數據量寄存器WCR1、WCR2、…有一個不為0,則控制執行部件發出一個命令前移信號并完成下述動作第二命令寄存器組中的命令前移到第一命令寄存器組中;第三命令寄存器組中的命令前移到第二命令寄存器組中,如此順序前移;④如果在命令前移時存在CPU寫最后一個命令寄存器組的請求,則該命令寄存器組接受CPU寫入的新值,否則該命令寄存器組裝入一個空命令即相應數據量寄存器WCR裝入0;⑤重復上述步驟①②③④,完成全部命令寄存器組中所有的數據傳輸,此時命令隊列為空,即各個數據量寄存器WCR全為0。
本發明由于采用命令隊列方式進行數據傳輸,把數據傳輸的DMA命令寫在DMA控制器里的多個寄存器組中,因此,可以方便的完成非連續空間的數據傳輸。同時由于多個DMA命令位于DMA控制器的命令隊列中,用戶設置命令時不必考慮鏈式模式中的描述符,也不必把DMA命令放在存儲器中,既簡化了設計復雜度,又提高了命令切換速度(只需一兩個時鐘周期就可以完成命令切換),避免了讀取命令延時導致的丟失數據的危險。本發明綜合了直接方式和鏈式方式兩方面的優點,控制簡單。
下面結合附圖對本發明作進一步詳細說明
圖1是DMA控制器工作原理示意圖。
圖2是DMA控制器命令隊列電路結構示意圖。
圖1中虛框內是本發明DMA控制器的命令隊列的一個例子,該命令隊列共可存放三個命令,圖2是命令隊列電路結構示意圖。三個DMA命令分別存放在103、104、105三組命令寄存器中。每組命令寄存器包括四個寄存器,即控制寄存器、數據量寄存器、目的地址寄存器、源地址寄存器。第一命令寄存器組103對應的四個寄存器是控制寄存器CR0 201、數據量寄存器WCR0 207、目的地址寄存器DAR0 212、源地址寄存器SAR0 219;第二命令寄存器組104對應的四個寄存器是控制寄存器CR1 203、數據量寄存器WCR1 209、目的地址寄存器DAR1 214、源地址寄存器SAR1 221;第三命令寄存器組105對應的四個寄存器是控制寄存器CR2 205、數據量寄存器WCR2 211、目的地址寄存器DAR2 216、源地址寄存器SAR2 223。經過讀寫控制邏輯單元106的地址譯碼,總線CBUS 109可以讀寫DMA控制器的命令隊列中的任一組命令寄存器。
DMA控制器根據命令隊列中的內容傳輸數據時可以通過DBUS數據總線107先把數據從源地址讀到DMA控制器暫存數據的數據FIFO 101中,然后再把數據FIFO 101中的數據通過地址總線DBUS 108發送到目的地址。如果DMA控制器指向的源設備和目的設備支持總線數據直接交換,則數據可以不通過FIFO中轉。
DMA控制器的控制執行部件102控制當前DMA命令(命令寄存器組103中存放的DMA命令)的執行,完成當前命令定義的數據傳輸。
DMA控制器通過數據總線DBUS 107、地址總線DBUS 108進行數據傳輸,并通過通道CBUS 109作為從設備被CPU訪問。DMA控制器進行數據傳輸的DBUS總線107、108和被CPU訪問的通道CBUS 109可以是同一條總線,也可以是兩條獨立的總線。兩者導致的性能差異是當DBUS和CBUS是同一條總線時,DMA控制器傳輸數據時不能接受CPU的訪問;而對于DBUS和CBUS不是同一條總線時,DMA控制器在傳輸數據時可以接受CPU的訪問,即當DMA控制器正在執行當前命令的時候,如果此時第三命令寄存器組105中命令已經被前移到104或103,CPU就可以向第三命令寄存器組105中寫入新命令,從而實現DMA控制器連續不斷的執行傳輸命令的功能。下文的描述假設DBUS和CBUS是兩條不同的總線。
命令隊列的工作過程如下控制執行部件102執行第一命令寄存器組103中的當前命令,完成后數據量寄存器WCR0為0,如果此時其它命令寄存器組104或105非空即數據量寄存器WCR1或WCR2不為0,則控制執行部件102發出一個命令前移信號。命令隊列接收到命令前移信號后,完成下述動作第二命令寄存器組104中的命令前移到第一命令寄存器組103中;第三命令寄存器組105中的命令前移到第二命令寄存器組104中;如果此時存在CPU寫第三命令寄存器組105的請求,則第三命令寄存器組105接受CPU寫入的新值,否則第三命令寄存器組105裝入一個空命令即WCR2裝入0,如此完成所有的數據傳輸,此時命令隊列全為空,即WCR0、WCR1、WCR2全為0。
圖2是DMA控制器命令隊列電路結構示意圖,它更直觀的說明了圖1的工作原理。
圖2所示命令隊列對應圖1中三個命令寄存器組103、104、105,圖2中還包括六個二選一選擇器202、204、210、215、224、222;三個三選一選擇器208、213、220以及三個加法器206、217、218。
第一命令寄存器組103對應的四個命令寄存器CR0 201、WCR0 207、DAR0212、SAR0 219中的數據可能來源于第二命令寄存器組104對應的四個命令寄存器CR1 203、WCR1 209、DAR1 214、SAR1 221,也可能來源于CBUS 109(CPU訪問DMA通道),這種選擇可以通過二選一選擇器202、三選一選擇器208、213和220來實現。命令前移信號產生的條件是WCR0為0,WCR1或WCR2非零,且DMA控制器的數據傳輸請求標志有效,當命令隊列接收到控制執行部件102發出的命令前移信號后,第一命令寄存器組103對應的四個命令寄存器CR0 201、WCR0 207、DAR0 212、SAR0 219選擇第二命令寄存器組104對應的四個命令寄存器CR1 203、WCR1 209、DAR1 214、SAR1221中的值打入。數據傳輸請求可能來自于DMA捕捉到的其它設備向DMA控制器發出的請求信號,也可能來自軟件對DMA控制器發出的數據傳輸請求;各控制寄存器CR里有相應的位控制數據傳輸請求的來源,同時CR寄存器也有相應位標志是否存在數據傳輸請求。如果控制寄存器CR0選擇軟件請求源,并把所有CR寄存器的數據傳輸請求標志位設置為有效,則DMA控制器中的傳輸命令可以連續執行。如果控制寄存器CR0中的命令設置為非軟件請求,而其它CR寄存器設置為軟件請求且數據傳輸請求標志位置為有效,則DMA控制器中的傳輸命令可以在接收到其它設備發出的數據傳輸請求后,DMA控制器開始傳輸所有的命令。用戶可以通過對CR寄存器中數據傳輸請求源和請求標志位(當選擇軟件請求源時)的不同設置靈活地決定DMA控制器中的傳輸命令和數據傳輸請求之間的對應關系。比如,CR0設置為非軟件請求源(且CR0的請求標志位設置為無效),CR1設置為軟件請求源且CR1的請求標志位設置為有效,CR2設置為非軟件請求源(且CR2的請求標志位設置為無效),則DMA控制器接收到其它設備發出的數據傳輸請求時,將連續執行第一個命令和第二個命令;執行完第二個命令后,第三個命令被前移到第一組命令寄存器中,但第三個命令必須等到其它設備發出新的數據傳輸請求后才能執行。
當DMA沒有工作時,如果發生了對某個寄存器組的寫,則該寄存器組選擇CBUS上的數據打入。當DMA正在傳輸數據時,此時DMA控制器每成功傳輸一個數據需要把當前數據量寄存器WCR0 207遞減一次,遞減任務由加法器206完成。DMA控制器在傳輸數據的接受過程中,每成功接收一個數據,源地址寄存器SAR0 219要遞增一次(根據需要也可以設計為遞減),遞增任務由加法器217完成。當DMA控制器在傳輸數據的發送過程中,每發送一個數據目的地址寄存器DAR0 212要遞增一次(根據需要也可以設計為遞減),遞增任務由加法器218完成。
DMA控制器在傳輸數據的接收過程中,選擇器224選擇源地址寄存器SAR0 219的值輸出到DBUS地址總線108上。DMA控制器在傳輸數據的發送過程中,選擇器224選擇目的地址寄存器DAR0 212的值輸出到DBUS地址總線108上。
第二命令寄存器組104對應的四個命令寄存器CR1 203、WCR1 209、DAR1214、SAR1 221的數據可能來源于第三命令寄存器組105對應的四個命令寄存器CR2 205、WCR2 211、DAR2 216、SAR2 223,也可能來源于CBUS 109(CPU訪問DMA的通道),這可以通過二選一選擇器204、210、215和222來實現。當命令隊列接收到控制執行部件102發出的命令前移信號后,第二命令寄存器組104對應的四個命令寄存器CR1 203、WCR1 209、DAR1 214、SAR1 221選擇第三命令寄存器組105對應的四個命令寄存器CR2052、WCR2211、DAR2 216、SAR2 223中的值打入。當DMA沒有工作時,如果發生了對某個寄存器組的寫,則該寄存器組選擇CBUS 109上的數據打入。
如果第一命令寄存器組的控制寄存器CR0的數據傳輸請求標志有效,且寫入其它數據量寄存器WCR的值不為0,DMA將產生命令前移信號,命令前移后再進行判斷;當被寫入其它WCR的值被前移到WCR0中,就開始根據數據傳輸請求的來源判斷執行第一命令寄存器組中的這個命令。
當CPU寫DMA某個命令寄存器組時,則該命令寄存器組打入CBUS 109上的數據。第三命令寄存器組105對應的四個命令寄存器CR2 205、WCR2211、DAR2 216、SAR2 223的數據來源是CBUS 109。當命令隊列接收到命令前移信號后,如果此時沒有發生CPU寫數據量寄存器WCR2 211的事件,則寄存器WCR2 211被清零,表示第三個命令已經被移走。因為DMA控制器根據數據量寄存器WCR判斷命令是否空,一旦寄存器WCR2 211被清零,則認為對應的命令為空,寄存器205、216、223的值不會被使用,因此在命令前移時,如果沒有寫這些寄存器的事件發生,寄存器205、216、223保持不變。
從上面的表述不難看出,采用內置命令隊列的方式,在本例具有三個命令寄存器組的DMA控制器中,執行命令隊列里的兩個不同命令時,從一個命令轉換到另一個命令的間隔時間只需1個時鐘周期(從104到103)或兩個時鐘周期(從105到104再到103),命令切換時間被減少到可以忽略的程度,完全能夠滿足高速數據傳輸對命令切換時間的要求。DMA控制器命令隊列中的命令相互之間是完全獨立的,命令隊列可以靈活的設置。這種靈活性可以帶來兩個方面的好處。一是這種DMA控制器可以很方便的完成數據在不連續地址空間的傳輸,只需不同的命令完成不同地址區域的傳輸即可。第二是這種DMA控制器可以減少中斷次數。用戶在設置命令時,可以屏蔽掉前面命令產生的中斷,只開放最后一個命令的完成中斷,這樣多個命令的完成只會產生一次中斷請求,從而減少了CPU在處理中斷上的時間開銷。從用戶的角度講,因為這種DMA控制器的多個命令存放在DMA控制器的內部寄存器中,而不像DMA的鏈式工作模式那樣存放在存儲器中,用戶設置命令方便多了。當然,DMA控制器不必從存儲器中讀命令,DMA控制器的設計復雜度自然降低了不少。
命令寄存器組的長度可以不是三個而是更多個,如果命令隊列中第X命令寄存器組和第X+Y命令寄存器組設置的WCR不為0,X到X+Y之間的命令寄存器組設置的WCR都為0,那么執行完第X命令后,要執行第X+Y命令,需要Y+1個周期的命令切換時間。
權利要求
1.一種直接存儲器訪問控制器DMA(Direct Memory Access),包括傳輸數據用的DBUS地址總線(108)和數據總線(107),暫存數據FIFO單元(101),使DMA控制器可以作為從設備被CPU訪問的讀寫控制邏輯單元(106)和相應數據總線CBUS(109),以及可控制DMA命令執行的控制執行部件(102);其特征在于還包括可存放兩個以上命令的兩個以上命令寄存器組,每組命令寄存器包括控制寄存器CR、數據量寄存器WCR、目的地址寄存器DAR和源地址寄存器SAR;所述命令寄存器組順序相聯,且第一命令寄存器組(103)與所述控制執行部件(102)相聯,該控制執行部件(102)與暫存數據的數據FIFO(101)相聯,該控制執行部件(102)以及暫存數據的數據FIFO(101)連接所述數據總線(107、108);最后一個命令寄存器組(105)與所述讀寫控制邏輯單元(106)相聯,該讀寫控制邏輯單元(106)的地址譯碼使CPU可以通過所述數據總線CBUS(109)訪問每一個命令寄存器組。
2.根據權利要求1所述的一種直接存儲器訪問控制器,其特征在于所述供DMA根據命令隊列中的命令傳輸數據時使用的數據總線(107、108)和供CPU訪問DMA使用的數據總線(109)是同一總線。
3.根據權利要求1所述的一種直接存儲器訪問控制器,其特征在于所述可存放兩個以上命令的兩個以上命令寄存器組是三個命令寄存器組。
4.根據權利要求3所述的一種直接存儲器訪問控制器,其特征在于所述三個命令寄存器組的具體結構中還包括六個二選一選擇器(202、204、210、215、224、222)、三個三選一選擇器(208、213、220)以及三個加法器(206、217、218);第三寄存器組和第二寄存器組的各個寄存器之間以及第二寄存器組和第一寄存器組的控制寄存器CR1(203)、CR0(201)之間分別經過一個二選一選擇器相聯;第二寄存器組和第一寄存器組的數據量寄存器WCR1(209)、WCR0(207)之間、目的地址寄存器DAR1(214)、DAR0(212)之間和源地址寄存器SAR1(221)、SAR0(219)之間分別經過一個三選一選擇(208、213、220)相聯;第一寄存器組的目的地址寄存器DAR0和源地址寄存器SAR0共同經過第一二選一選擇器(224)與所述數據總線DBUS(107、108)相聯;第一命令寄存器組(103)對應的數據量寄存器WCR0、目的地址寄存器DAR0和源地址寄存器SAR0分別經過一個加法器(206、217、218)連接其與第二命令寄存器組之間的三選一選擇器;所述供CPU訪問DMA使用的數據總線CBUS(109)與第三命令寄存器組的各個寄存器以及除第一二選一選擇器(224)以外的全部二選一選擇器和三選一選擇器分別相聯。
5.一種直接存儲器訪問控制器DMA(Direct Memory Access)的控制方法,其特征在于包括下述步驟①CPU把兩個以上包括源地址、目的地址、數據量和控制字的DMA傳輸命令分別寫入DMA控制器的兩個以上內部寄存器組;②DMA控制器接收到數據傳輸請求后,根據第一命令寄存器組(103)中的DMA傳輸命令控制總線完成數據傳輸任務,并使第一命令寄存器組(103)中數據量寄存器WCR0(207)的值為0;③如果此時其它命令寄存器組非空即其相應數據量寄存器WCR1、WCR2、…有一個不為0,則控制執行部件(102)發出一個命令前移信號并完成下述動作第二命令寄存器組(104)中的命令前移到第一命令寄存器組(103)中;第三命令寄存器組(105)中的命令前移到第二命令寄存器組(104)中,如此順序前移;④如果在命令前移時存在CPU寫最后一個命令寄存器組的請求,則該命令寄存器組接受CPU寫入的新值,否則該命令寄存器組裝入一個空命令即其相應數據量寄存器WCR裝入0;⑤重復上述步驟①②③④,完成全部命令寄存器組中所有的數據傳輸,此時命令隊列為空,即各個數據量寄存器WCR全為0。
6.根據權利要求5所述的一種直接存儲器訪問控制DMA的控制方法,其特征在于用戶通過設置各命令寄存器組中控制寄存器CR0、CR1、CR2、…中的數據傳輸請求源選擇位和請求標志位決定數據傳輸請求和DMA命令之間的對應關系;用戶通過設置所述控制寄存器CR0、CR1、CR2、…中的中斷屏蔽位決定中斷和命令執行之間的關系。
7.根據權利要求5所述的一種直接存儲器訪問控制器DMA的控制方法,其特征在于所述步驟②中,DMA控制器每成功接收一個數據,就把所述第一命令寄存器組中的源地址寄存器SAR0(219)遞增一次,或遞減一次;每成功發送一個數據,就把所述第一命令寄存器組中的目的地址寄存器DAR0(212)遞增一次,或遞減一次;DMA控制器每成功傳輸一個數據就把所述第一命令寄存器組中的數據量寄存器WCR0(207)遞減一次。
8.根據權利要求5所述的一種直接存儲器訪問控制器DMA的控制方法,其特征在于所述步驟⑤中當DMA沒有工作時,如果有對某個寄存器組的寫命令,則該寄存器組選擇數據總線CBUS(109)上的數據打入。
9.根據權利要求5所述的一種直接存儲器訪問控制器DMA的控制方法,其特征在于所述步驟③中在命令前移時,只把移出命令的命令寄存器組中的數據量寄存器WCR清零,其它寄存器中的值不變。
全文摘要
本發明公開了一種直接存儲器訪問控制器DMA及其控制方法,采用命令隊列方式進行數據傳輸,把要傳輸的數據傳輸命令寫在多個DMA命令中并存放在DMA控制器里的多個命令寄存器組中,且其中的DMA命令可以順序前移,方便的完成非連續空間的數據傳輸,簡化了設計復雜度,避免了讀取命令延時導致的丟失數據的危險,用戶設置命令簡單。本發明綜合了直接方式和鏈式方式兩方面的優點,控制簡單。
文檔編號G06F13/16GK1378148SQ0110769
公開日2002年11月6日 申請日期2001年3月30日 優先權日2001年3月30日
發明者王良清, 梁松海, 朱子宇, 官華伯 申請人:深圳市中興集成電路設計有限責任公司