《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于PCIe的DMA傳輸在UM-BUS測試系統(tǒng)中的設(shè)計(jì)與應(yīng)用
基于PCIe的DMA傳輸在UM-BUS測試系統(tǒng)中的設(shè)計(jì)與應(yīng)用
2015年電子技術(shù)應(yīng)用第8期
李昱青1,2,邱柯妮1,2,張偉功1,2,徐遠(yuǎn)超1
1.首都師范大學(xué) 信息工程學(xué)院,北京100048;2.北京市高可靠嵌入式系統(tǒng)技術(shù)工程研究中心,北京100048
摘要: 動態(tài)可重構(gòu)高速串行總線(UM-BUS)是一種利用多通道并發(fā)冗余的方式來實(shí)現(xiàn)總線動態(tài)容錯(cuò)的高速串行總線。它的測試系統(tǒng)可以實(shí)現(xiàn)對總線的通信過程進(jìn)行監(jiān)測、存儲與分析。由于測試系統(tǒng)需要在數(shù)據(jù)采集終端與PC之間建立高帶寬的通信通道,設(shè)計(jì)了UM-BUS總線測試系統(tǒng)的PCIe2.0 x1通道的應(yīng)用方案,設(shè)計(jì)并實(shí)現(xiàn)了基于FPGA的PCIe總線DMA數(shù)據(jù)傳輸方案。實(shí)驗(yàn)測試結(jié)果表明,實(shí)際傳輸速度可以穩(wěn)定達(dá)到200 MB/s以上,完全滿足總線測試系統(tǒng)中對數(shù)據(jù)傳輸速率的要求。
中圖分類號: TP391
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2015.08.036

中文引用格式: 李昱青,邱柯妮,張偉功,等. 基于PCIe的DMA傳輸在UM-BUS測試系統(tǒng)中的設(shè)計(jì)與應(yīng)用[J].電子技術(shù)應(yīng)用,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.
Design and application of DMA transmission based on PCIe for the test system of UM-BUS
Li Yuqing1,2,Qiu Keni1,2,Zhang Weigong1,2,Xu Yuanchao1
1.College of Information Engineering,Capital Normal University,Beijing 100048,China; 2.Beijing Engineering Research Center of High Reliable Embedded System,Beijing 100048,China
Abstract: Dynamically reconfigurable high-speed serial bus(UM-BUS) is a novel high-speed serial bus with characteristics of dynamic fault-tolerance and multi-channel concurrency and redundancy. Its test system can provide monitoring, storage and analysis for the communication process of UM-BUS. The test system requires a high-bandwidth communication channel between the data acquisition terminal with the PC. A PCIe2.0 based solution for x1 channel is devised for the test system in this paper. Furthermore, Direct Memory Access (DMA) data transfer has been successfully implemented based on PCIe bus on the FPGA platform. The experimental results show that the actual data transfer speed can reach more than 200 MB/s. This design can fully satisfy the requirements of data transfer rate for the test system.
Key words : PCIe bus;DMA data transfer;dynamically reconfigurable high-speed serial bus;test system

    

0 引言

    動態(tài)可重構(gòu)高速串行總線(UM-BUS)是一種利用多通道冗余方式來實(shí)現(xiàn)總線動態(tài)容錯(cuò)功能的新型總線[1]。

    為了驗(yàn)證UM-BUS總線在傳輸速率、帶寬靈活性、動態(tài)容錯(cuò)能力以及故障隔離能力等方面的優(yōu)勢[2],本文提出UM-BUS總線測試系統(tǒng)。實(shí)現(xiàn)測試系統(tǒng)功能的基礎(chǔ)是采集總線上傳輸?shù)臄?shù)據(jù)包,UM-BUS測試系統(tǒng)中的數(shù)據(jù)采集模塊首先將采集到的總線數(shù)據(jù)緩存到SDRAM存儲器中,再將數(shù)據(jù)傳輸?shù)絇C進(jìn)行分析和處理。

    本文采用PCIe總線實(shí)現(xiàn)數(shù)據(jù)采集模塊與PC之間的通信,在研究PCIe總線協(xié)議和端點(diǎn)核(PCIe Endpoint Block)的基礎(chǔ)上,使用VIRTEX5系列XC5VLX85T芯片實(shí)現(xiàn)了PICe接口硬件電路,設(shè)計(jì)了基于FPGA的PCIe總線直接內(nèi)存存取(Direct Memory Access,DMA)數(shù)據(jù)傳輸方案。該方案不僅實(shí)現(xiàn)了數(shù)據(jù)從PC內(nèi)存通過PCIe總線傳輸至SDRAM內(nèi)存芯片中存儲,同時(shí)能夠?qū)DRAM芯片中存儲的數(shù)據(jù)讀出,并通過PCIe總線接口將數(shù)據(jù)傳輸回PC內(nèi)存顯示。

1 研究背景

1.1 UM-BUS總線介紹

    如圖1所示,UM-BUS采用一種多線路并發(fā)冗余的總線型拓?fù)浣Y(jié)構(gòu),它最多可使用32條通道并發(fā)進(jìn)行數(shù)據(jù)傳輸,能夠?qū)?1個(gè)通道的故障進(jìn)行動態(tài)容錯(cuò)[2]。

jsj2-t1.gif

1.2 UM-BUS測試系統(tǒng)簡介

    UM-BUS總線的測試系統(tǒng)主要實(shí)現(xiàn)3個(gè)功能:無過濾監(jiān)聽總線通信過程、故障注入以及總線狀態(tài)分析[3]。實(shí)現(xiàn)PC對UM-BUS總線上傳輸數(shù)據(jù)包的接收和處理功能是實(shí)現(xiàn)總線測試功能的基礎(chǔ)。

    為了讓PC及時(shí)分析和處理測試系統(tǒng)采集到總線數(shù)據(jù),本文采用PCIe2.0技術(shù)完成UM-BUS測試系統(tǒng)中數(shù)據(jù)與PC之間的傳輸。

2 基于PCIe的DMA傳輸方案設(shè)計(jì)

    本方案設(shè)計(jì)中,F(xiàn)PGA是最關(guān)鍵部分。它主要包括測試系統(tǒng)中數(shù)據(jù)的采集模塊、SDRAM控制時(shí)序模塊、用于在硬核的用戶接口和傳輸接口實(shí)現(xiàn)PCIe時(shí)序邏輯的PCIe的控制模塊。圖2是基于PCIe的數(shù)據(jù)傳輸系統(tǒng)結(jié)構(gòu)圖,其中寬箭頭指向的模塊是本文設(shè)計(jì)的數(shù)據(jù)傳輸系統(tǒng)中重點(diǎn)設(shè)計(jì)的模塊。

jsj2-t2.gif

    UM-BUS測試系統(tǒng)將采集到的總線數(shù)據(jù)緩存在SDRAM存儲器中。PCIe控制模塊根據(jù)PC發(fā)出的數(shù)據(jù)傳輸請求,將SDRAM中存儲的總線數(shù)據(jù)傳輸?shù)絇C上;PCIe控制模塊也可以根據(jù)PC發(fā)出的數(shù)據(jù)傳輸請求,將數(shù)據(jù)從PC內(nèi)存通過PCIe接口向下傳輸?shù)紽PGA內(nèi)部,并通過FPGA內(nèi)部的SDRAM控制邏輯將數(shù)據(jù)傳輸?shù)降腟DRAM內(nèi)存芯片中存儲。

    本文利用Xilinx官網(wǎng)提供的IP核來實(shí)現(xiàn)基于PCIe總線的DMA數(shù)據(jù)傳輸方式設(shè)計(jì)。圖3是IP核的功能框圖及各個(gè)接口[4]。

jsj2-t3.gif

    各個(gè)接口的功能:用戶邏輯接口用于與 PCIe的IP 核通信;配置接口實(shí)現(xiàn)主機(jī)對IP 核的配置;物理層接口用于與根復(fù)合體或橋連接;系統(tǒng)接口含有時(shí)鐘信號和系統(tǒng)復(fù)位信號。

    本文應(yīng)用PCIe2.0技術(shù),實(shí)現(xiàn)UM-BUS總線測試系統(tǒng)與PC之間的通信,通過編寫PCIe用戶邏輯接口程序?qū)崿F(xiàn)PCIe的數(shù)據(jù)傳輸功能。

3 硬件設(shè)計(jì)方案

    本文在FPGA中設(shè)計(jì)了PCIe的控制模塊和SDRAM控制模塊。PCIe 的控制模塊有PCIe讀寫時(shí)序控制、對SDRAM控制器的控制。SDRAM控制模塊是一個(gè)雙口SDRAM控制器,它的左口邏輯作為PCIe總線的DMA寫傳輸時(shí)數(shù)據(jù)的讀出口,右口邏輯作為PCIe總線的DMA讀傳輸時(shí)數(shù)據(jù)的寫入口。本設(shè)計(jì)的硬件部分主要有PCIe 的控制模塊和SDRAM控制模塊。下面主要介紹這兩個(gè)模塊的設(shè)計(jì)。

3.1 PCIe的控制模塊設(shè)計(jì)

    本設(shè)計(jì)中的PCIe總線接口卡含有一片XC5VLX85T芯片,使用該FPGA實(shí)現(xiàn)PCIe總線數(shù)據(jù)傳輸?shù)臅r(shí)序邏輯,圖4為總線接口卡FPGA的程序結(jié)構(gòu)框圖及用戶邏輯結(jié)構(gòu)圖[5]。

jsj2-t4.gif

    XC5VLX85T芯片內(nèi)嵌的PCIe IP核為Endpoint Block plus for PCI Express,實(shí)現(xiàn)了PCIe總線的基本協(xié)議功能。

    為了實(shí)現(xiàn)PCIe的數(shù)據(jù)傳輸功能,主要是要進(jìn)行用戶邏輯的設(shè)計(jì)。用戶邏輯與PCIe的事務(wù)層接口直接連接,可發(fā)送或接收事務(wù)層數(shù)據(jù)包,用以實(shí)現(xiàn)BAR0空間的訪問功能和DMA讀寫功能[6]。下面將分存儲器讀寫兩個(gè)操作以及DMA數(shù)據(jù)傳輸方式的實(shí)現(xiàn)來說明PCIe用戶邏輯的設(shè)計(jì)。

3.1.1 Burst存儲器寫操作的設(shè)計(jì)與實(shí)現(xiàn)

    對于存儲器寫請求,實(shí)現(xiàn)的主要方法是數(shù)據(jù)接收控制器EP_RX將接收到的TLP包頭中各個(gè)字段進(jìn)行正確解析,并區(qū)分是單字寫還是Burst寫請求,以及確定寫操作的數(shù)據(jù)長度。如果是單字寫請求,就將TLP包中的64 bit數(shù)據(jù)存入寄存器中;如果是Burst寫請求,就將TLP包中的有效數(shù)據(jù)載荷區(qū)的數(shù)據(jù)按照64 bit寫入雙口緩沖區(qū),每過一個(gè)時(shí)鐘周期地址自動增加,直到數(shù)據(jù)全部存入到雙口緩沖區(qū),一次Burst寫操作完成。

3.1.2 Burst存儲器讀操作的設(shè)計(jì)與實(shí)現(xiàn)

    對于存儲器讀請求,實(shí)現(xiàn)的主要方法是數(shù)據(jù)接收控制器EP_RX將接收到的TLP包頭中各個(gè)字段進(jìn)行正確解析,并將請求數(shù)據(jù)的起始地址和數(shù)據(jù)長度發(fā)送給數(shù)據(jù)發(fā)送控制器EP_TX,然后啟動EP_TX發(fā)送完成數(shù)據(jù)。

3.1.3 DMA功能的實(shí)現(xiàn)

    本文采用DMA的方式用于FPGA外部存儲器SDRAM與系統(tǒng)內(nèi)存之間的數(shù)據(jù)傳輸。采用DMA方式訪問外部存儲器的最大優(yōu)勢是CPU配置完DMA狀態(tài)機(jī)后可繼續(xù)執(zhí)行其他指令操作。DMA狀態(tài)機(jī)通過請求PCIe 總線中斷完成數(shù)據(jù)傳輸。

    本設(shè)計(jì)中DMA寫傳輸?shù)臄?shù)據(jù)包格式是存儲器寫請求TLP,DMA讀傳輸?shù)臄?shù)據(jù)包格式是存儲器讀請求TLP與存儲器讀完成TLP[7]。

    下面以DMA寫為例說明DMA的設(shè)計(jì)。PCIe的DMA寫數(shù)據(jù)傳輸方式主要是將TLP包頭中的各個(gè)字段進(jìn)行正確填充,并將數(shù)據(jù)按照64 bit并行放在TLP的包頭,然后傳輸給PCIe IP硬核,最后硬核以PCIe總線協(xié)議串行傳輸給PC。DMA寫數(shù)據(jù)傳輸?shù)臓顟B(tài)機(jī)轉(zhuǎn)換圖如圖5所示。

jsj2-t5.gif

    DMA在進(jìn)行數(shù)據(jù)傳輸時(shí),傳輸一次TLP包的最大載荷為128 B,圖5中當(dāng)M=128時(shí),表明包的一次傳輸結(jié)束。此時(shí)判斷當(dāng)前傳輸?shù)淖止?jié)數(shù)與DMA所要傳輸?shù)淖止?jié)數(shù)是否相等,如果不相等則繼續(xù)傳輸,直至所有數(shù)據(jù)傳輸完畢,DMA傳輸結(jié)束。

3.2 高速緩存SDRAM控制模塊設(shè)計(jì)

    高速緩存SDRAM控制模塊主要實(shí)現(xiàn)SDRAM控制器的功能,進(jìn)而實(shí)現(xiàn)對系統(tǒng)中的高速數(shù)據(jù)進(jìn)行緩存的功能。SDRAM控制器直接控制SDRAM存儲器進(jìn)行數(shù)據(jù)的讀取。為了提高整個(gè)測試系統(tǒng)的可靠性和高速性,本文使用的SDRAM控制器采用猝發(fā)式數(shù)據(jù)讀寫模式,可以高速實(shí)時(shí)地向SDRAM讀寫數(shù)據(jù)。

    由于PCIe IP核傳輸?shù)臄?shù)據(jù)是64 bit,而測試系統(tǒng)中SDRAM存儲器對數(shù)據(jù)位寬要求是32 bit,因此要完成對數(shù)據(jù)位寬的匹配。在進(jìn)行數(shù)據(jù)位寬匹配時(shí),一定要兼顧到PCIe數(shù)據(jù)傳輸?shù)臅r(shí)序邏輯。本文采用異步FIFO來實(shí)現(xiàn)數(shù)據(jù)位寬的匹配。由于數(shù)據(jù)傳輸時(shí)采用DMA的方式,所以在進(jìn)行DMA讀寫操作時(shí)都需要異步FIFO來完成數(shù)據(jù)匹配功能。圖6為在進(jìn)行DMA寫操作時(shí)PCIe和SDRAM存儲器進(jìn)行數(shù)據(jù)位寬匹配的狀態(tài)機(jī),圖7為在進(jìn)行DMA讀操作時(shí)PCIe和SDRAM存儲器進(jìn)行數(shù)據(jù)位寬匹配的狀態(tài)機(jī)。

jsj2-t6.gif

jsj2-t7.gif

4 結(jié)果與驗(yàn)證

    本文設(shè)置使用PCIe的x1通道,經(jīng)過測試軟件多次測試,從PC經(jīng)過PCIe總線存儲到SDRAM存儲器的數(shù)據(jù)正確,滿足PCIe總線傳輸數(shù)據(jù)的時(shí)序要求,同時(shí)滿足SDRAM存儲器的數(shù)據(jù)讀寫時(shí)序要求。DMA數(shù)據(jù)傳輸操作正確,且速度可穩(wěn)定達(dá)到200 MB/s以上,滿足UM-BUS總線對測試系統(tǒng)數(shù)據(jù)傳輸速率的要求。

    經(jīng)過多次測試,發(fā)現(xiàn)傳輸速率與傳輸數(shù)據(jù)包的大?。╯ize)以及包的個(gè)數(shù)(tlp)有關(guān)。設(shè)定數(shù)據(jù)包的大小為32個(gè)雙字,當(dāng)數(shù)據(jù)包的大小和包的個(gè)數(shù)越多時(shí),數(shù)據(jù)的傳輸速率呈現(xiàn)下降趨勢。圖8為DMA寫操作傳輸數(shù)據(jù)包的大?。╯ize)為固定值32個(gè)雙字的傳輸速率圖。

jsj2-t8.gif

5 結(jié)束語

    本文實(shí)現(xiàn)的基于PCIe總線DMA方式的數(shù)據(jù)傳輸系統(tǒng)可以完成上位機(jī)與SDRAM存儲器通過PCIe總線以DMA的方式進(jìn)行數(shù)據(jù)傳輸?shù)墓δ堋?/p>

    本文的設(shè)計(jì)方法釆用內(nèi)嵌在FPGA的PCIe IP核,降低了硬件設(shè)計(jì)復(fù)雜度。實(shí)際工程應(yīng)用表明該P(yáng)CIe接口達(dá)到了較高的數(shù)據(jù)傳輸速率,滿足UM-BUS總線測試系統(tǒng)對高速數(shù)據(jù)傳輸?shù)男枨蟆?/p>

參考文獻(xiàn)

[1] 王嘉佳.動態(tài)可重構(gòu)總線控制器的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:首都師范大學(xué),2012.

[2] 鄧哲,張偉功,朱曉燕,等.動態(tài)可重構(gòu)總線數(shù)據(jù)傳輸管理方法設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2013,39(1):264-269.

[3] 陜天龍,周繼芹,王春亮,等.USB在動態(tài)可重構(gòu)總線測試系統(tǒng)中的設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(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控制器設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(7):174-176.

[7] 王齊.PCI Express體系結(jié)構(gòu)導(dǎo)讀[M].北京:機(jī)械工業(yè)出版社,2010.

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