當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于MPC8260和FPGA的DMA接口設(shè)計(jì)

引言

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

按此在新窗口瀏覽圖片
圖1  主控板的系統(tǒng)結(jié)構(gòu)框圖

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

  如果每傳遞一個字節(jié)的數(shù)據(jù)都需要CPU的介入,那么不論是采用中斷驅(qū)動還是采用程序查詢的方式,數(shù)據(jù)傳輸速率都會很低,無法滿足系統(tǒng)需求。DMA(直接存儲器存?。┖鸵话愕某绦蚩刂苽魉头绞较啾染哂袛?shù)據(jù)傳送速度高、I/O響應(yīng)時間短和CPU額外開銷小的優(yōu)點(diǎn),因此,選擇DMA的傳輸模式,使FPGA中的數(shù)據(jù)不經(jīng)過CPU內(nèi)部寄存器的中轉(zhuǎn)而直接存放到本地內(nèi)存。MPC8260支持多種DMA實(shí)現(xiàn)方式,分別適用于不同數(shù)據(jù)傳輸源/目的設(shè)備、不同傳輸數(shù)據(jù)塊大小和存儲模式的需要,因此需要根據(jù)主控板的系統(tǒng)特點(diǎn)設(shè)計(jì)出合適的DMA傳輸接口。

1  MPC8260的 DMA系統(tǒng)結(jié)構(gòu)

按此在新窗口瀏覽圖片
圖2  CPM原理框圖

  MPC8260是Freescale公司主要針對數(shù)據(jù)通信領(lǐng)域而設(shè)計(jì)的一種嵌入式PowerPC微處理器,具有雙核結(jié)構(gòu):1個高性能的MPC603e 64位RISC微處理器內(nèi)核和1個專為通信設(shè)計(jì)的32位RISC通信處理模塊(Communication Processor Module,CPM)。CPM能夠分擔(dān)PowerPC內(nèi)核大部分的外圍通信任務(wù),其中就包含兩個DMA控制器,即串行直接存儲器存取通道(Serial Direct Memory Access,SDMA),所以這種雙處理器的體系結(jié)構(gòu)比單處理器具有更強(qiáng)的通信控制功能。CPM的原理框圖如圖2所示。除了PowerPC內(nèi)核和CPM之外,MPC8260還包含一個靈活的系統(tǒng)接口單元(System Interface Unit,SIU)主要用于控制與外部總線的接口。

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

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

1.1  握手信號控制的IDMA傳輸

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

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

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

1.2  CP命令控制的IDMA傳輸

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

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

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

2  DMA傳輸方案設(shè)計(jì)

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

按此在新窗口瀏覽圖片
圖3  IDMA傳輸設(shè)計(jì)框圖

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

2.1  MPC8260程序設(shè)計(jì)

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

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

按此在新窗口瀏覽圖片
圖4  MPC8260傳輸處理流程

2.1.1  IDMA通道設(shè)置

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

按此在新窗口瀏覽圖片
圖5  IDMA通道設(shè)置的邏輯結(jié)構(gòu)框圖

  BD(Buffer Descriptors)表是用于指定傳輸方式、源/目的地址和數(shù)據(jù)長度等基本信息的數(shù)據(jù)結(jié)構(gòu)。BD表的基地址由參數(shù)RAM中IBASE寄存器的值指定。除IDMA BD表的基地址之外,IDMA參數(shù)RAM內(nèi)還存放有IDMA BD指針、IDMA傳輸緩沖區(qū)的起始地址、IDMA傳輸緩沖區(qū)大小和DMA通道模式等IDMA通道信息。IDMA參數(shù)RAM的基地址由參數(shù)RAM中IDMAx_BASE寄存器的值指定。IDMAx_BASE寄存器的地址是固定的,如IDMA1_BASE在偏移RAM基地址0x87FE的位置。CP就是通過IDMAx_BASE寄存器找到IDMA參數(shù)RAM,再通過IBASE找到BD表的順序初始化IDMA通道的。具體的寄存器配置可以參考文獻(xiàn)[1]第19章的IDMA編程示例。

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

 ?、?nbsp; 需要在SIU中為FPGA配置UPM模式控制MPC8260和FPGA之間的突發(fā)讀寫。不要使用通用目的片選機(jī)(GeneralPurpose Chipselect Machine,GPCM)模式。因?yàn)镸PC8260內(nèi)存控制的GPCM模式不支持突發(fā)傳輸,IDMA工作在GPCM模式下一方不論傳輸數(shù)據(jù)的長度是否滿足突發(fā)的要求,都只能以普通的單次讀寫進(jìn)行。
  ②  把FPGA當(dāng)作存儲器操作,IDMA工作在內(nèi)存到內(nèi)存的雙地址模式下,緩沖區(qū)設(shè)為最大的2 KB。
 ?、? BD表的配置應(yīng)該與FPGA中的緩沖區(qū)一一對應(yīng)。BD表結(jié)構(gòu)中的CM(Continuous Mode)位應(yīng)該設(shè)置為緩沖鏈模式,在每一個BD表傳輸完之后,清BD表的有效位;同時,CP根據(jù)下一個BD表的值自動裝載IDMA寄存器進(jìn)行后面的傳輸。

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

2.1.2  中斷處理

  系統(tǒng)設(shè)計(jì)中使用了兩類中斷方式: IRQ引腳引入的外部中斷和CPM觸發(fā)的內(nèi)部中斷。初始化過程包括:使能對應(yīng)的中斷屏蔽位、選擇中斷優(yōu)先級、連接對應(yīng)中斷向量號和中斷服務(wù)程序等。為了保證較好的傳輸實(shí)時性,需要把中斷優(yōu)先級盡量設(shè)得高一些。

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

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; /*設(shè)置IRQ1和IRQ2為下降沿觸發(fā)*/
  *(long*)(SIUMCR)=0x81210000;/*配置SIU模式配置寄存器*/
  /*連接中斷服務(wù)程序和中斷向量號*/
  if((intConnect(INUM_TO_IVEC(INUM_IRQ1),(VOIDFUNCPTR)IRQ1Handler,0))==ERROR)
    logMsg("intConnectIRQ1failed ",0,0,0,0,0,0);
  if((intConnect(INUM_TO_IVEC(INUM_IRQ2),(VOIDFUNCPTR)IRQ2Handler,0))==ERROR)
    logMsg("intConnectIRQ2failed ",0,0,0,0,0,0);
  if((intConnect(INUM_TO_IVEC(INUM_IDMA1),(VOIDFUNCPTR)IDMA11Handler,0))==ERROR)
    logMsg("intConnectIDMA1failed ",0,0,0,0,0,0);
  if((intConnect(INUM_TO_IVEC(INUM_IDMA2),(VOIDFUNCPTR)IDMA2Handler,0))==ERROR)
    logMsg("intConnectIDMA2failed ",0,0,0,0,0,0);
  }

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

2.2  FPGA部分程序

  系統(tǒng)中的FPGA芯片選用Xilinx公司的VirtexII 3000。利用VirtexII內(nèi)嵌的大容量BlockRAM配置為單口RAM來做緩沖區(qū),在程序中可以用Xilinx的集成開發(fā)環(huán)境ISE 7.1i內(nèi)部自帶的IP核生成。對FPGA來說,由于數(shù)據(jù)的輸入/輸出都是順序的,所以兩端都只要1根地址線用于區(qū)分相鄰的兩個數(shù)據(jù)就可以了。地址線配合內(nèi)部計(jì)數(shù)器構(gòu)成讀寫指針,當(dāng)寫指針從緩沖區(qū)的一半跳到另外一半時發(fā)相應(yīng)的中斷信號。

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

3  總結(jié)

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

參考文獻(xiàn)

[1]  Freescale. MPC8260 PowerQUICCTM II Family Reference Manual .MPC8260RM Rev.2, 2005-12.
[2]  Freescale. MPC8260 PowerQUICCTM II IDMA Functionality.Rev. 3,2006-02.
[3]  Freescale. MPC8260 IDMA Timing Diagrams. Rev. 4,2006-07.

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉