可適應(yīng)多種時序情況的DMA控制器設(shè)計
2 DMA控制器的實現(xiàn)
2.1 DMA控制器接口
為了更準確地描述該DMA控制器的工作流程,其主要接口信號介紹如下。DMA控制器與3部分邏輯的接口為:基帶芯片的EMI接口、DMA存儲器接口、SD卡控制器。
1)與基帶芯片的接口 這個接口中,與該DMA控制器關(guān)系最密切的信號是host_dma_wr,其為基帶芯片送給DMA存儲器的寫信號,這個信號低電平有效。
2)DMA存儲器接口 dma_memory_addr為DMA存儲器的地址信號。為了能夠保存10個block的數(shù)據(jù),DMA存儲器的容量為2560x16=5120字節(jié),所以dma_memory_addr的位寬為12位;drag_memory_datain為DMA存儲器的數(shù)據(jù)輸入端口,位寬為16位;dma_memory_dataout為DMA存儲器的數(shù)據(jù)輸出端口,位寬為16位;dma_memory_wen為DMA存儲器的寫使能信號,低電平有效。
3)SD卡控制器接口 dma_req是SD卡控制器發(fā)出的DMA請求信號,高電平有效。其為DMA控制器做速度協(xié)調(diào)的重要信號,如果其為高則表示SD卡控制器要求與DMA存儲器做DMA傳送;如果該信號被置低,可能存在兩種情況,①可能是本次DMA傳送已經(jīng)完成,②可能是SD卡控制器的讀或?qū)懣ㄋ俣鹊陀谄洳僮鱀MA存儲器的速度,所以SD卡控制器暫停DMA操作;dma_write是SD卡控制器發(fā)出的DMA寫標志信號。如果其為1表示SD卡控制器在做讀卡操作,并準備將讀出的數(shù)據(jù)寫入DMA存儲器;如果其為0表示SD卡控制器在做寫卡操作,并準備從DMA存儲器中讀取數(shù)據(jù);dma_ ack是DMA控制器發(fā)給SD卡控制器的應(yīng)答信號,其相當(dāng)于DMA傳輸數(shù)據(jù)的有效信號;dma_rdata是DMA讀模式的數(shù)據(jù)輸出端口,位寬為32位;dma_ wdata是DMA寫模式的數(shù)據(jù)輸入端口,位寬為32位。
2.2 DMA控制器的工作流程
為了使DMA控制器能更靈活地適應(yīng)各種操作情況并很好的完成2個操作源(基帶芯片、SD卡控制器)的速度匹配功能。下面將分別就multi-ple block write命令(CMD25)和multiple block read命令(CMD18)對該狀態(tài)機的工作流程進行說明。
先將狀態(tài)機中的幾個重要變量做如下說明:
dma_num表示在一次多block讀(CMD18)或?qū)?CMD25)操作中,要向卡寫入或讀出多少個字節(jié)的數(shù)據(jù)。在該圖像協(xié)處理器中,每次讀或?qū)懣ǘ家僮?0個block數(shù)據(jù),所以dma_num將被設(shè)置為5 120;
dma_in_cnt表示在一次多block寫卡操作中,基帶芯片已經(jīng)向DMA存儲器中寫入了多少個字節(jié)的數(shù)據(jù);
dam_cnt表示在本次多block操作中,SD卡控制器從DMA存儲器中讀出數(shù)據(jù)的字節(jié)數(shù)(DMA讀模式)或?qū)懭隓MA存儲器中的數(shù)據(jù)字節(jié)數(shù)(DMA寫模式)。
顯然,在該圖像協(xié)處理器中,每個CMD18和CMD25完成之后,dam_in_cnt和dma_cnt都將與dma_num相等,且均為5 120。
2.2.1 multiple block write
如前所述,每次multiple block write要向卡寫入10個block數(shù)據(jù),即10x512=5 120字節(jié)。為了提高寫卡速度,基帶芯片首先向DMA存儲器中寫入1個block數(shù)據(jù),然后向SD卡發(fā)出CMD25(multi block write command)。當(dāng)SD卡控制器發(fā)出CMD25并接收到該命令的應(yīng)答信號后,立即向DMA控制器發(fā)出dma_req信號,準備從DMA存儲器中讀取數(shù)據(jù)。當(dāng)DMA控制器監(jiān)測到dma_req為1且dma_write為0后,將依次進入狀態(tài)1、狀態(tài)2、狀態(tài)3、狀態(tài)4。在狀態(tài)4中,其會檢查基帶芯片的寫信號host_dma_wr是否有效,如無效,其將從DMA存儲器中讀取當(dāng)前地址的數(shù)據(jù),然后再將DMA存儲器的地址加1并進入狀態(tài)5;如host_dma_wr有效,則DMA控制器將等待一個時鐘周期,在下個時鐘的上升沿再去判斷host_dma_wr的極性,若其失效再讀DMA存儲器。也就是說基帶芯片對DMA存儲器的操作有更高優(yōu)先級,利用這個辦法就可以使基帶芯片和SD卡控制器可以盡量并行工作以加快寫卡速度。在狀態(tài)5中,DMA讀狀態(tài)機做如狀態(tài)4的操作,這是因為dma_rdata的數(shù)據(jù)線寬度為32位,而dma_memory_data-out的數(shù)據(jù)線寬度是16位,所以必須要讀2次DMA存儲器再做一次DMA讀傳送。在狀態(tài)6中,DMA狀態(tài)機將向SD卡控制器發(fā)出dma_ack(數(shù)據(jù)使能信號)和dma-rdata[31:0],隨后進入狀態(tài)7。在狀態(tài)7中,DMA狀態(tài)機將做3個重要判斷,首先其判斷dma-cnt是否等于dma_num,如相等則意味著SD卡控制器在本次多block操作中已經(jīng)讀取了全部5 120個字節(jié)數(shù)據(jù),狀態(tài)機將回到初始狀態(tài)以準備下一次DMA操作;若不相等,則判斷dma_c-nt是否等于dma_in_cnt,若dma_cnt等于dma_in_cnt,則意味著基帶芯片寫入DMA存儲器的所有數(shù)據(jù)均已被SD卡控制器讀出,DMA存儲器已經(jīng)為空,但數(shù)據(jù)量還沒有達到5 120字節(jié),DMA狀態(tài)機將進入狀態(tài)8即等待狀態(tài),只有基帶芯片寫入新的數(shù)據(jù)后,SD卡控制器才能回到狀態(tài)4繼續(xù)讀取數(shù)據(jù),這個分支主要是應(yīng)用于SD卡控制器寫卡速度快于基帶芯片寫DMA存儲器的情況;若dma_cnt不等于dma_in_cnt,則DMA狀態(tài)機將檢查dma_req信號的極性,如其為1,狀態(tài)機將轉(zhuǎn)至狀態(tài)4讀取下一個32位數(shù)據(jù),如為0則意味著此時SD卡控制器寫卡的速度要慢于DMA讀數(shù)據(jù)的速度,其前面通過DMA接口讀出的數(shù)據(jù)還沒有完全寫入SD卡,所以SD卡控制器將暫停從DMA存儲器中讀取數(shù)據(jù),DMA控制器的狀態(tài)機也將在狀態(tài)7處于等待狀態(tài),等待dma_req重新為1。當(dāng)dma_req再次為1后,狀態(tài)機將回到狀態(tài)4開始新的32位數(shù)據(jù)的DMA讀操作。最后,當(dāng)?shù)? 119和5 120個字節(jié)被從DMA存儲器讀出后,DMA狀態(tài)機將在狀態(tài)7中檢查到dma_cnt=dma_num,標志至此,DMA狀態(tài)機完成了一次DMA讀操作的全過程。SD卡控制器將向基帶芯片發(fā)出中斷信號,基帶芯片響應(yīng)該中斷后將啟動下一個讀卡或?qū)懣ǖ拿?。其讀狀態(tài)流程圖如圖2所示。本文引用地址:http://www.ex-cimer.com/article/162296.htm
評論