劉 佳,楊潔明,趙寶峰
(1.山西職業技術學院電子信息工程系,太原 030006;2.太原理工大學機械工程學院,太原 030024;3.太原理工大學礦業工程學院,太原 030024)
基于MPMC的高性能DMA控制器的設計*
劉 佳1,2,楊潔明2,趙寶峰3*
(1.山西職業技術學院電子信息工程系,太原 030006;2.太原理工大學機械工程學院,太原 030024;3.太原理工大學礦業工程學院,太原 030024)
依據ATA6協議,在FPGA上設計對IDE硬盤的控制模塊,同時使用Xilinx的多端口內存控制器MPMC IP核,實現能夠訪問外部DDR2_SDRAM的NPI接口控制器。在此基礎上,利用嵌入式FPGA開發環境,設計頂層控制IP核,完成硬盤控制器與NPI接口的有效銜接。在MicroBlaze的控制下,數據在硬盤與DDR2_SDRAM之間直接高速傳輸,實現了高性能DMA控制器的功能,從而提高了主機CPU利用率。設計在Xilinx的XUPV5_LX110T開發平臺得到了驗證。
ATA硬盤;FPGA;MPMC;NPI接口
嵌入式系統蓬勃發展,而基于FPGA的可配置嵌入式系統開發技術[1]不僅滿足了嵌入式系統要求,而且降低了設計難度、縮短了開發周期[2]。但由于嵌入式FPGA片內資源有限,使得片內系統與外設的大量數據交換成為限制系統性能的因素。為解決這一問題,本文在ATA6協議的基礎上,借助FPGA開發板的通用IO端口[3],利用Xilinx公司提供的多端口內存控制器MPMC(Multi-Port Memory Controller)IP核[4],設計了一款高性能的DMA IDE硬盤控制器,在此基礎上,在Xilinx嵌入式開發平臺XPS下設計頂層控制IP核模塊,使Microblaze處理器能夠通過PLB總線將讀寫命令發送給頂層控制模塊,有效調度底層接口,實現IDE硬盤數據與DDR2_SDRAM進行DMA操作[5],從而提高系統處理數據的速度,增強系統性能。
本文中FPGA開發板選用采用Xilinx的XUPV5_LX110T[6],包含兩片Xilinx XCF32P Platform Flash PROMs(32 Mbyte each)和可配置64位的256 Mbyte DDR2 SODIMM外部存儲器、IO端口等設備。
設計主要包括3個模塊:頂層控制IP核接口模塊、NPI接口控制模塊、IDE硬盤控制器模塊。總體框架如圖1所示。

圖1 系統結構
圖1中,NPI接口控制模塊實現與外部DDR2_SDRAM的數據傳輸,ATA硬盤控制器模塊實現對IDE硬盤的操作,頂層控制模塊接收來自PLB總線的命令,同時實現對ATA硬盤控制器和NPI接口控制器的有效銜接。
在XPS環境下,搭建基于32位的MicroBlaze處理器的嵌入式FPGA系統,并添加MPMC IP核及DDR2_SDRAM、串口等外部設備,PLB總線等設備由系統自動生成。系統搭建時需要配置MPMC,將PORT0配置成PLB總線接口,將PORT1配置成NPI接口,并讀寫模式設置成SRL,內存選擇板上型號為mt4htf3264-53e的256M DDR2_SDRAM。
2.1 ATA硬盤控制器模塊
硬盤控制器主要是在分析ATA-6協議[7]基礎上,實現對指令接收及解析、硬盤訪問時序控制、系統監控及差錯處理、傳輸數據以及CRC校驗等操作。
ATA硬盤控制器控制的接口寄存器及信號包括:
(1)命令塊寄存器,主機通過該寄存器讀取設備的狀態或向設備傳輸命令,其主要包括:柱面號高(Cylinder High)8位寄存器、柱面號低(Cylinder Low)8位寄存器、設備/磁頭(Device/Head)寄存器、扇區數(Sector Count)寄存器、扇區號(Sector Number)寄存器、命令(Command)寄存器、狀態(Status)寄存器、特征(Features)寄存器、錯誤(Error)寄存器、數據(Data)寄存器。
(2)控制塊寄存器,該寄存器主要用來替換狀態或控制設備,其主要包括:設備控制(Device Control)寄存器、備用狀態(Alternate Status)寄存器、驅動器地址(Drive Address)寄存器。
(3)ATA控制器接口信號包括:選擇控制寄存器或是設備寄存器CS(1:0);寄存器或數據端口選擇信號DA(2:0);雙向8 bit或16 bit數據端口DD(15:0);寄存器讀、主機準備好數據傳輸、主機向設備傳輸UDMA數據控制信號DIOR_/HDMARDY_/HSTROBE;寄存器寫、終止UDMA數據傳輸控制信號DIOW_/STOP;主機響應設備DMARQ請求信號DMACK_;設備準備好與主機傳輸數據DMARQ;設備數據傳輸控制、設備聲明準備好接收數據以及設備控制UDMA數據到主機信號IORDY/DDMARY_/DSTROBE;主機對設備進行硬件復位信號RESET。圖2為硬盤控制器模塊。
命令解析模塊監控并接收上層發送的命令代碼,然后將指令所需的基本參數鎖存并對硬盤進行相應操作,本設計采用100 MHz的系統時鐘。ATA硬盤控制器的主要控制模塊為硬盤訪問控制模塊,其主要包括數據傳輸控制和硬盤寄存器讀寫控制兩部分。

圖2 硬盤控制器模塊
CRC校驗模塊用來判斷傳輸數據的可靠性,在本設計中利用16位的CRC校驗算法來實現,差錯監控模塊實現指令執行錯誤等異常情況的處理。片內BRAM實現數據讀寫雙向緩存,并與NPI接口相連,實現與NPI控制器的數據傳輸。
2.2 NPI接口控制器模塊
NPI控制模塊采用64-bit數據端口[8],通過端口實現與MPMC和ATA控制器的BRAM連接,從而實現與外部DDR2_SDRAM的數據批量交換。接口模塊如圖3所示。NPI控制模塊一次請求傳輸64-word的數據,即傳輸數據256 byte,32-bit的地址請求寬度,滿足64-word對齊,可訪問4GB的內存空間,時鐘采用200 MHz的MPMC的基準時鐘。

圖3 NPI接口控制器模塊
NPI接口的主要信號端口包括:讀寫請求的內存起始地址PIM_Addr(31:0);讀寫操作請求信號PIM_AddrReq;讀寫標志信號PIM_RNW;單周期傳輸數據量標志PIM_Size(2:0);MPMC初始化完成標志信號PIM_InitDone;請求應答信號PIM_AddrAck;待寫入內存的64位數據信號PIM_WrFIFO_DATA(63:0);寫數據有效字節標志PIM_WrFIFO_BE(7:0);寫數據使能信號PIM_WrFIFO_Push;寫MPMC緩沖區數據小于一個數據寬度標志信號PIM_WrFIFO_EMPTY;讀數據使能標志信號PIM_RdFIFO_POP;讀數據PIM_RdFIFO_DATA(63:0);讀內存請求起始地址PIM_RdFIFO_Addr(31:0);讀MPMC緩存區少于一個數據寬度標志信號PIM_RdFIFO_EMPTY;讀數據輸出延時時間參數PIM_RdFIFO_Latency(1:0)等。
2.3 頂層控制IP核模塊
頂層控制IP核模塊[9]一方面實現了PLB從設備的總線接口[10],使處理器能夠通過寄存器方式訪問用戶IP核,另一方面實現對ATA硬盤控制器以及對NPI接口控制器的有效調度[11],完成處理器的指令請求。內部結構如圖4所示。

圖4 頂層控制IP核模塊
PLB總線接口模塊[12]參照PLB總線標準接收來自處理器的相關請求,并反饋底層模塊的當前狀態給主要,主要是以寄存器方式訪問自定義IP核,采用32-bit數據寬度,時鐘頻率為系統總線時鐘100 MHz,在接收到處理器指令后,將參數和命令交給任務控制模塊,由任務控制模塊觸發底層時序控制模塊實現本次數據交換任務。通過以上分析,讀寫硬盤一個扇區的數據需要的時間為兩個NPI傳送周期,處理器讀寫n個扇區的數據需要2n個NPI傳送周期。

圖5 讀硬盤扇區波形圖
下面列出處理器測試的C語言代碼,通過PLB總線將指令及參數發送給自定義IP核,完成DDR與硬盤之間的數據傳輸。
u32*addra=(Xuint32*)XPAR_ATA_IP_0_BASEADDR;
u8*addrb=(Xuint8*)XPAR_DDR2_SDRAM_MPMC_BASEADDR;
int status;
xil_printf("read status:%x ",addr[0]);//打印系統狀態
addra[6]=0x55;//軟件復位系統(自定義指令)
addra[6]=0xAA;//硬件復位系統(自定義指令)
addra[0]=0x0;//傳送數據讀入到內存地址參數
addra[1]=0x1;//傳送扇區數參數
addra[2]=0x0;//傳送硬盤設備號
addra[3]=0x0;//傳送LBA0參數
addra[4]=0x0;//傳送LBA1參數
addra[5]=0x0;//傳送LBA2參數
addra[6]=0xca;//傳送讀命令
while(addr[0]!=0){asm("nop");}//等待讀命令完成
for(j=0;j<2;j++){
for(i=0;i<256;i++){
addrb[j*256+i]=i;}
}//寫一個扇區數據到DDR2_SDRAM
addra[0]=0x0;傳送需要寫入硬盤數據的內存地址參數
addra[1]=0x1;
addra[2]=0x0;
addra[3]=0x10;
addra[4]=0x0;
addra[5]=0x0;
addra[6]=0xca;//傳送寫命令
設計采用Xilinx的XUPV5_LX110T 開發板進行驗證,分為模塊驗證與系統驗證。ATA硬盤控制器在ISE10.1下進行驗證,NPI接口及后續的系統驗證在嵌入式開發環境EDK10.1下進行。在ISE10.1下用ChipScope Pro抓到的讀硬盤扇區數據的信號波形圖如圖5所示。
從邏輯0扇區的數據標志AA55及信號變化可以看出,ATA控制器讀扇區正常,通過其他的反復讀寫測試,硬盤控制器模塊能夠正確讀寫硬盤扇區。
在EDK10.1下,測試NPI接口,寫入32個64-bit數據,然后讀出,如圖6所示。
系統測試采用C語言程序將數據寫入內存某地址,然后向PLB總線發送寫硬盤指令和參數將數據寫入硬盤,再通過向PLB總線發送讀硬盤指令及參數,將寫入的數據讀到內存的其他地址,通過串口顯示內存中的數據,進行對比數據一致,誤碼率較低。數據最高讀寫速度為66 Mbyte/s,同時控制器能與多種型號硬盤連接進行數據傳輸,性能穩定。

圖6 寫MPMC時序波形圖

圖7 讀MPMC時序波形圖
通過驗證,基于MPMC的DMA硬盤控制器總體能夠在MicroBlaze處理器的控制下完成硬盤數據直接與DDR2_SDRAM的數據交換,大大提高了系統處理數據的能力,有效節省了CPU資源,有很好的實用前景。
[1] 趙峰,馬迪銘,孫煒. FPGA上的嵌入式系統設計實例[M]. 西安:電子科技大學,2008:43-58.
[2] 方傳杰,朱健,房志東. 高速實時數據采集智能控制器的設計與實現[J]. 電子技術,2014(5):28-30.
[3] 陳方. 專用USB接口仿真與測試[D]. 北京:北京交通大學,2015.
[4] 張威. FPGA中個人云存儲系統的設計與研究[D]. 太原:太原理工大學,2014.
[5] 劉喬壽,張毅. SPCE061A與IDE硬盤之間的數據接口[J]. 信息技術,2015(12):51-53.
[6] 儲昭賢,施慧彬. 基于FPGA的16位堆棧處理器的設計[J]. 微電子學與計算機,2012(2):23-26.
[7] 黃夢玲,翟正軍,索曉杰. ATA總線控制器接口在固態硬盤中的應用[J]. 計算機測量與控制,2013(7):1976-1977.
[8] 范曉星,席鵬飛,孟琪. 基于EDK的高速數據收發嵌入式用戶IP核設計[J]. 電子科技,2015(2):165-168.
[9] 彭維. 基于PLB總線的用戶IP核接口技術研究[D]. 合肥:合肥工業大學,2011.
[10] 張興堂. 基于FPGA的智能網絡接口設計[J]. 計算機測量與控制,2014(6):1884-1886.
[11] 彭宇,仲雪潔,王少軍. 基于FPGA線性方程組的存儲優化設計[J]. 計算機工程,2013(4):287-290.
[12] 徐向前,劉新杰,羅歡. 基于FPGA的混沌序列發生器的設計[J]. 電子世界,2014(1):153-155.
Design of High-Performance DMA Controller Based on MPMC*
LIUJia1,2,YANGJieming2,ZHAOBaofeng3*
(1.Electronic Information Engineering Department,Shanxi Polytechnic College,Taiyuan 030006,China;2.College of Mechanical Engineering,Taiyuan University of Technology,Taiyuan 030024,China;3.College of Mining Engineering,Taiyuan University of Technology,Taiyuan 030024,China)
According to ATA6 protocol,the control module to IDE hard disk is achieved on FPGA,and using the MPMC IP core of Xilinx,the NPI interface controller is designed that can access the external DDR2_SDRAM. Utilizing embedded FPGA development environment and designing top control IP cores,the effective connection between hard disk controller and NPI interface is completed. Then direct fast data transmission between hard disk and DDR2_SDRAM is implemented under MicroBlaze control. Implementing the high-performance DMA Controller,increasing the host’s CPU utilization,the design is verified on Xilinx XUPV5_LX110T development platform.
ATA hard disk;FPGA;MPMC;NPI interface

項目來源:國家自然科學基金青年科學基金項目(61303207);教育部2012年高等學校博士學科點專項科研基金聯合課題項目(20121402120020);山西省科學技術發展項目工業部分(20120321024-01)
2016-07-25 修改日期:2016-11-29
TP319
A
1005-9490(2017)03-0626-05
C:7200
10.3969/j.issn.1005-9490.2017.03.022