文獻(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.
0 引言
動(dòng)態(tài)可重構(gòu)高速串行總線(UM-BUS)是一種利用多通道冗余方式來實(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)存通過PCIe總線傳輸至SDRAM內(nèi)存芯片中存儲(chǔ),,同時(shí)能夠?qū)DRAM芯片中存儲(chǔ)的數(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)行動(dòng)態(tài)容錯(cuò)[2]。
1.2 UM-BUS測(cè)試系統(tǒng)簡(jiǎn)介
UM-BUS總線的測(cè)試系統(tǒng)主要實(shí)現(xiàn)3個(gè)功能:無過濾監(jiān)聽總線通信過程,、故障注入以及總線狀態(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ì)的模塊,。
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)存通過PCIe接口向下傳輸?shù)紽PGA內(nèi)部,,并通過FPGA內(nèi)部的SDRAM控制邏輯將數(shù)據(jù)傳輸?shù)降腟DRAM內(nèi)存芯片中存儲(chǔ)。
本文利用Xilinx官網(wǎng)提供的IP核來實(shí)現(xiàn)基于PCIe總線的DMA數(shù)據(jù)傳輸方式設(shè)計(jì),。圖3是IP核的功能框圖及各個(gè)接口[4],。
各個(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之間的通信,,通過編寫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],。
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],。下面將分存儲(chǔ)器讀寫兩個(gè)操作以及DMA數(shù)據(jù)傳輸方式的實(shí)現(xiàn)來說明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ù)長度,。如果是單字寫請(qǐng)求,,就將TLP包中的64 bit數(shù)據(jù)存入寄存器中,;如果是Burst寫請(qǐng)求,,就將TLP包中的有效數(shù)據(jù)載荷區(qū)的數(shù)據(jù)按照64 bit寫入雙口緩沖區(qū),,每過一個(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ù)長度發(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方式訪問外部存儲(chǔ)器的最大優(yōu)勢(shì)是CPU配置完DMA狀態(tài)機(jī)后可繼續(xù)執(zhí)行其他指令操作,。DMA狀態(tài)機(jī)通過請(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寫為例說明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所示,。
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來實(shí)現(xiàn)數(shù)據(jù)位寬的匹配。由于數(shù)據(jù)傳輸時(shí)采用DMA的方式,,所以在進(jìn)行DMA讀寫操作時(shí)都需要異步FIFO來完成數(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ī)。
4 結(jié)果與驗(yàn)證
本文設(shè)置使用PCIe的x1通道,,經(jīng)過測(cè)試軟件多次測(cè)試,,從PC經(jīng)過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)過多次測(cè)試,發(fā)現(xiàn)傳輸速率與傳輸數(shù)據(jù)包的大小(size)以及包的個(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è)雙字的傳輸速率圖,。
5 結(jié)束語
本文實(shí)現(xiàn)的基于PCIe總線DMA方式的數(shù)據(jù)傳輸系統(tǒng)可以完成上位機(jī)與SDRAM存儲(chǔ)器通過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.