《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA的PCIe總線接口的DMA控制器的設計
基于FPGA的PCIe總線接口的DMA控制器的設計
2018年電子技術應用第1期
王之光,高清運
南開大學 電子信息與光學工程學院 天津市光電子薄膜器件與技術重點實驗室,,天津300350
摘要: 采用Altera公司FPGA提供的PCIe PHY IP和Synopsys公司提供的PCIe Core IP提出了一種PCIe總線接口的DMA控制器的實現(xiàn)方法,,并搭建了4通道的PCIe傳輸系統(tǒng)。利用Synopsys VIP驗證環(huán)境對系統(tǒng)進行了仿真驗證,,利用Altera Stratix V EX系列FPGA搭建平臺進行了實際傳輸驗證,,驗證了數(shù)據(jù)讀寫的正確性,在進行DMA讀寫事務操作時總線帶寬峰值分別達到了1 547 MB/s和1 607 MB/s,,能滿足大部分實際應用中對數(shù)據(jù)傳輸?shù)乃俾室蟆?
中圖分類號: TP274
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.172445
中文引用格式: 王之光,,高清運. 基于FPGA的PCIe總線接口的DMA控制器的設計[J].電子技術應用,2018,,44(1):9-12,
英文引用格式: Wang Zhiguang,,Gao Qingyun. Design of DMA controller of PCIe bus interface based on FPGA[J]. Application of Electronic Technique,2018,,44(1):9-12,

Design of DMA controller of PCIe bus interface based on FPGA
Wang Zhiguang,,Gao Qingyun
College of Electronic Information and Optical Engineering,Key Laboratory of Photo-electronic Thin Film Devices and Technology,, Nankai University,,Tianjin 300350,China
Abstract: A method to implement DMA controller of PCIe bus interface based on Altera FPGA PCIe PHY IP and Synopsys PCIe Core IP was proposed in this paper,,and a 4-lane PCIe transmission system was builted. The correctness of reading and writing data was proved through the stimulation in Synopsys VIP environment and transfer verification in Altera Stratix V EX series FPGA platform. The bandwidth of DMA read and DMA write can achieve 1 547 MB/s and 1 607 MB/s respectively. The DMA controller can satisfy the demands of data transfer rates in most practical applications.
Key words : PCIe,;field programmable gate array(FPGA);direct memory access(DMA),;IP

0 引言

    隨著通信技術的不斷發(fā)展,,對數(shù)據(jù)傳輸系統(tǒng)的速度與數(shù)據(jù)傳送質量的要求也在不斷提高。由Intel在2001年提出的第三代I/O總線技術——PCI Express總線技術,,采用高速差分串行的方式進行數(shù)據(jù)傳輸,,具有高帶寬、高可靠性,、高拓展性等優(yōu)點,,很好地彌補了PCI、PCI-X總線的不足[1-3],。

    本文基于PCIe 2.0協(xié)議,,利用Altera Transceiver PHY IP、Synopsys PCIe Core IP和AXI總線,,提出了一種DMA控制器,,并搭建了一個在FPGA端和PC之間的高速數(shù)據(jù)傳輸系統(tǒng)。實現(xiàn)了寄存器讀寫操作(單字讀寫)和DMA讀寫操作,,并利用Synopsys VIP環(huán)境下進行的系統(tǒng)仿真和上位機軟件進行觀察并驗證了數(shù)據(jù)讀寫的正確性,。

1 設計方案

1.1 基礎模塊

1.1.1 Altera Stratix V GX系列FPGA與PCIe PHY IP

    本設計使用Stratix V GX系列下的5SGXEA7K2F40C2N FPGA芯片[4],該芯片內部集成了PCIe PHY IP硬核模塊,。PCIe PHY IP硬核包括三個部分,,如圖1,PHY IP Core for PCI Express(PIPE)集成了PCIe總線的物理層,。Transceiver Reconfiguration Controller IP Core可以動態(tài)重新配置模擬參數(shù),。Transceiver PHY Reset Controller IP Core作為收發(fā)器的復位模塊,,確保了PCIe鏈路的初始化[5-6]

wdz1-t1.gif

1.1.2 Synopsys IP與VIP

    VIP顧名思義就是驗證IP(Verification IP),,它為一些標準的接口提供標準的總線行為模型[7],。Synopsys公司提供了PCIe總線的Controller IP,實現(xiàn)了PCIe總線數(shù)據(jù)鏈路層和事務層的功能,,并內置了DMA,,同時也提供了針對PCIe總線的VIP,為PCIe總線提供了標準的總線行為模型,,模擬了上位機的功能[8],。

1.1.3 AXI總線

    AXI(Advanced eXtensible Interface)總線是一種高性能、高帶寬,、低延遲的總線協(xié)議,,有一個顯著的特點,地址/控制和數(shù)據(jù)通道是分開的,,共有5個單向通道,,分別為read address channel,write address channel,,read data channel,,write data channel,write response channel[9],,減少了延時,,提高了DMA的效率。

1.2 總體方案設計

    本設計采用的整體架構如圖2所示,,為Altera PHY IP+Synopsys PCIe Core IP+AXI總線+Application,。

wdz1-t2.gif

    為了利用Synopsys 的PCIe VIP環(huán)境,采用了Synopsys PCIe Core IP,。在PCIe事務層和應用側之間采用了AXI總線接口,,可以在以后的設計中進行方便的拓展和替換。應用側設計實現(xiàn)了PCIe DMA控制器的功能,,并集成了兩塊RAM,,一塊大小為128 DW,用來存儲寄存器讀寫的數(shù)據(jù),;另一塊大小為512 DW,,用來存儲DMA讀寫的數(shù)據(jù)。

2 DMA控制器的設計與實現(xiàn)

2.1 應用端DMA操作流程

    應用端發(fā)起的DMA操作流程如圖3所示,,最終DMA讀操作實現(xiàn)的結果為將主機側的數(shù)據(jù)以DMA的方式寫入到應用端的內存中,。DMA寫操作實現(xiàn)的結果為將應用端的數(shù)據(jù)以DMA的方式寫入到主機側的內存中。圖3為應用端發(fā)起的DMA操作具體的流程。

wdz1-t3.gif

    (1)主機側通過寄存器寫的方式,,將DMA讀寫標志,、DMA長度、DMA源和目的內存地址寫入到應用端的寄存器中,;

    (2)應用端中的Slave模塊將這些命令發(fā)送給Master模塊,;

    (3)Master模塊按照Synopsys PCIe Core IP自定義的Dbi總線的方式,再將這些命令傳送給PCIe Core IP內部的寄存器,;

    (4)PCIe Core IP接收DMA讀寫指令,并持續(xù)操作Master接口以實現(xiàn)后續(xù)操作,;

    (5)當為DMA讀時,,PCIe Core IP的內置DMA從主機側的“源內存地址”中讀取到目標數(shù)據(jù);當為DMA寫時,,PCIe Core IP的Master接口通過AXI總線以讀的方式從“源內存地址”讀取到目標數(shù)據(jù),;

    (6)當為DMA讀時,PCIe Core IP的Master獲得DMA讀取到的目標數(shù)據(jù),,并通過AXI總線,,以寫的方式寫入到應用端的“目的內存地址”中;當為DMA寫時,,Master獲得目標數(shù)據(jù)后,,內置DMA將數(shù)據(jù)發(fā)送到主機側的“目的內存地址”中;

    (7)當DMA操作完成,,PCIe Core IP會通知應用端的中斷模塊,;

    (8)應用端的中斷模塊會向主機側提交中斷。

2.2 應用端DMA控制狀態(tài)機

    應用端只需將主機側寫入的DMA讀寫標志,、DMA長度,、DMA源和目的內存地址以及DMA啟動信號寫入到PCIe Core IP中的內部寄存器,并等待DMA操作的完成,,給出中斷信號,。

    下面為應用端詳細的DMA控制狀態(tài)機,如圖4所示,,狀態(tài)機把DMA讀操作和DMA寫操作整合到了一起,,減少了代碼量。

wdz1-t4.gif

    (1)IDLEPHASE:空閑狀態(tài),。當啟動信號start_flag有效時,,跳轉ENGINE_ENABLE狀態(tài);

    (2)ENGINE_ENABLE:判斷DMA讀寫類型信號wr_rdn_flg,,當wr_rdn_flg為0,,即為DMA讀(PC到FPGA)時,使能DMA讀引擎;當wr_rdn_flg為1,,即為DMA寫(FPGA到PC)時,,使能DMA寫引擎;

    (3)DMA_TRANS_SIZE:設置DMA數(shù)據(jù)傳輸長度,,最多一次傳輸512 DW,,最少一次傳輸1 DW;

    (4)DMA_SAR:設置DMA操作源地址(當為DMA讀時,,源地址為主機端地址,;當為DMA寫時,源地址為應用端地址),;

    (5)DMA_DAR:設置DMA操作目的地址(當為DMA讀時,,目的地址為應用端地址;當為DMA寫時,,目的地址為主機端地址),;

    (6)DMA_DOORBELL:使能DMA操作門鈴信號dma_strt,啟動DMA操作,;

    (7)DMA_WAIT_INT:等待DMA操作完成,;

    (8)DMA_INT_STATUS:讀取DMA操作中斷寄存器狀態(tài),當DMA操作完成信號dma_done有效時,,產(chǎn)生完成中斷,,并跳轉DMA_CLEAR_INT狀態(tài);

    (9)DMA_CLEAR_INT:清除中斷,,回到IDLEPHASE狀態(tài),,準備下一次DMA傳輸。

3 DMA控制器功能驗證

3.1 仿真驗證

    在完成代碼編寫之后,,在VIP環(huán)境下搭建仿真平臺,,使用Synopsys公司的仿真驗證工具VCS進行功能測試,主要測試驗證模塊能否正確對寄存器讀寫和DMA讀寫產(chǎn)生正確的反應,。

    從圖5,、圖6中可以看到,寫地址偏移為0x40,,寫數(shù)據(jù)為32’h87654321,;讀地址偏移為0x40,讀數(shù)據(jù)為32’h87654321,,由此可判斷寄存器讀寫正確,。

wdz1-t5.gifwdz1-t6.gif

    如圖7所示,由dma_strt和dma_done信號可以看出為2次DMA傳輸,,由dma_wr_rdn可看出第一次為DMA讀操作(RC端到APP側),,第二次為DMA寫操作(APP側到RC端)由dma_bc_len可看出當前DMA操作長度為2 000 Byte,即500 DW,slv_rdata和slv_wdata信號較為密集的部分分別為2次DMA操作的數(shù)據(jù),,對比這兩次數(shù)據(jù),,得知DMA操作正確。

wdz1-t7.gif

    為了更加方便地比較結果,,采取自動對比文件的方法,,即把寄存器或DMA寫的數(shù)據(jù)存放到一個文件中,再把寄存器或DMA讀回的數(shù)據(jù)存放到另一個文件中,,通過對比兩個文件,,判斷寄存器和DMA傳輸是正確的。

3.2 FPGA測試驗證

    在仿真驗證完成之后,,進行FPGA測試驗證,,將硬件部分燒錄到板卡的FPGA芯片后,通過板卡的PCIe金手指插入到PC機的主板上,,PC機重啟后檢測到PCIe硬件的插入,即可安裝對應的PCIe驅動軟件,,利用上位機進行測試,。

    上位機軟件界面如圖8所示,包括寄存器讀寫(Target操作)和DMA讀寫(Master操作)測試模塊,。

wdz1-t8.gif

    選擇“Target”操作的“dual”模式,,寄存器長度設置為118,因為前10個寄存器與DMA操作相關,,可能會觸發(fā)DMA操作,,所以在軟件中選擇跳過。點擊“啟動測試”,,數(shù)據(jù)將會被先從主機側寫到FPGA,,再從FPGA讀回到主機側,比較兩次寄存器操作的數(shù)據(jù),,即可判斷寄存器操作的正確性,。

    如圖9所示,選擇“Master”操作的“dual”模式,,點擊“memory”,,即在PC側開辟一塊內存存放數(shù)據(jù),然后點擊“啟動測試”,,數(shù)據(jù)先從PC寫到FPGA的RAM中,,接著再從FPGA回到PC,比較存放到PC內存的數(shù)據(jù)和從FPGA寫回到PC的數(shù)據(jù),,即可判斷DMA讀寫操作的正確性,。

wdz1-t9.gif

    根據(jù)DMA傳輸固定大小的數(shù)據(jù)的時間,可以計算出DMA讀寫速率,經(jīng)過多次測試,,DMA讀寫速率分別為1 547 MB/s和1 607 MB/s,。本設計采用的是PCIe Gen2、×4通道,,理論最大傳輸速率為2 000 MB/s,。分析代碼得出可能由于應用端向PCIe Core IP寫入和讀取數(shù)據(jù)過程占用了一定的時間,另外驅動程序向DMA寄存器寫入或讀取參數(shù)也占用了一些時間,,都會影響速率,。

4 結語

    本文實現(xiàn)的基于FPGA的PCIe總線接口的DMA控制器是在Altera PHY IP和Synopsys Core IP的基礎上實現(xiàn)的,利用Synopsys VIP驗證環(huán)境進行了功能仿真驗證,,并通過FPGA進行了系統(tǒng)實測,,達到了較高的傳輸速率,在Gen2,、×4模式下,,DMA讀寫操作的帶寬分別為 1 547 MB/s和1 607 MB/s,達到了預期的設計目標,。

參考文獻

[1] 陳剛,,張京,唐建.一種基于FPGA的PCIe總線及其DMA的設計方法[J].兵工自動化,,2014,,33(5):75-77.

[2] 張彪,宋紅軍,,劉霖,,等.基于PCIE接口的高速數(shù)據(jù)傳輸系統(tǒng)設計[J].電子測量技術,2015,,38(10):113-117.

[3] NAMBIAR S O S,,ABHYANKAR Y,CHANDRABADU S.Migrating FPGA based PCI Express Gen1 design to Gen2[C].2010 International Conference on Computer and Communication Technology(ICCCT).2010.

[4] Altera Corporation.Stratix V GX FPGA development board reference manual[EB/OL].www.altera.com,,2014.

[5] Altera Corporation.Altera Transceiver PHY IP Core User Guide[EB/OL].www.altera.com,,2016.

[6] Altera Corporation. IP Compiler for PCI Express User Guide[EB/OL].www.altera.com,2014.

[7] 陳靜.基于ARM的USB2.0-AHB總線橋IP的驗證方法研究以及設計實現(xiàn)[D].成都:電子科技大學,,2007.

[8] Synopsys.DesignWare PCI Express VIP User Manual[EB/OL].www.synopsys.com/products/designware/docs,,2010.

[9] AMBA AXI and ACE Protocal Specification[EB].www.arm.com,2011.

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