《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 一種基于MPC8260和FPGA的DMA接口設計與實現(xiàn)
一種基于MPC8260和FPGA的DMA接口設計與實現(xiàn)
EEworld
EEworld
摘要: 摘要以MPC8260通信處理器為硬件平臺,結合中斷處理和IDMA傳輸機制設計一種最高傳輸速率可達500Mbps的數(shù)據傳...
關鍵詞: MPC8260 DMA接口
Abstract:
Key words :

關鍵字:MPC8260 DMA接口

  引言

  在基于軟件無線電的某無線通信信號偵收平臺的設計中,天線接收到的信號經過變頻器處理和A/D變換之后,經過高速通道把采集的信號送入主控板進行數(shù)據分發(fā)處理。系統(tǒng)的結構框圖如圖1所示。

  圖1 主控板的系統(tǒng)結構框圖

  主控板的硬件核心是嵌入式微處理器MPC8260,負責系統(tǒng)軟件的加載、數(shù)據的分發(fā)以及與外界命令控制的交互。軟件上,采用高性能的VxWorks嵌入式實時操作系統(tǒng)。從天線接收到的射頻信號經過變頻和A/D變換之后作為數(shù)據源連接到FPGA,F(xiàn)PGA對接收到的數(shù)據進行中頻變換和信道估計等預處理后,在CPU的控制下將數(shù)據傳輸?shù)奖镜貎却?,最后CPU對數(shù)據打包后進行快速分發(fā)。

  嵌入式微控制器的典型代表是單片機(Microcontroller Unit),這種8位(8根數(shù)據線,8位指令)的電子器件目前在嵌入式設備中仍然有著極其廣泛的應用。微控制器的最大特點是單片化,體積大大減小,從而使功耗和成本下降、可靠性提高。

  嵌入式微處理器(Microprocessor Unit,MPU)由通用計算機中的CPU演變而來。與通用計算機中的CPU不同的是,在嵌入式應用中,將微處理器裝配在專門設計的電路板上,只保留和嵌入式應用緊密相關的功能硬件,去除其他的冗余功能部分,這樣就以最低的功耗和資源實現(xiàn)嵌入式應用的特殊要求。此外,為了滿足嵌入式應用的特殊要求,嵌入式微處理器在工作溫度、抗電磁干擾、可靠性等方面相對通過通用計算機中的CPU都做了各種增強。

  如果每傳遞一個字節(jié)的數(shù)據都需要CPU的介入,那么不論是采用中斷驅動還是采用程序查詢的方式,數(shù)據傳輸速率都會很低,無法滿足系統(tǒng)需求。MPC8260支持多種DMA實現(xiàn)方式,分別適用于不同數(shù)據傳輸源/目的設備、不同傳輸數(shù)據塊大小和存儲模式的需要,因此需要根據主控板的系統(tǒng)特點設計出合適的DMA傳輸接口。

  1 MPC8260的 DMA系統(tǒng)結構

  圖2 CPM原理框圖

  MPC8260是Freescale公司主要針對數(shù)據通信領域而設計的一種嵌入式PowerPC微處理器,具有雙核結構:1個高性能的MPC603e 64位RISC微處理器內核和1個專為通信設計的32位RISC通信處理模塊(Communication Processor Module,CPM)。CPM的原理框圖如圖2所示。除了PowerPC內核和CPM之外,MPC8260還包含一個靈活的系統(tǒng)接口單元(System Interface Unit,SIU)主要用于控制與外部總線的接口。

  圖2中, CPM內除了SDMA模塊以外,還包括通信控制器(Communications Processor,CP)、雙口RAM和一些串行外圍設備的控制接口等。SDMA和60x總線、本地總線相連,并且可以直接訪問CPM內部的雙口RAM。同時,CPM還用這2個物理的SDMA通道模擬4個可編程控制的、獨立的DMA (Independent DMA,IDMA)通道,用于存儲器—存儲器及外設—存儲器之間的數(shù)據傳輸。

  主控板上的FPGA和SDRAM都是掛接在MPC8260的60x總線上的,所以只能利用IDMA來實現(xiàn)二者之間的DMA傳輸。根據傳輸啟動的觸發(fā)方式不同,IDMA可分為握手信號控制的IDMA傳輸和CP命令控制的IDMA傳輸兩種。下面分別介紹兩種方式的特點。

  1.1 握手信號控制的IDMA傳輸

  握手信號控制的IDMA傳輸主要用于外設和內存之間的數(shù)據傳輸。每個IDMA通道都有3個握手信號用于傳輸握手控制:DMA請求信號DREQ[1~4]、DMA應答信號DACK[1~4]和DMA結束信號DONE[1~4]。

  在這種方式下,PowerPC內核只需要參與IDMA通道初始化,之后的傳輸過程全部由CP按照通道參數(shù)設置和握手信號控制數(shù)據的收發(fā),在最大程度上釋放內核。握手信號控制的缺點在于:① SDRAM中的數(shù)據和MPC8260的數(shù)據同步比較復雜。② 每次發(fā)出請求信號后都要進行總線仲裁,并且在得到總線使用權之后一次只能夠傳輸外設端口大小或者32位的數(shù)據,總線利用率低。③ 握手控制邏輯和時序比較復雜,加重了FPGA內部控制邏輯設計的負擔。

  雖然這種傳輸方式基本上不占用內核資源,但是由于總線帶寬有限且利用率較低,所以在連續(xù)高速的通信條件下會造成內核長時間得不到總線使用權而一直處于等待狀態(tài)。因此,握手信號控制的IDMA一般只適用于由外設發(fā)起的、數(shù)據不是太頻繁的傳輸使用。

  1.2 CP命令控制的IDMA傳輸

  MPC8260的IDMA還可以通過向CP命令寄存器中寫入START_IDMA命令進行內部觸發(fā)。每次啟動傳輸以后PowerPC內核就被釋放,傳輸?shù)脑吹刂?、目的地址和傳輸?shù)據長度等參數(shù)由CP按照在IDMA通道初始化的信息控制執(zhí)行。每次傳輸?shù)淖畲箝L度為4 GB。

  相比握手信號控制的IDMA傳輸,在這種方式下,PowerPC內核除了需要初始化IDMA通道以外還要以命令的形式啟動每一次的傳輸,所以要占用多一些的內核資源。不過,在一次傳輸啟動之后最多可以傳輸4 GB的數(shù)據,所以只要每次傳輸?shù)臄?shù)據長度比較長,內核寫一個寄存器的額外開銷就完全可以忽略不計。同時,由于內部命令觸發(fā)方式不需要握手信號,不需要頻繁地每幾個字節(jié)就競爭一次總線控制權,所以這種方式的傳輸效率更高、傳輸速度更快。內部命令觸發(fā)方式是以空間換時間——用前端大的緩沖區(qū)來換取傳輸速度的提升。

  考慮到主控板上軟硬件系統(tǒng)的瓶頸都在于總線帶寬,而存儲資源相對比較豐富,所以選擇CP命令控制的IDMA傳輸作為數(shù)據流從FPGA到SDRAM的傳輸方式。

  2 DMA傳輸方案設計

  FPGA和MPC8260間的數(shù)據傳輸接口設計如圖3所示。圖中左側FPGA,通過16位數(shù)據線、10位地址線、2根中斷請求線和一些讀寫控制信號線連接到右側的MPC8260。MPC8260通過64位數(shù)據線與本地內存SDRAM相連。

  圖3 IDMA傳輸設計框圖

  FPGA內部分配有兩個大的存儲空間,用于輪流緩沖從數(shù)據源接收到的數(shù)據。任何一個緩沖區(qū)收滿后,繼續(xù)接收的數(shù)據保存到下一個緩沖區(qū),同時以中斷的方式觸發(fā)MPC8260啟動相應的IDMA通道把數(shù)據傳到SDRAM中。IDMA控制、數(shù)據同步和錯誤處理都由MPC8260完成,F(xiàn)PGA只負責收發(fā)數(shù)據和觸發(fā)中斷。下面分別介紹二者的程序設計。

  2.1 MPC8260程序設計

  MPC8260內部的程序處理流程如圖4所示。MPC8260預先初始化兩個IDMA通道:通道的源地址和傳輸數(shù)據長度等信息與FPGA中的緩沖區(qū)一一對應。當收到FPGA的中斷信號之后,如果此時對應的IDMA通道空閑,則在中斷處理程序中發(fā)出CP命令開始接收數(shù)據,同時將對應的IDMA通道置忙狀態(tài);否則,在FPGA中可能發(fā)生了未讀取的數(shù)據被覆蓋的情況,MPC8260進入錯誤處理程序。在數(shù)據傳輸結束時由DMA控制器發(fā)送CPM內部中斷到內核,在中斷處理程序中一方面要恢復IDMA通道的參數(shù)設置,另一方面要把該IDMA通道置閑狀態(tài)等待下一次傳輸?shù)拈_始。

  MPC8260程序的核心部分是IDMA通道設置和中斷處理。

  圖4 MPC8260傳輸處理流程

  2.1.1 IDMA通道設置

  與一般的DMA通道設置一樣,IDMA通道設置的主要參數(shù)包括:源地址、目的地址和傳輸數(shù)據長度。除此之外,MPC8260的 IDMA通道設置還包括通道模式、緩沖區(qū)和中斷配置等,所涉及的寄存器比較多,配置比較復雜。IDMA通道設置的邏輯結構如圖5所示。

  圖5 IDMA通道設置的邏輯結構框圖

  BD(Buffer Descriptors)表是用于指定傳輸方式、源/目的地址和數(shù)據長度等基本信息的數(shù)據結構。BD表的基地址由參數(shù)RAM中IBASE寄存器的值指定。IDMAx_BASE寄存器的地址是固定的,如IDMA1_BASE在偏移RAM基地址0x87FE的位置。CP就是通過IDMAx_BASE寄存器找到IDMA參數(shù)RAM,再通過IBASE找到BD表的順序初始化IDMA通道的。具體的寄存器配置可以參考文獻[1]第19章的IDMA編程示例。

  為了提高通道的傳輸速率,系統(tǒng)中IDMA通道初始化應該注意以下幾點:

  ① 需要在SIU中為FPGA配置UPM模式控制MPC8260和FPGA之間的突發(fā)讀寫。不要使用通用目的片選機(GeneralPurpose Chipselect Machine,GPCM)模式。因為MPC8260內存控制的GPCM模式不支持突發(fā)傳輸,IDMA工作在GPCM模式下一方不論傳輸數(shù)據的長度是否滿足突發(fā)的要求,都只能以普通的單次讀寫進行。

  ② 把FPGA當作存儲器操作,IDMA工作在內存到內存的雙地址模式下,緩沖區(qū)設為最大的2 KB。

 ?、?BD表的配置應該與FPGA中的緩沖區(qū)一一對應。BD表結構中的CM(Continuous Mode)位應該設置為緩沖鏈模式,在每一個BD表傳輸完之后,清BD表的有效位;同時,CP根據下一個BD表的值自動裝載IDMA寄存器進行后面的傳輸。

  IDMA通道初始化以后等待CP發(fā)出START_IDMA命令開始傳輸。在最后一個BD表傳輸結束時觸發(fā)中斷信號通知PowerPC內核本次傳輸過程的完成。傳輸過程中會發(fā)生改變的通道設置寄存器包括IDMA BD表指針、源地址、目的地址和BD表有效位等,所以在BD表傳輸結束的中斷處理程序中需要恢復這些寄存器為下一次傳輸作準備。

  2.1.2 中斷處理

  中斷處理是與計算機專業(yè)有關的術語。引起中斷的事件稱為中斷源。中斷源向CPU提出處理的請求稱為中斷請求。發(fā)生中斷時被打斷程序的暫停點成為斷點。CPU暫停現(xiàn)行程序而轉為響應中斷請求的過程稱為中斷響應。處理中斷源的程序稱為中斷處理程序。CPU執(zhí)行有關的中斷處理程序稱為中斷處理。

  與一般中斷處理過程的區(qū)別在于:MPC8260中斷處理控制器采用分級結構來擴展中斷信號總數(shù)。CPM內的中斷就是二級中斷,需要通過CPM中斷控制器和SIU中斷控制器兩級中斷控制。本設計中用來通知內核本次傳輸過程結束的中斷是CPM內最后一個BD表傳送結束的信號BC(BD Completed)。BC信號和命令結束等幾個信號一起通過SIU中斷掛起寄存器中的IDMA位向內核發(fā)出中斷信號。所以在中斷初始化時要同時有效IDMA屏蔽寄存器和SIU中斷屏蔽寄存器對應的比特位。具體的中斷初始化實例如下:

  void IDMAint(void) {

  *(long*)(IDMR1)=0x0F000000;/*使能IDMA1所有的二級中斷*/

  *(long*)(IDMR2)=0x0F000000;/*使能IDMA2所有的二級中斷*/

  *(long*)(SIMR_L)|=0x00000600;/*使能IDMA1和IDMA2在SIU中的中斷*/

  *(long*)(SIMR_H)|=0x00006000;/*使能外部中斷IRQ1和IRQ2*/

  *(long*)(SIEXR)|=0x00006000; /*設置IRQ1和IRQ2為下降沿觸發(fā)*/

  *(long*)(SIUMCR)=0x81210000;/*配置SIU模式配置寄存器*/

  /*連接中斷服務程序和中斷向量號*/

  if((intConnect(INUM_TO_IVEC(INUM_IRQ1),(VOIDFUNCPTR)IRQ1Handler,0))==ERROR)

  logMsg("intConnectIRQ1failedn",0,0,0,0,0,0);

  if((intConnect(INUM_TO_IVEC(INUM_IRQ2),(VOIDFUNCPTR)IRQ2Handler,0))==ERROR)

  logMsg("intConnectIRQ2failedn",0,0,0,0,0,0);

  if((intConnect(INUM_TO_IVEC(INUM_IDMA1),(VOIDFUNCPTR)IDMA11Handler,0))==ERROR)

  logMsg("intConnectIDMA1failedn",0,0,0,0,0,0);

  if((intConnect(INUM_TO_IVEC(INUM_IDMA2),(VOIDFUNCPTR)IDMA2Handler,0))==ERROR)

  logMsg("intConnectIDMA2failedn",0,0,0,0,0,0);

  }

  尤其要注意的是,中斷處理程序結束之前的清SIU中斷掛起寄存器,不能直接在SIU中斷掛起寄存器的IDMA位寫1,而是要通過在IDMA事件寄存器的BC位寫1來間接地清SIU中斷掛起寄存器。

  2.2 FPGA部分程序

  FPGA(Field-Programmable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎上進一步發(fā)展的產物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點

  系統(tǒng)中的FPGA芯片選用Xilinx公司的VirtexII 3000。利用VirtexII內嵌的大容量BlockRAM配置為單口RAM來做緩沖區(qū),在程序中可以用Xilinx的集成開發(fā)環(huán)境ISE 7.1i內部自帶的IP核生成。系統(tǒng)設計師可以根據需要通過可編輯的連接把FPGA內部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊和連接可以按照設計者而改變,所以FPGA可以完成所需要的邏輯功能。

  FPGA一般來說比ASIC(專用集成芯片)的速度要慢,無法完成復雜的設計,而且消耗更多的電能。但是他們也有很多的優(yōu)點比如可以快速成品,可以被修改來改正程序中的錯誤和更便宜的造價。廠商也可能會提供便宜的但是編輯能力差的FPGA。因為這些芯片有比較差的可編輯能力,所以這些設計的開發(fā)是在普通的FPGA上完成的,然后將設計轉移到一個類似于ASIC的芯片上。另外一種方法是用CPLD(復雜可編程邏輯器件備)。

  FPGA設計的關鍵部分是和MPC8260的總線接口設計。通過適當選擇緩沖區(qū)的起始地址和長度,可以使MPC8260讀FPGA都以突發(fā)的方式進行。設計中,MPC8260對FPGA的突發(fā)讀寫遵循自己配置的UPM模式,所以要綜合考慮UPM模式設計和FPGA讀寫邏輯設計。在設計UPM模式時,可以在每次MPC8260鎖定數(shù)據總線數(shù)據之前由通用功能信號線(General Purpose Line,GPL)產生一個下降沿通知FPGA往數(shù)據總線上寫新數(shù)據;或者通過GPL把總線時鐘送到FPGA達到收發(fā)同步來完成MPC8260與FPGA之間的讀寫。

  3 總結

  結合MPC8260的中斷處理和IDMA傳輸機制,設計了一種MPC8260和FPGA之間的高速數(shù)據傳輸接口。測試結果顯示:采用循環(huán)讀的方式把FPGA中的數(shù)據復制到SDRAM中,數(shù)據傳輸速率只有11 Mbps左右;而采用本文介紹的IDMA方式,最高速率能夠達到500 Mbps,并且內核占用率較低,實驗結果完全能夠滿足系統(tǒng)設計需求。本研究對于PowerPC系列CPU的接口設計有一定的參考價值。

此內容為AET網站原創(chuàng),未經授權禁止轉載。