基于DMA的大批量數(shù)據(jù)快速傳輸模塊設(shè)計
摘要 針對Altera公司SOPC解決方案中,DMA模塊無法直接讀/寫FPGA外設(shè)的情況,提出了基于Avalon總線流傳輸模式的通用DMA讀/寫控制模塊的設(shè)計,設(shè)計了兩個自定義外設(shè),實現(xiàn)了DMA對FPGA外設(shè)的高速數(shù)據(jù)存取和Nios II與FPGA大批量數(shù)據(jù)的快速傳輸。介紹了Avalon—MM總線規(guī)范,闡述了系統(tǒng)架構(gòu)以及DMA讀控制器的設(shè)計,測試結(jié)果表明,該方法是一種高效可行的解決方案。
關(guān)鍵詞 SOPC;Nios II;DMA;Avalon總線
DMA控制器作為SOPC設(shè)計中使用頻率較高的IP核,可用于存儲器或外設(shè)間進行批量數(shù)據(jù)傳輸,以提高系統(tǒng)數(shù)據(jù)吞吐量。然而,由于DMA控制器只支持對基于Avalon總線流傳輸模式的外設(shè)進行數(shù)據(jù)傳輸操作,對用戶自定義外設(shè)不予支持。文中提出了一種基于Avalon總線流傳輸模式的通用DMA接口控制器設(shè)計,實現(xiàn)了NiosⅡ與FPGA的大批量數(shù)據(jù)快速傳輸,顯著提高了系統(tǒng)的數(shù)據(jù)吞吐量。
1 Avalon—MM總線規(guī)范
Avalon總線規(guī)范是為開發(fā)SOPC環(huán)境下外設(shè)而設(shè)計的,為SOPC設(shè)計者描述這些外設(shè)的端口提供了基礎(chǔ)。Avalon總線有多種傳輸模式,其中,流傳輸模式為從端口提供了一種機制,用于控制來自主端口的傳輸,流傳輸模式的這些特點使其特別適合于DMA傳輸。
流模式從端口傳輸模式的信號,除了在從端口傳輸中使用的信號之外,又引入了3個信號:readyfordata、dataavailable和endofpack et。其中,從端口通過設(shè)置Readyfordata有效來表示它已經(jīng)準備好接收來自Avalon總線模塊的寫傳輸;使readyfordata無效表示寫操作將引起數(shù)據(jù)上溢;從端口通過設(shè)置dataavailable有效來表示它已經(jīng)能夠為來自Avalon總線模塊的讀傳輸提供數(shù)據(jù),dataavailable無效時讀操作將引起數(shù)據(jù)下溢;在任何傳輸期間,流模式從端口都可以設(shè)置endofpacket信號有效,并通過Avalon總線模式傳輸給主端口。對于endofpack et信號的解釋取決于用戶設(shè)計,必須明確外設(shè)如何響應(yīng)endofpacket信號的變化。
2 系統(tǒng)結(jié)構(gòu)
提出的NiosⅡ與外設(shè)進行大批量數(shù)據(jù)傳輸?shù)慕Y(jié)構(gòu)如圖1所示,當NiosⅡ需要從外設(shè)讀入數(shù)據(jù)時,外設(shè)通過FIFO接口將數(shù)據(jù)寫入DMA讀控制模塊,然后數(shù)據(jù)經(jīng)DMA傳輸至NiosⅡ,反之,當NiosⅡ輸出數(shù)據(jù)時,數(shù)據(jù)通過DMA傳輸至DMA寫控制模塊,F(xiàn)PGA邏輯通過FIFO接口從這個模塊讀取數(shù)據(jù)。DMA讀/寫控制模塊的設(shè)計,是為了解決SOPC中DMA模塊與FPGA片上FIFO不同接口間的數(shù)據(jù)傳輸問題,而在SOPC中,DMA模塊使用的是支持流傳輸模式的Avalon—MM總線。DMA讀/寫控制模塊主要完成兩個功能:一是FIFO與DMA主端口之間的數(shù)據(jù)交互;二是作為一個NiosⅡ的外設(shè),NiosⅡ處理器能夠?qū)Υ送庠O(shè)進行控制并能隨時獲取該外設(shè)的狀態(tài)信息。
3 DMA讀/寫控制模塊的設(shè)計
DMA讀/寫控制模塊作為系統(tǒng)結(jié)構(gòu)的核心,其結(jié)構(gòu)框圖如圖2所示。此模塊包括兩個Avalon—MM從端口:一個作為DMA從端口,用于處理DMA對此模塊的數(shù)據(jù)讀操作;另一個Avalon—MM從端口是NiosⅡ的控制從端口,用于NiosⅡ處理器對這個模塊進行控制并且隨時獲取此模塊的狀態(tài)信息。模塊還包括一個中斷請求信號(IRQ),當外設(shè)有數(shù)據(jù)需要讀取時,可以使這個信號有效,從而通知NiosⅡ發(fā)起DMA讀傳輸。另外,DMA讀控制模塊中還例化了一片F(xiàn)PGA片上FIFO作為數(shù)據(jù)上傳FIFO,用于系統(tǒng)待上傳數(shù)據(jù)的暫存。使用FIFO可以提高數(shù)據(jù)傳輸?shù)耐掏铝?,同時簡化FPGA硬件邏輯的操作,圖2中的管道(Conduit)端口就是FPGA硬件邏輯操作FIFO的接口。
評論