《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測試測量 > 設(shè)計應(yīng)用 > UM-BUS總線測試系統(tǒng)中PCIe的設(shè)計與實現(xiàn)
UM-BUS總線測試系統(tǒng)中PCIe的設(shè)計與實現(xiàn)
2019年電子技術(shù)應(yīng)用第5期
孫豐霞1,張偉功1,2,3,周繼芹3,王 瑩1
1.首都師范大學(xué) 信息工程學(xué)院,北京100048; 2.首都師范大學(xué) 北京成像技術(shù)高精尖創(chuàng)新中心,北京100048; 3.首都師范大學(xué) 高可靠嵌入式系統(tǒng)技術(shù)北京市工程技術(shù)研究中心,北京100048
摘要: UM-BUS總線單通道理論帶寬可達200 Mb/s,采用16通道并發(fā)傳輸時,理論帶寬可達400 MB/s,其測試系統(tǒng)需要在數(shù)據(jù)采集終端與PC之間建立不低于此帶寬的通信通道。PCIe1.1采用4通道傳輸時理論帶寬可達1 GB/s,滿足了UM-BUS總線測試系統(tǒng)的傳輸帶寬需求,由此設(shè)計實現(xiàn)了UM-BUS總線測試系統(tǒng)的PCIe1.1 x4鏈路通道的應(yīng)用方案,給出了基于FPGA的PCIe總線的BMD傳輸方案。測試結(jié)果表明,該方案實際傳輸速度可達550 MB/s,滿足UM-BUS總線測試系統(tǒng)的帶寬需求。
中圖分類號: TN919;TP391
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.190034
中文引用格式: 孫豐霞,張偉功,周繼芹,等. UM-BUS總線測試系統(tǒng)中PCIe的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2019,45(5):61-65.
英文引用格式: Sun Fengxia,Zhang Weigong,Zhou Jiqin,et al. Design and implementation of PCIe on UM-BUS test system[J]. Application of Electronic Technique,2019,45(5):61-65.
Design and implementation of PCIe on UM-BUS test system
Sun Fengxia1,Zhang Weigong1,2,3,Zhou Jiqin3,Wang Ying1
1.School of Information Engineering,Capital Normal University,Beijing 100048,China; 2.Beijing Advanced Innovation Center for Image Technology,Capital Normal University,Beijing 100048,China; 3.Beijing Engineering Research Center of High Reliable Embedded System,Capital Normal University,Beijing 100048,China
Abstract: The single channel theoretical bandwidth of the UM-BUS can be up to 200 Mb/s. When 16 channels are used for concurrent transmission, the theoretical bandwidth can be up to 400 MB/s. So the test system needs to establish a communication channel of no less than this bandwidth between the data acquisition terminal and PC. In PCIe1.1, the theoretical bandwidth of the four channel transmission is up to 1 GB/s, which meets the transmission requirements of the UM-BUS test system. Thus, this paper realizes the application scheme of PCIe1.1 x4 link channel of UM-BUS bus test system, and gives the BMD transmission scheme of PCIe bus based on FPGA. The test result shows that the actual transmission speed of the scheme can reach 550 MB/s, which satisfies the bandwidth requirements of the UM-BUS bus test system.
Key words : UM-BUS;bus test system;PCIe bus;BMD;data communication

0 引言

    UM-BUS[1-2]總線是一種具有動態(tài)重構(gòu)能力的高速串行總線。為了驗證UM-BUS總線在傳輸速率及帶寬靈活性方面的優(yōu)勢,本文設(shè)計了一個UM-BUS測試系統(tǒng)[3],其功能是將采集的總線數(shù)據(jù)緩存到SDRAM存儲器中,并實現(xiàn)FPGA端SDRAM存儲器與PC的通信,將數(shù)據(jù)傳輸至PC進行分析和處理。

    鑒于PCIe1.1(PCI Express)采用點對點串行連接、全雙工的傳輸方式,并可根據(jù)實際需求靈活配置成x1、x4、x8和x16通道,單通道單向傳輸帶寬可達250 MB/s,本文采用PCIe1.1[4]x4通道,基于DMA[5-6](Direct Memory Access)傳輸機制共同實現(xiàn)了SDRAM存儲器與PC之間的通信傳輸設(shè)計。

1 研究背景

1.1 UM-BUS總線介紹

    UM-BUS總線采用多線路并發(fā)冗余的總線型拓撲結(jié)構(gòu),采用節(jié)點互連方式,最多可以連接30個總線節(jié)點設(shè)備,采用32條通道進行數(shù)據(jù)的并發(fā)傳輸,單通道速率可達200 Mb/s。其拓撲結(jié)果如圖1所示,其中n表示總線上的節(jié)點數(shù),m表示物理通道數(shù)。

jsj1-t1.gif

1.2 UM-BUS總線測試系統(tǒng)介紹

    本文UM-BUS總線測試系統(tǒng)是針對采用16通道并發(fā)傳輸?shù)腢M-BUS總線而設(shè)計的,理論速率可達400 MB/s,滿足當(dāng)前大多數(shù)測試和應(yīng)用帶寬需求。為了將采集的高速總線數(shù)據(jù)傳輸?shù)絇C進行分析處理,完成測試功能需求,本文在UM-BUS總線測試系統(tǒng)中設(shè)計并實現(xiàn)了PCIe1.1技術(shù)。

    如圖2所示,在UM-BUS測試系統(tǒng)中,系統(tǒng)要求PC能夠?qū)τ蓴?shù)據(jù)采集模塊采集處理后的數(shù)據(jù)通過外部SDRAM存儲器進行緩沖,然后通過PCIe接口將數(shù)據(jù)傳輸至PC進行保存。目前UM-BUS總線數(shù)據(jù)采集模塊和高速緩存模塊設(shè)計已完成,本文重點是PCIe通信接口的設(shè)計與實現(xiàn)。

jsj1-t2.gif

2 PCIe通信接口設(shè)計

    為了更好地發(fā)揮PCIe總線的高帶寬優(yōu)勢,本文采用Xilinx公司Virtex-5系列XC5VLX85T的FPGA來設(shè)計PCIe通信接口,通過其內(nèi)部嵌入的PCIe IP硬核Endpoint Block Plus for PCI Express1.1[7]來實現(xiàn)。為了提高CPU的運行效率,引入DMA設(shè)計,本文采用總線主控DMA(BUS Master DMA,BMD)的方式控制PCIe IP硬核從而控制高速數(shù)據(jù)的傳輸。

3 硬件邏輯設(shè)計

    針對Xilinx公司XC5VLX85T PFGA,在Windows系統(tǒng)平臺下,以Xilinx的參考案例XAPP1052[8]為基礎(chǔ),實現(xiàn)了PCIe總線的BMD功能邏輯設(shè)計。

    如圖3所示,BMD主要由以下五部分構(gòu)成:

jsj1-t3.gif

    (1)PCIe IP硬核:對外與其他PCIe設(shè)備通信,對內(nèi)與發(fā)送引擎和接收引擎進行數(shù)據(jù)傳輸。

    (2)設(shè)備控制模塊:接收通過接收引擎解析的數(shù)據(jù),并將數(shù)據(jù)存儲在SDRAM中;將SDRAM中的數(shù)據(jù)讀出,供發(fā)送引擎組織TLP[9]包使用。為了匹配PCIe IP核和SDRAM兩側(cè)不同時鐘域、不同速率的數(shù)據(jù)緩沖和位寬轉(zhuǎn)換,設(shè)計了FIFO緩沖模塊。

    (3)寄存器控制模塊:解析來自PC的命令和配置,并通知發(fā)送引擎、接收引擎和設(shè)備控制模塊作出相應(yīng)的執(zhí)行操作。 

    (4)接收引擎模塊:接收并解析TLP包,根據(jù)TLP的包頭信息,將對應(yīng)的數(shù)據(jù)寫入寄存器控制模塊的寄存器中,或者對接收到的存儲器讀TLP進行拆包。

    (5)發(fā)送引擎模塊:負責(zé)把待發(fā)送數(shù)據(jù)組織成TLP包,并傳送給PCIE IP核。

3.1 DMA傳輸?shù)倪壿嬙O(shè)計與實現(xiàn)

    DMA傳輸包括兩個過程,即DMA讀(PC端到FPGA端)和DMA寫(FPGA端到PC端)。

3.1.1 DMA讀設(shè)計與實現(xiàn)

    DMA讀操作包含兩個過程,發(fā)送引擎組裝DMA讀請求TLP并發(fā)送,接收引擎接收PC返回的CPLD TLP。

    本文在接收引擎中設(shè)置了4個TAG存儲器,每個TAG存儲器對應(yīng)一個等待完成包的讀請求,TAG存儲器用來保存讀請求的設(shè)備訪問地址及長度,對每個讀請求,PC可能會用多個CPLD TLP來應(yīng)答,當(dāng)PC送來CPLD TLP時,接收引擎根據(jù)CPLD TLP中的TAG標識,查找對應(yīng)的TAG存儲器,獲得設(shè)備側(cè)SDRAM的寫入地址。因此,當(dāng)發(fā)送引擎發(fā)送讀請求TLP時,必須等待可用的TAG存儲器,并以可用的TAG存儲器編號作為讀請求的TAG標識。當(dāng)對可用TAG進行優(yōu)先級排除時,優(yōu)先級設(shè)置為0、2、1、3,以下的程序片段為接收引擎中TAG空閑信號TAG_empty_o及TAG標號TAG_empty_Index優(yōu)先級設(shè)置方法,其中TAG_Valid為接收引擎收到的TAG對應(yīng)的TAG標識。

     jsj1-3.1.1-x1.gif

    為此設(shè)計的DMA讀操作如下所示:

    (1)發(fā)送DMA讀請求TLP

    ①共需要發(fā)送rmrd_count個DMA讀請求TLP, rmrd_count由軟件在寄存器控制模塊中設(shè)置。當(dāng)接收引擎有空閑TAG時,發(fā)送DMA讀請求TLP的第一個64 bit,使用該空閑的TAG 編號TAG_empty_Index_i來作為TAG標識,即trn_rd[41:40]={TAG_empty_Index_i}。

    ②根據(jù)32 bit地址信息組裝DMA讀請求TLP的第二個64 bit并發(fā)送。

    (2)接收PC返回的CPLD TLP

    流程如圖4所示。

jsj1-t4.gif

    ①接收CPLD TLP的第一個64 bit,解析得到TLP包數(shù)據(jù)長度。

    ②當(dāng)接收緩沖FIFO為空且收到的TAG標識有效時,將解析得到的數(shù)據(jù)寫入FIFO中進行緩存。

    ③接收CPLD TLP后續(xù)數(shù)據(jù)并將其寫入FIFO進行緩存。

    ④若是CPLD TLP傳輸完成,判斷接收到的數(shù)據(jù)長度。如若實際接收的數(shù)據(jù)長度與TLP包應(yīng)傳輸長度一致,則當(dāng)前CPLD TLP正確接收完成,清除TAG有效標識,此時TAG存儲器處于空閑狀態(tài),可用于新的DMA讀請求。

3.1.2 DMA寫設(shè)計與實現(xiàn)

    DMA寫操作實現(xiàn)的主要方法是將TLP包頭中的各個字段正確填充,并將數(shù)據(jù)按照64 bit并行放在TLP包頭,傳輸給PCIe IP硬核,然后硬核以PCIe協(xié)議串行傳輸給PC。DMA寫操作在發(fā)送引擎中實現(xiàn),操作流程如圖5所示。

jsj1-t5.gif

    (1)發(fā)送FIFO讀取SDRAM存儲器數(shù)據(jù)。當(dāng)需要傳輸?shù)臄?shù)據(jù)量大于等于4 096 B時,傳輸數(shù)據(jù)量為4 096 B,否則傳輸數(shù)據(jù)量為SDRAM中剩余數(shù)據(jù)量。

    (2)若發(fā)送FIFO讀取數(shù)據(jù)完成,則發(fā)送DMA寫TLPs。

    ①設(shè)置TLP包計數(shù)值cur_wr_count,初始值為零:cur_wr_count<=cur_wr_count+1′b1,將DMA寫請求各字段填入TLP包頭的第一個64 bit中發(fā)送。

    ②將32 bit地址和第一個32 bit數(shù)據(jù)填入TLP包頭的第二個64 bit字發(fā)送。

    ③將每個TLP所需傳輸?shù)臄?shù)據(jù)填入TLP后續(xù)的64 bit字進行發(fā)送。

    (3)重復(fù)步驟(2),直至cur_wr_count達到所需傳輸TLP包個數(shù)設(shè)定值,DMA寫操作完成。

3.2 SDRAM控制模塊設(shè)計

    本文采用了片外擴展SDRAM存儲芯片,片內(nèi)編寫SDRAM控制器的方式實現(xiàn)數(shù)據(jù)的緩存。采用兩片32 M×16 bit SDRAM,SDRAM存儲器只進行單端口數(shù)據(jù)操作,SDRAM控制器被設(shè)計成有左端口和右端口的雙口控制器,在邏輯上將控制器實現(xiàn)左端口輸入數(shù)據(jù)、右端口輸出數(shù)據(jù)的功能。雙口設(shè)計實現(xiàn)了數(shù)據(jù)傳輸方向的靈活控制。

    圖6是SDRAM控制邏輯的狀態(tài)機,其中S0和S2是等待命令狀態(tài)。S1表示經(jīng)DMA讀方式緩存在接收緩沖FIFO的數(shù)據(jù)有寫入SDRAM的請求時,SDRAM控制器成為左口模式,數(shù)據(jù)存入SDRAM。S3表示有DMA寫請求,發(fā)送緩沖FIFO有讀取SDRAM數(shù)據(jù)請求時,SDRAM控制器成為右口模式,數(shù)據(jù)從SDRAM存儲器讀出后被傳輸?shù)桨l(fā)送緩沖FIFO。

jsj1-t6.gif

4 軟件設(shè)計

    軟件設(shè)計包括驅(qū)動程序設(shè)計和應(yīng)用軟件程序設(shè)計。

    本文PCIe驅(qū)動程序是在Windows 7操作系統(tǒng)下開發(fā)設(shè)計的,選用Jungo公司軟件WinDriver生成,極大地簡化了硬件驅(qū)動程序開發(fā)的工作量,具有極強的平臺移植性。WinDriver支持Xilinx的BMD模式,能夠根據(jù)硬件設(shè)備的描述自動產(chǎn)生設(shè)備驅(qū)動程序源代碼程序框架,用戶在Visual Studio2015下根據(jù)要實現(xiàn)的功能添加代碼,完成驅(qū)動程序的開發(fā)。

    應(yīng)用軟件程序的開發(fā)則使用了Visual Studio2015,主要功能是測試直接訪問讀寫和DMA讀寫的正確性。在實現(xiàn)PCIe數(shù)據(jù)傳輸過程中,數(shù)據(jù)傳輸流程為:數(shù)據(jù)從PC內(nèi)存通過PCIe接口以DMA讀的方式向下傳輸?shù)紽PGA內(nèi)部發(fā)送緩存FIFO中,F(xiàn)PGA內(nèi)部SDRAM控制邏輯再將數(shù)據(jù)傳輸?shù)絊DRAM存儲器中進行存儲,向下傳輸成功后,F(xiàn)PGA內(nèi)部邏輯從SDRAM存儲器中將存儲的數(shù)據(jù)讀出,然后通過PCIe接口以DMA寫的方式將數(shù)據(jù)傳回PC內(nèi)存,與原始數(shù)據(jù)進行比對校驗。

5 FPGA測試驗證

    為了對設(shè)計實現(xiàn)的PCIe接口進行測試驗證,需將硬件部分燒錄到板卡的FPGA芯片后,通過板卡的PCIe金手指插到PC的主板上,重啟PC,檢測到新的硬件插入后便可安裝相應(yīng)的PCIe驅(qū)動文件,成功安裝后進行功能測試。

    上位機軟件界面如圖7所示,從圖中可以看到,測試包括DMA讀操作、DMA寫操作及寄存器讀寫操作,步驟如下:

jsj1-t7.gif

    (1)進行DMA讀操作,將所要傳輸?shù)臄?shù)據(jù)文件讀入PC機內(nèi)存,然后寫入FPGA端;

    (2)進行DMA寫操作,F(xiàn)PGA通過DMA寫將數(shù)據(jù)寫回PC,并以文件的形式保存在PC上,PC對寫回的數(shù)據(jù)和初始數(shù)據(jù)進行校驗;

    (3)直接訪問操作,對指定地址的寄存器進行讀寫操作。

    在進行DMA讀寫操作過程中,同時通過ChipScope Analyzer工具捕獲各模塊的端口數(shù)據(jù)來驗證DMA讀寫操作過程中數(shù)據(jù)傳輸?shù)恼_性。以DMA讀為例,如圖8所示,接收引擎模塊從PCIe IP硬核接收信號trn_rd,解析得到有效數(shù)據(jù),接收緩沖FIFO讀取其有效數(shù)據(jù)并輸出dout信號,SDRAM存儲器讀取信號SDR_Din并進行存儲。對比PC發(fā)送的原始數(shù)據(jù)和SDR_Din信號數(shù)據(jù),得知DMA讀操作正確。從圖7軟件界面可知,DMA讀寫數(shù)據(jù)長度107 640 B,PC原始數(shù)據(jù)與經(jīng)DMA讀寫兩個操作返回的數(shù)據(jù)全部一致,故而DMA讀寫正確。

jsj1-t8.gif

    經(jīng)過多次測試,每次通信數(shù)據(jù)總量不少于100 GB,并未在DMA讀寫兩個通道中發(fā)現(xiàn)不一致的數(shù)據(jù),沒有丟幀和誤碼現(xiàn)象。由此推算,PCIe通信數(shù)據(jù)誤碼率低于10-8。

    DMA讀寫速度如表1所示。

jsj1-b1.gif

    在x4模式下,DMA的加入,寫速率提升了近9倍,讀速率提升了約10倍,并且PCIe總線的平均DMA讀寫速度穩(wěn)定在500 MB/s以上,均超過16通道的總線測試系統(tǒng)的400 MB/s高速數(shù)據(jù)傳輸要求。

6 結(jié)論

    本文設(shè)計實現(xiàn)了UM-BUS總線測試系統(tǒng)中PCIe1.1 x4鏈路通道的應(yīng)用方案,采用基于FPGA的PCIe總線的DMA數(shù)據(jù)傳輸方式解決了總線測試系統(tǒng)中PCIe通信接口模塊與PC間的高速數(shù)據(jù)傳輸問題,并完成了測試系統(tǒng)中的SDRAM高速緩存處理,最后結(jié)合WinDriver軟件對PCIe功能進行了測試。測試結(jié)果表明,PCIe總線的DMA讀寫速度穩(wěn)定在500 MB/s以上,均超過UM-BUS總線16通道并發(fā)傳輸?shù)目偩€測試系統(tǒng)的400 MB/s帶寬需求。

參考文獻

[1] 張偉功,周繼芹,李杰,等.UM-BUS總線及接入式體系結(jié)構(gòu)[J].電子學(xué)報,2015,43(9):1776-1785.

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

[3] 王春亮.基于UM-BUS系統(tǒng)的總線測試方案研究[D].北京:首都師范大學(xué),2014.

[4] 王嘉良,趙曙光.用FPGA實現(xiàn)PCI-E接口和DMA控制器設(shè)計[J].計算機技術(shù)與發(fā)展,2011,21(6):181-184.

[5] 王之光,高清運.基于FPGA的PCIe總線接口的DMA控制器的設(shè)計[J].電子技術(shù)應(yīng)用,2018,44(1):9-12.

[6] 李超,邱柯妮,張偉功,等.基于PCIE總線主模式DMA高速數(shù)據(jù)傳輸系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2015,41(9):142-145.

[7] Xilinx DS551.LogiCORE IP endpoint block plus v1.15 for PCI express[Z].2011.

[8] LAWLEY J.Bus master performance demonstration reference design for the Xilinx endpoint PCI express solutions[Z].USA:Xilinx,2015.

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



作者信息:

孫豐霞1,張偉功1,2,3,周繼芹3,王  瑩1

(1.首都師范大學(xué) 信息工程學(xué)院,北京100048;

2.首都師范大學(xué) 北京成像技術(shù)高精尖創(chuàng)新中心,北京100048;

3.首都師范大學(xué) 高可靠嵌入式系統(tǒng)技術(shù)北京市工程技術(shù)研究中心,北京100048)

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