《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于PCIe的DMA傳輸在UM-BUS測(cè)試系統(tǒng)中的設(shè)計(jì)與應(yīng)用
基于PCIe的DMA傳輸在UM-BUS測(cè)試系統(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
摘要: 動(dòng)態(tài)可重構(gòu)高速串行總線(UM-BUS)是一種利用多通道并發(fā)冗余的方式來(lái)實(shí)現(xiàn)總線動(dòng)態(tài)容錯(cuò)的高速串行總線。它的測(cè)試系統(tǒng)可以實(shí)現(xiàn)對(duì)總線的通信過(guò)程進(jìn)行監(jiān)測(cè)、存儲(chǔ)與分析。由于測(cè)試系統(tǒng)需要在數(shù)據(jù)采集終端與PC之間建立高帶寬的通信通道,設(shè)計(jì)了UM-BUS總線測(cè)試系統(tǒng)的PCIe2.0 x1通道的應(yīng)用方案,設(shè)計(jì)并實(shí)現(xiàn)了基于FPGA的PCIe總線DMA數(shù)據(jù)傳輸方案。實(shí)驗(yàn)測(cè)試結(jié)果表明,實(shí)際傳輸速度可以穩(wěn)定達(dá)到200 MB/s以上,完全滿足總線測(cè)試系統(tǒng)中對(duì)數(shù)據(jù)傳輸速率的要求。
中圖分類號(hào): TP391
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2015.08.036

中文引用格式: 李昱青,邱柯妮,張偉功,等. 基于PCIe的DMA傳輸在UM-BUS測(cè)試系統(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 引言

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

    為了驗(yàn)證UM-BUS總線在傳輸速率、帶寬靈活性、動(dòng)態(tài)容錯(cuò)能力以及故障隔離能力等方面的優(yōu)勢(shì)[2],本文提出UM-BUS總線測(cè)試系統(tǒng)。實(shí)現(xiàn)測(cè)試系統(tǒng)功能的基礎(chǔ)是采集總線上傳輸?shù)臄?shù)據(jù)包,UM-BUS測(cè)試系統(tǒng)中的數(shù)據(jù)采集模塊首先將采集到的總線數(shù)據(jù)緩存到SDRAM存儲(chǔ)器中,再將數(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)存通過(guò)PCIe總線傳輸至SDRAM內(nèi)存芯片中存儲(chǔ),同時(shí)能夠?qū)DRAM芯片中存儲(chǔ)的數(shù)據(jù)讀出,并通過(guò)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)行動(dòng)態(tài)容錯(cuò)[2]。

jsj2-t1.gif

1.2 UM-BUS測(cè)試系統(tǒng)簡(jiǎn)介

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

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

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

    本方案設(shè)計(jì)中,F(xiàn)PGA是最關(guān)鍵部分。它主要包括測(cè)試系統(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測(cè)試系統(tǒng)將采集到的總線數(shù)據(jù)緩存在SDRAM存儲(chǔ)器中。PCIe控制模塊根據(jù)PC發(fā)出的數(shù)據(jù)傳輸請(qǐng)求,將SDRAM中存儲(chǔ)的總線數(shù)據(jù)傳輸?shù)絇C上;PCIe控制模塊也可以根據(jù)PC發(fā)出的數(shù)據(jù)傳輸請(qǐng)求,將數(shù)據(jù)從PC內(nèi)存通過(guò)PCIe接口向下傳輸?shù)紽PGA內(nèi)部,并通過(guò)FPGA內(nèi)部的SDRAM控制邏輯將數(shù)據(jù)傳輸?shù)降腟DRAM內(nèi)存芯片中存儲(chǔ)。

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

jsj2-t3.gif

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

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

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

    本文在FPGA中設(shè)計(jì)了PCIe的控制模塊和SDRAM控制模塊。PCIe 的控制模塊有PCIe讀寫時(shí)序控制、對(duì)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空間的訪問(wèn)功能和DMA讀寫功能[6]。下面將分存儲(chǔ)器讀寫兩個(gè)操作以及DMA數(shù)據(jù)傳輸方式的實(shí)現(xiàn)來(lái)說(shuō)明PCIe用戶邏輯的設(shè)計(jì)。

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

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

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

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

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

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

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

    下面以DMA寫為例說(shuō)明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)對(duì)系統(tǒng)中的高速數(shù)據(jù)進(jìn)行緩存的功能。SDRAM控制器直接控制SDRAM存儲(chǔ)器進(jìn)行數(shù)據(jù)的讀取。為了提高整個(gè)測(cè)試系統(tǒng)的可靠性和高速性,本文使用的SDRAM控制器采用猝發(fā)式數(shù)據(jù)讀寫模式,可以高速實(shí)時(shí)地向SDRAM讀寫數(shù)據(jù)。

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

jsj2-t6.gif

jsj2-t7.gif

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

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

    經(jīng)過(guò)多次測(cè)試,發(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)下降趨勢(shì)。圖8為DMA寫操作傳輸數(shù)據(jù)包的大?。╯ize)為固定值32個(gè)雙字的傳輸速率圖。

jsj2-t8.gif

5 結(jié)束語(yǔ)

    本文實(shí)現(xiàn)的基于PCIe總線DMA方式的數(shù)據(jù)傳輸系統(tǒng)可以完成上位機(jī)與SDRAM存儲(chǔ)器通過(guò)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總線測(cè)試系統(tǒng)對(duì)高速數(shù)據(jù)傳輸?shù)男枨蟆?/p>

參考文獻(xiàn)

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

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

[3] 陜天龍,周繼芹,王春亮,等.USB在動(dòng)態(tài)可重構(gòu)總線測(cè)試系統(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)載。