基于MPC8260和FPGA的DMA接口設計
1.2 CP命令控制的IDMA傳輸
本文引用地址:http://dyxdggzs.com/article/82690.htmMPC8260的IDMA還可以通過(guò)向CP命令寄存器中寫(xiě)入START_IDMA命令進(jìn)行內部觸發(fā)。每次啟動(dòng)傳輸以后PowerPC內核就被釋放,傳輸的源地址、目的地址和傳輸數據長(cháng)度等參數由CP按照在IDMA通道初始化的信息控制執行。每次傳輸的最大長(cháng)度為4 GB。
相比握手信號控制的IDMA傳輸,在這種方式下,PowerPC內核除了需要初始化IDMA通道以外還要以命令的形式啟動(dòng)每一次的傳輸,所以要占用多一些的內核資源。不過(guò),在一次傳輸啟動(dòng)之后最多可以傳輸4 GB的數據,所以只要每次傳輸的數據長(cháng)度比較長(cháng),內核寫(xiě)一個(gè)寄存器的額外開(kāi)銷(xiāo)就完全可以忽略不計。同時(shí),由于內部命令觸發(fā)方式不需要握手信號,不需要頻繁地每幾個(gè)字節就競爭一次總線(xiàn)控制權,所以這種方式的傳輸效率更高、傳輸速度更快。內部命令觸發(fā)方式是以空間換時(shí)間——用前端大的緩沖區來(lái)?yè)Q取傳輸速度的提升。
考慮到主控板上軟硬件系統的瓶頸都在于總線(xiàn)帶寬,而存儲資源相對比較豐富,所以選擇CP命令控制的IDMA傳輸作為數據流從FPGA到SDRAM的傳輸方式。
2 DMA傳輸方案設計
FPGA和MPC8260間的數據傳輸接口設計如圖3所示。圖中左側FPGA,通過(guò)16位數據線(xiàn)、10位地址線(xiàn)、2根中斷請求線(xiàn)和一些讀寫(xiě)控制信號線(xiàn)連接到右側的MPC8260。MPC8260通過(guò)64位數據線(xiàn)與本地內存SDRAM相連。
圖3 IDMA傳輸設計框圖
FPGA內部分配有兩個(gè)大的存儲空間,用于輪流緩沖從數據源接收到的數據。任何一個(gè)緩沖區收滿(mǎn)后,繼續接收的數據保存到下一個(gè)緩沖區,同時(shí)以中斷的方式觸發(fā)MPC8260啟動(dòng)相應的IDMA通道把數據傳到SDRAM中。IDMA控制、數據同步和錯誤處理都由MPC8260完成,FPGA只負責收發(fā)數據和觸發(fā)中斷。下面分別介紹二者的程序設計。
2.1 MPC8260程序設計
MPC8260內部的程序處理流程如圖4所示。MPC8260預先初始化兩個(gè)IDMA通道:通道的源地址和傳輸數據長(cháng)度等信息與FPGA中的緩沖區一一對應。當收到FPGA的中斷信號之后,如果此時(shí)對應的IDMA通道空閑,則在中斷處理程序中發(fā)出CP命令開(kāi)始接收數據,同時(shí)將對應的IDMA通道置忙狀態(tài);否則,在FPGA中可能發(fā)生了未讀取的數據被覆蓋的情況,MPC8260進(jìn)入錯誤處理程序。在數據傳輸結束時(shí)由DMA控制器發(fā)送CPM內部中斷到內核,在中斷處理程序中一方面要恢復IDMA通道的參數設置,另一方面要把該IDMA通道置閑狀態(tài)等待下一次傳輸的開(kāi)始。
MPC8260程序的核心部分是IDMA通道設置和中斷處理。
圖4 MPC8260傳輸處理流程
2.1.1 IDMA通道設置
與一般的DMA通道設置一樣,IDMA通道設置的主要參數包括:源地址、目的地址和傳輸數據長(cháng)度。除此之外,MPC8260的 IDMA通道設置還包括通道模式、緩沖區和中斷配置等,所涉及的寄存器比較多,配置比較復雜。IDMA通道設置的邏輯結構如圖5所示。
圖5 IDMA通道設置的邏輯結構框圖
BD(Buffer Descriptors)表是用于指定傳輸方式、源/目的地址和數據長(cháng)度等基本信息的數據結構。BD表的基地址由參數RAM中IBASE寄存器的值指定。除IDMA BD表的基地址之外,IDMA參數RAM內還存放有IDMA BD指針、IDMA傳輸緩沖區的起始地址、IDMA傳輸緩沖區大小和DMA通道模式等IDMA通道信息。IDMA參數RAM的基地址由參數RAM中IDMAx_BASE寄存器的值指定。IDMAx_BASE寄存器的地址是固定的,如IDMA1_BASE在偏移RAM基地址0x87FE的位置。CP就是通過(guò)IDMAx_BASE寄存器找到IDMA參數RAM,再通過(guò)IBASE找到BD表的順序初始化IDMA通道的。具體的寄存器配置可以參考文獻[1]第19章的IDMA編程示例。
為了提高通道的傳輸速率,系統中IDMA通道初始化應該注意以下幾點(diǎn):
?、?nbsp; 需要在SIU中為FPGA配置UPM模式控制MPC8260和FPGA之間的突發(fā)讀寫(xiě)。不要使用通用目的片選機(GeneralPurpose Chipselect Machine,GPCM)模式。因為MPC8260內存控制的GPCM模式不支持突發(fā)傳輸,IDMA工作在GPCM模式下一方不論傳輸數據的長(cháng)度是否滿(mǎn)足突發(fā)的要求,都只能以普通的單次讀寫(xiě)進(jìn)行。
?、?nbsp; 把FPGA當作存儲器操作,IDMA工作在內存到內存的雙地址模式下,緩沖區設為最大的2 KB。
?、?nbsp; BD表的配置應該與FPGA中的緩沖區一一對應。BD表結構中的CM(Continuous Mode)位應該設置為緩沖鏈模式,在每一個(gè)BD表傳輸完之后,清BD表的有效位;同時(shí),CP根據下一個(gè)BD表的值自動(dòng)裝載IDMA寄存器進(jìn)行后面的傳輸。
IDMA通道初始化以后等待CP發(fā)出START_IDMA命令開(kāi)始傳輸。在最后一個(gè)BD表傳輸結束時(shí)觸發(fā)中斷信號通知PowerPC內核本次傳輸過(guò)程的完成。傳輸過(guò)程中會(huì )發(fā)生改變的通道設置寄存器包括IDMA BD表指針、源地址、目的地址和BD表有效位等,所以在BD表傳輸結束的中斷處理程序中需要恢復這些寄存器為下一次傳輸作準備。
評論