基于DMA的大批量數據快速傳輸模塊設計
對于與NiosⅡ處理器交互的Avalon—MM從端口,從NiosⅡ處理器的角度看,這個(gè)端口是一些寄存器的映射,即NiosⅡ對該模塊的操作,是通過(guò)對模塊內部的寄存器的操作完成的。根據功能需隸,DMA讀控制模塊中設計了3個(gè)寄存器,即狀態(tài)寄存器status,控制字寄存器control和FIFO中已有數據個(gè)數寄存器usedw。
DMA讀控制模塊的中斷請求應當在兩種情況下產(chǎn)生:一是此模塊的數據源端將FIFO寫(xiě)滿(mǎn)且外設中斷使能有效;二是此模塊的數據源端置數據包結束標志且外設中斷使能有效。
對于DMA從端口,使用的是帶流控制信號的Avalon總線(xiàn),DMA使用流控制信號中的dataavailable以及endofpacket兩個(gè)總線(xiàn)信號。其中dataavailable表示外設是否準備好讀操作,即FIFO是否非空;對于endofpacket信號,設計中使用這個(gè)信號來(lái)表示模塊中數據包的結束,endofpacket信號與最后一個(gè)數據同時(shí)出現并持續1個(gè)時(shí)鐘周期,DMA檢測到endofpacket信號有效后將停止DMA傳輸。對于管道端口,這是最新的Avalon總線(xiàn)規范定義的接口形式,主要用于外設和外部邏輯進(jìn)行交互。本文引用地址:http://dyxdggzs.com/article/192791.htm
DMA讀控制模塊作為一個(gè)用戶(hù)自定義外設,在將其添加到SOPC Builder外設庫后,就可以在SOPCBuilder中調用此外設,圖3表示了SOPC Builder中該外設與DMA的連接,圖中fifo_control_0即為DMA讀控制模塊,可以看出,這個(gè)外設包含了兩個(gè)Avalon—MM端口,其中一個(gè)連接至DMA控制器模塊dma_0,而且SOPC Builder為這個(gè)外設分配了基地址和中斷優(yōu)先級。
4 測試驗證
DMA讀控制模塊測試時(shí),FPGA內部產(chǎn)生數據源并通過(guò)外設管道接口把數據寫(xiě)入FIFO,外設中斷時(shí),DMA讀取外設中的數據。測試時(shí)使用QuartusⅡ自帶的SignalTapⅡ嵌入式邏輯分析儀進(jìn)行測試,觀(guān)察相應信號的波形。本測試的觸發(fā)條件為signaltap_read上升沿觸發(fā),FIFO深度為1 024,FIFO數據寬度為16位,數據源為2~513共512個(gè)計數值,在Nios II的軟件中讀取600個(gè)數據,測試結果如圖4所示。
圖4對應3幅圖像,圖4(a)表示DMA讀取外設的測試數據的全局視圖,后面兩幅為局部放大結果,其中圖4(b)是測試數據的開(kāi)始段,圖4(c)是測試數據的結束段。如圖4(b)所示,在第一個(gè)時(shí)鐘周期,DMA的讀信號有效,在之后的第二個(gè)時(shí)鐘周期,FIFO的數據總線(xiàn)出現數據2,之后是3,4,…,從圖4(c)可以看出,最后一個(gè)數據是513,且DMA讀取外設512個(gè)數據,只花費了約776個(gè)時(shí)鐘周期,這充分顯示了DMA高速的數據傳輸能力。
評論