《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測試測量 > 設(shè)計(jì)應(yīng)用 > UM-BUS總線測試系統(tǒng)中PCIe的設(shè)計(jì)與實(shí)現(xiàn)
UM-BUS總線測試系統(tǒng)中PCIe的設(shè)計(jì)與實(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總線單通道理論帶寬可達(dá)200 Mb/s,采用16通道并發(fā)傳輸時(shí),理論帶寬可達(dá)400 MB/s,其測試系統(tǒng)需要在數(shù)據(jù)采集終端與PC之間建立不低于此帶寬的通信通道。PCIe1.1采用4通道傳輸時(shí)理論帶寬可達(dá)1 GB/s,滿足了UM-BUS總線測試系統(tǒng)的傳輸帶寬需求,由此設(shè)計(jì)實(shí)現(xiàn)了UM-BUS總線測試系統(tǒng)的PCIe1.1 x4鏈路通道的應(yīng)用方案,給出了基于FPGA的PCIe總線的BMD傳輸方案。測試結(jié)果表明,該方案實(shí)際傳輸速度可達(dá)550 MB/s,滿足UM-BUS總線測試系統(tǒng)的帶寬需求。
中圖分類號(hào): TN919;TP391
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.190034
中文引用格式: 孫豐霞,張偉功,周繼芹,等. UM-BUS總線測試系統(tǒng)中PCIe的設(shè)計(jì)與實(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]總線是一種具有動(dòng)態(tài)重構(gòu)能力的高速串行總線。為了驗(yàn)證UM-BUS總線在傳輸速率及帶寬靈活性方面的優(yōu)勢,本文設(shè)計(jì)了一個(gè)UM-BUS測試系統(tǒng)[3],其功能是將采集的總線數(shù)據(jù)緩存到SDRAM存儲(chǔ)器中,并實(shí)現(xiàn)FPGA端SDRAM存儲(chǔ)器與PC的通信,將數(shù)據(jù)傳輸至PC進(jìn)行分析和處理。

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

1 研究背景

1.1 UM-BUS總線介紹

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

jsj1-t1.gif

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

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

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

jsj1-t2.gif

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

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

3 硬件邏輯設(shè)計(jì)

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

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

jsj1-t3.gif

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

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

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

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

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

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

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

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

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

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

     jsj1-3.1.1-x1.gif

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

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

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

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

    (2)接收PC返回的CPLD TLP

    流程如圖4所示。

jsj1-t4.gif

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

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

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

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

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

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

jsj1-t5.gif

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

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

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

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

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

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

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

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

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

jsj1-t6.gif

4 軟件設(shè)計(jì)

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

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

    應(yīng)用軟件程序的開發(fā)則使用了Visual Studio2015,主要功能是測試直接訪問讀寫和DMA讀寫的正確性。在實(shí)現(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存儲(chǔ)器中進(jìn)行存儲(chǔ),向下傳輸成功后,F(xiàn)PGA內(nèi)部邏輯從SDRAM存儲(chǔ)器中將存儲(chǔ)的數(shù)據(jù)讀出,然后通過PCIe接口以DMA寫的方式將數(shù)據(jù)傳回PC內(nèi)存,與原始數(shù)據(jù)進(jìn)行比對(duì)校驗(yàn)。

5 FPGA測試驗(yàn)證

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

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

jsj1-t7.gif

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

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

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

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

jsj1-t8.gif

    經(jīng)過多次測試,每次通信數(shù)據(jù)總量不少于100 GB,并未在DMA讀寫兩個(gè)通道中發(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è)計(jì)實(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軟件對(duì)PCIe功能進(jìn)行了測試。測試結(jié)果表明,PCIe總線的DMA讀寫速度穩(wěn)定在500 MB/s以上,均超過UM-BUS總線16通道并發(fā)傳輸?shù)目偩€測試系統(tǒng)的400 MB/s帶寬需求。

參考文獻(xiàn)

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

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

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

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

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

[6] 李超,邱柯妮,張偉功,等.基于PCIE總線主模式DMA高速數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)[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].北京:機(jī)械工業(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)載。