文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2015.08.036
中文引用格式: 李昱青,邱柯妮,張偉功,等. 基于PCIe的DMA傳輸在UM-BUS測試系統中的設計與應用[J].電子技術應用,2015,41(8):128-130,134.
英文引用格式: Li Yuqing,Qiu Keni,Zhang Weigong,et al. Design and application of DMA transmission based on PCIe for the test system of UM-BUS[J].Application of Electronic Technique,2015,41(8):128-130,134.
0 引言
動態可重構高速串行總線(UM-BUS)是一種利用多通道冗余方式來實現總線動態容錯功能的新型總線[1]。
為了驗證UM-BUS總線在傳輸速率、帶寬靈活性、動態容錯能力以及故障隔離能力等方面的優勢[2],本文提出UM-BUS總線測試系統。實現測試系統功能的基礎是采集總線上傳輸的數據包,UM-BUS測試系統中的數據采集模塊首先將采集到的總線數據緩存到SDRAM存儲器中,再將數據傳輸到PC進行分析和處理。
本文采用PCIe總線實現數據采集模塊與PC之間的通信,在研究PCIe總線協議和端點核(PCIe Endpoint Block)的基礎上,使用VIRTEX5系列XC5VLX85T芯片實現了PICe接口硬件電路,設計了基于FPGA的PCIe總線直接內存存取(Direct Memory Access,DMA)數據傳輸方案。該方案不僅實現了數據從PC內存通過PCIe總線傳輸至SDRAM內存芯片中存儲,同時能夠將SDRAM芯片中存儲的數據讀出,并通過PCIe總線接口將數據傳輸回PC內存顯示。
1 研究背景
1.1 UM-BUS總線介紹
如圖1所示,UM-BUS采用一種多線路并發冗余的總線型拓撲結構,它最多可使用32條通道并發進行數據傳輸,能夠對31個通道的故障進行動態容錯[2]。
1.2 UM-BUS測試系統簡介
UM-BUS總線的測試系統主要實現3個功能:無過濾監聽總線通信過程、故障注入以及總線狀態分析[3]。實現PC對UM-BUS總線上傳輸數據包的接收和處理功能是實現總線測試功能的基礎。
為了讓PC及時分析和處理測試系統采集到總線數據,本文采用PCIe2.0技術完成UM-BUS測試系統中數據與PC之間的傳輸。
2 基于PCIe的DMA傳輸方案設計
本方案設計中,FPGA是最關鍵部分。它主要包括測試系統中數據的采集模塊、SDRAM控制時序模塊、用于在硬核的用戶接口和傳輸接口實現PCIe時序邏輯的PCIe的控制模塊。圖2是基于PCIe的數據傳輸系統結構圖,其中寬箭頭指向的模塊是本文設計的數據傳輸系統中重點設計的模塊。
UM-BUS測試系統將采集到的總線數據緩存在SDRAM存儲器中。PCIe控制模塊根據PC發出的數據傳輸請求,將SDRAM中存儲的總線數據傳輸到PC上;PCIe控制模塊也可以根據PC發出的數據傳輸請求,將數據從PC內存通過PCIe接口向下傳輸到FPGA內部,并通過FPGA內部的SDRAM控制邏輯將數據傳輸到的SDRAM內存芯片中存儲。
本文利用Xilinx官網提供的IP核來實現基于PCIe總線的DMA數據傳輸方式設計。圖3是IP核的功能框圖及各個接口[4]。
各個接口的功能:用戶邏輯接口用于與 PCIe的IP 核通信;配置接口實現主機對IP 核的配置;物理層接口用于與根復合體或橋連接;系統接口含有時鐘信號和系統復位信號。
本文應用PCIe2.0技術,實現UM-BUS總線測試系統與PC之間的通信,通過編寫PCIe用戶邏輯接口程序實現PCIe的數據傳輸功能。
3 硬件設計方案
本文在FPGA中設計了PCIe的控制模塊和SDRAM控制模塊。PCIe 的控制模塊有PCIe讀寫時序控制、對SDRAM控制器的控制。SDRAM控制模塊是一個雙口SDRAM控制器,它的左口邏輯作為PCIe總線的DMA寫傳輸時數據的讀出口,右口邏輯作為PCIe總線的DMA讀傳輸時數據的寫入口。本設計的硬件部分主要有PCIe 的控制模塊和SDRAM控制模塊。下面主要介紹這兩個模塊的設計。
3.1 PCIe的控制模塊設計
本設計中的PCIe總線接口卡含有一片XC5VLX85T芯片,使用該FPGA實現PCIe總線數據傳輸的時序邏輯,圖4為總線接口卡FPGA的程序結構框圖及用戶邏輯結構圖[5]。
XC5VLX85T芯片內嵌的PCIe IP核為Endpoint Block plus for PCI Express,實現了PCIe總線的基本協議功能。
為了實現PCIe的數據傳輸功能,主要是要進行用戶邏輯的設計。用戶邏輯與PCIe的事務層接口直接連接,可發送或接收事務層數據包,用以實現BAR0空間的訪問功能和DMA讀寫功能[6]。下面將分存儲器讀寫兩個操作以及DMA數據傳輸方式的實現來說明PCIe用戶邏輯的設計。
3.1.1 Burst存儲器寫操作的設計與實現
對于存儲器寫請求,實現的主要方法是數據接收控制器EP_RX將接收到的TLP包頭中各個字段進行正確解析,并區分是單字寫還是Burst寫請求,以及確定寫操作的數據長度。如果是單字寫請求,就將TLP包中的64 bit數據存入寄存器中;如果是Burst寫請求,就將TLP包中的有效數據載荷區的數據按照64 bit寫入雙口緩沖區,每過一個時鐘周期地址自動增加,直到數據全部存入到雙口緩沖區,一次Burst寫操作完成。
3.1.2 Burst存儲器讀操作的設計與實現
對于存儲器讀請求,實現的主要方法是數據接收控制器EP_RX將接收到的TLP包頭中各個字段進行正確解析,并將請求數據的起始地址和數據長度發送給數據發送控制器EP_TX,然后啟動EP_TX發送完成數據。
3.1.3 DMA功能的實現
本文采用DMA的方式用于FPGA外部存儲器SDRAM與系統內存之間的數據傳輸。采用DMA方式訪問外部存儲器的最大優勢是CPU配置完DMA狀態機后可繼續執行其他指令操作。DMA狀態機通過請求PCIe 總線中斷完成數據傳輸。
本設計中DMA寫傳輸的數據包格式是存儲器寫請求TLP,DMA讀傳輸的數據包格式是存儲器讀請求TLP與存儲器讀完成TLP[7]。
下面以DMA寫為例說明DMA的設計。PCIe的DMA寫數據傳輸方式主要是將TLP包頭中的各個字段進行正確填充,并將數據按照64 bit并行放在TLP的包頭,然后傳輸給PCIe IP硬核,最后硬核以PCIe總線協議串行傳輸給PC。DMA寫數據傳輸的狀態機轉換圖如圖5所示。
DMA在進行數據傳輸時,傳輸一次TLP包的最大載荷為128 B,圖5中當M=128時,表明包的一次傳輸結束。此時判斷當前傳輸的字節數與DMA所要傳輸的字節數是否相等,如果不相等則繼續傳輸,直至所有數據傳輸完畢,DMA傳輸結束。
3.2 高速緩存SDRAM控制模塊設計
高速緩存SDRAM控制模塊主要實現SDRAM控制器的功能,進而實現對系統中的高速數據進行緩存的功能。SDRAM控制器直接控制SDRAM存儲器進行數據的讀取。為了提高整個測試系統的可靠性和高速性,本文使用的SDRAM控制器采用猝發式數據讀寫模式,可以高速實時地向SDRAM讀寫數據。
由于PCIe IP核傳輸的數據是64 bit,而測試系統中SDRAM存儲器對數據位寬要求是32 bit,因此要完成對數據位寬的匹配。在進行數據位寬匹配時,一定要兼顧到PCIe數據傳輸的時序邏輯。本文采用異步FIFO來實現數據位寬的匹配。由于數據傳輸時采用DMA的方式,所以在進行DMA讀寫操作時都需要異步FIFO來完成數據匹配功能。圖6為在進行DMA寫操作時PCIe和SDRAM存儲器進行數據位寬匹配的狀態機,圖7為在進行DMA讀操作時PCIe和SDRAM存儲器進行數據位寬匹配的狀態機。
4 結果與驗證
本文設置使用PCIe的x1通道,經過測試軟件多次測試,從PC經過PCIe總線存儲到SDRAM存儲器的數據正確,滿足PCIe總線傳輸數據的時序要求,同時滿足SDRAM存儲器的數據讀寫時序要求。DMA數據傳輸操作正確,且速度可穩定達到200 MB/s以上,滿足UM-BUS總線對測試系統數據傳輸速率的要求。
經過多次測試,發現傳輸速率與傳輸數據包的大小(size)以及包的個數(tlp)有關。設定數據包的大小為32個雙字,當數據包的大小和包的個數越多時,數據的傳輸速率呈現下降趨勢。圖8為DMA寫操作傳輸數據包的大小(size)為固定值32個雙字的傳輸速率圖。
5 結束語
本文實現的基于PCIe總線DMA方式的數據傳輸系統可以完成上位機與SDRAM存儲器通過PCIe總線以DMA的方式進行數據傳輸的功能。
本文的設計方法釆用內嵌在FPGA的PCIe IP核,降低了硬件設計復雜度。實際工程應用表明該PCIe接口達到了較高的數據傳輸速率,滿足UM-BUS總線測試系統對高速數據傳輸的需求。
參考文獻
[1] 王嘉佳.動態可重構總線控制器的設計與實現[D].北京:首都師范大學,2012.
[2] 鄧哲,張偉功,朱曉燕,等.動態可重構總線數據傳輸管理方法設計與實現[J].計算機工程,2013,39(1):264-269.
[3] 陜天龍,周繼芹,王春亮,等.USB在動態可重構總線測試系統中的設計[J].計算機工程與設計,2015,36(2):514-519.
[4] Xilinx DS551.LogiCORE IP Endpoint Block Plus v1.15 for PCI Express[Z].2011.
[5] Xilinx.LogiCORE1M IP Endpoint Block Plus vl.14 for PCI Express user guide[Z].USA:Xilinx,2010.
[6] 牛少平,田澤,廖寅龍.PCI Express專用DMA控制器設計與實現[J].計算機技術與發展,2012,22(7):174-176.
[7] 王齊.PCI Express體系結構導讀[M].北京:機械工業出版社,2010.