《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于PCIe的高速接口設計
基于PCIe的高速接口設計
2016年微型機與應用第1期
李曉寧,姚遠程,秦明偉
(西南科技大學 信息工程學院 特殊環(huán)境機器人技術四川省重點實驗室, 四川 綿陽 621010)
摘要: PCIe總線是第三代I/O總線的代表,提供高性能、高速、點到點的串行連接,支持單雙工傳輸,通過差分鏈路來互連設備。該設計由Xilinx公司的Virtex6 FPGA平臺和PC機組成,為了實現(xiàn)PFGA與CPU之間的高速通信,開發(fā)了基于FPGA IPcore 的PCIe總線 DMA數(shù)據(jù)傳輸平臺。通過硬件測試表明,該接口設計方案成本低,傳輸速率可以達到 15 Gb/s。
關鍵詞: PCI-Express總線 FPGA DMA
Abstract:
Key words :

  摘要:PCIe總線是第三代I/O總線的代表,提供高性能、高速、點到點的串行連接,支持單雙工傳輸,通過差分鏈路來互連設備。該設計由Xilinx公司的Virtex6 FPGA平臺和PC機組成,為了實現(xiàn)PFGA與CPU之間的高速通信,開發(fā)了基于FPGA IPcore 的PCIe總線 DMA數(shù)據(jù)傳輸平臺。通過硬件測試表明,該接口設計方案成本低,傳輸速率可以達到 15 Gb/s。

  關鍵詞PCI-Express總線;FPGA;DMA

0引言

  隨著電子行業(yè)的飛速發(fā)展,人們對數(shù)據(jù)處理能力和存儲速率的要求越來越高,并行數(shù)據(jù)傳輸?shù)腜CI總線技術逐漸成為系統(tǒng)整體性能提升的瓶頸[1]。尤其在接收機的設計中,總線架構關系到系統(tǒng)的整體性能。串行點對點的PCIe總線克服了PCI總線在系統(tǒng)帶寬、傳輸速度等方面固有的缺陷,有效地提高了系統(tǒng)的整體性能。目前實現(xiàn)PCIe總線功能有兩種方法:采用FPGA實現(xiàn)PCIe的功能[2];使用PCIe橋接芯片。由于通過FPGA實現(xiàn)PCIe接口要比使用PCIe橋接芯片更加靈活,成本更低,可靠性更好,所以采用前者完成FPGA與PC機之間的信息的交互。

1PCIe總線的簡介

  PCI Express 體系結構采用分層結構,共分為四層:物理層(Physical Layer)、數(shù)據(jù)鏈路層(Link Layer)、處理層(Transaction Layer)和軟件層(Software Layer),這樣利于跨平臺的應用。軟件層發(fā)出的讀、寫請求,使用基于數(shù)據(jù)包、分段傳輸?shù)膮f(xié)議,通過處理層,傳輸至鏈路層。在鏈路層,數(shù)據(jù)包可以添加序列號和循環(huán)冗余校驗(CRC),從而創(chuàng)建一個更高度可靠的數(shù)據(jù)傳輸機制?;镜奈锢礞溌穼影▋蓚€單一通道,即兩個低電壓的AC耦合差分信號對(一個傳輸對和一個接收對)。通過增加信號對形成多信道,可以組成x1,x2,x4,x8,x16以及x32的鏈路模式,串行數(shù)據(jù)傳輸采用工業(yè)標準的8b/10b編碼實現(xiàn)數(shù)據(jù)恢復[3]。

  本文基于非協(xié)作接收機的驗證平臺進行研究,系統(tǒng)整體框圖如圖1所示。

001.jpg

2PCIe接口及應用層設計

  本設計采用Xilinx公司Virtex-6系列的FPGA,芯片為xc6vlx240t,集成了PCIe的IP核,該PCIe遵循V2.0的規(guī)范。首先使用Core Generation 生成PCIe的硬核模塊,生成的PCIe子模塊的鏈路寬度支持x1,x2,x4,x8四種模式。生成核的過程中主要需要配置的參數(shù)有:參考時鐘、鏈路寬度、設備ID、基址寄存器、TLP的大小、對應的Xilinx的開發(fā)板等[4]。該核完全符合PCI Express的分層結構[5],提供了系統(tǒng)接口(SYS)、外部傳輸接口(PCI EXP)、配置接口(CFG)、事務接口(TRN)和物理接口(PL)。PCI Express的頂端功能模塊與接口如圖2。

002.jpg

  用戶邏輯接口:該接口為用戶設計提供一個產(chǎn)生和消耗TLPs的機制;

  物理層接口:該接口允許用戶設計去查看鏈路狀態(tài)和對方鏈路的控制及狀態(tài);

  配置接口:主機通過該接口對IP核進行配置或讀取狀態(tài);

  系統(tǒng)接口:這里只包括時鐘和復位;

  PCIe接口邏輯:由若干對差分信號線組成,分為接收和發(fā)送信號線。

3DMA控制器的設計與實現(xiàn)

  設計中為提高CPU的運行效率,在系統(tǒng)中引入了DMA控制器,該控制器是在PCIe IP核的基礎上實現(xiàn)的,數(shù)據(jù)的傳輸不占用CPU的時間,提高了系統(tǒng)的運行效率。

  本節(jié)主要介紹DMA中的TLP數(shù)據(jù)包結構、DMA相關寄存器的設計和PCIe接口的DMA讀寫操作核心狀態(tài)機的設計。

  3.1TLP數(shù)據(jù)包結構

  PCIe總線以數(shù)據(jù)包形式傳送信息,本設計主要關注事務層數(shù)據(jù)包TLP。一個完整的TLP如圖3所示,其中只有TLP頭和數(shù)據(jù)有效負載需要由用戶使用FPGA程序實現(xiàn),其他都由PCIe核自動生成并加到幀結構中[6]。

004.jpg

  TLP頭是TLP中最重要的部分,主要包含當前TLP的總線事務類型、路由信息等。一個TLP中的數(shù)據(jù)有效負載的長度是可變的,本設計中選用的最大負載長度為512 B。PCIe 核支持32 bit和64 bit地址空間的操作,其中32 bit地址空間讀寫操作的TLP頭格式如圖4。請求者根據(jù)自己的需要填寫TLP頭中的信息,并將數(shù)據(jù)放在TLP頭的后面發(fā)送給接收者,接收者解析出正確的數(shù)據(jù)放入到自己的地址空間中。

  DMA寫操作使用的TLP格式與存儲器寫操作TLP格式相同,DMA讀操作需要使用存儲器讀請求與存儲器讀完成兩種TLP格式。當接收到存儲器讀請求時,設備需要發(fā)送CPLD(帶數(shù)據(jù)的完成報文)。帶數(shù)據(jù)的完成報文與讀寫請求報文不同。

       32DMA操作寄存器的定義

003.jpg

  PCIe IP核提供6個32 bit基地址寄存器BAR0~BAR5,也可以作為3個64 bit基地址寄存器,可以根據(jù)實際需要進行配置。設計中使用BAR0存儲各種寄存器地址,使用BAR1作為內存操作基地址空間。在BAR0中各寄存器地址定義如下:

 ?。?)偏移地址0x00(DCR2)是控制DMA開始的寄存器,當寫入0x01時,DMA操作開始,上位機開始接收數(shù)據(jù)。

  (2)偏移地址0x04是中斷服務寄存器。當DMA數(shù)據(jù)包傳輸完畢時,寫0x01到該寄存器,產(chǎn)生一個中斷,上位機會進入中斷服務進程。

 ?。?)偏移地址0x08是DMA傳輸?shù)哪康牡刂?。該目的地址是PC機端的內存首地址。DMA傳輸開始之前,將該地址寫到該偏移地址。當DMA操作時,將FPGA板卡上的數(shù)據(jù)傳到PC機端該地址處。

 ?。?)偏移地址0x0C是DMA傳輸?shù)臄?shù)據(jù)長度。設計中定義了每個包的數(shù)據(jù)長度是512 B,由該值可得到需要傳輸?shù)臄?shù)據(jù)包個數(shù),用于控制DMA操作的結束時刻。

  33DMA控制器

  在整個設計中,DMA控制狀態(tài)機是核心部分,主要包括Tx Engine和Rx Engine。Tx Engine負責接收上位機存儲器讀寫操作、單字發(fā)送及DMA發(fā)送。Rx Engine主要負責存儲器讀寫操作、單字接收及DMA接收。實現(xiàn)PCIe的DMA讀寫操作的主要方法是正確填寫TLP包頭中的各個字段,并將數(shù)據(jù)按照64 bit并行放在TLP包頭中。對于DMA寫,將數(shù)據(jù)傳輸給PCIe硬核,由硬核將數(shù)據(jù)發(fā)送到物理端口,最后傳輸?shù)絇C機的物理地址中;對于DMA讀,主機將數(shù)據(jù)包發(fā)送到硬核,最后Rx Engine解包,將數(shù)據(jù)輸出。

  Tx Engine和Rx Engine是使用狀態(tài)機來設計的,Rx Engine狀態(tài)轉移圖如圖5所示?!?/p>

005.jpg

  Rx Engine開始時處于Rx_RST狀態(tài),當Rx Engine收到數(shù)據(jù)包時,首先解析數(shù)據(jù)包,根據(jù)TLP包頭分辨數(shù)據(jù)包類型,進入不同的狀態(tài)。當接收到的是存儲器讀時,進入Rx_MEM_RD_QW1狀態(tài),發(fā)送信號通知Tx Engine,由Tx Engine發(fā)送CPLD數(shù)據(jù)包;當接收到的是存儲器寫時,進入Rx_MEM_WR_QW1,處理收到的TLP數(shù)據(jù)并更新配制寄存器;當收到的是CPLD時,進入Rx_CPLD_QW1狀態(tài),解析數(shù)據(jù)包,將數(shù)據(jù)存儲到相應的存儲器中;若信號trn_reof_n(傳輸結束信號,低電平有效)低電平?jīng)]有到來,則Rx Engine從Rx_CPLD_QW1進入到Rx_CPLD_QWN狀態(tài),根據(jù)寄存器中存有的DMA數(shù)據(jù)長度來判斷數(shù)據(jù)是否已經(jīng)接收完成,若沒有完成則不斷在該狀態(tài)循環(huán),直到數(shù)據(jù)接收完畢,狀態(tài)機回到復位狀態(tài)。

  Tx Engine狀態(tài)轉換圖如圖6所示。

  Tx Engine狀態(tài)機同Rx Engine基本一樣,這里不再贅述?!?/p>

006.jpg

007.jpg

  DMA傳輸開始之前需要對DMA的相關寄存器進行配置,表1是寫DMA的操作步驟,寫DMA控制和狀態(tài)寄存器中定義了TLPs的地址、大小、個數(shù)、負載內容。

  其中DCR1和DCR2是設備控制寄存器,控制選擇FPGA型號、接口數(shù)據(jù)帶寬、讀/寫DMA開始/結束以及中斷服務的開啟。WDMATLPA是寫DMA的TLP低32位地址表1寫DMA操作步驟步驟操作寄存器操作值1發(fā)起初始化復位寫DCR10x000000012取消初始化復位寫DCR10x000000003寫DMA的PC端口地址寫WDMATLPAPC端地址4寫DMA TLP大小寫WDMATLPS事務包大小5寫DMA TLP個數(shù)寫WDMATLPC事務包個數(shù)6TLP數(shù)據(jù)包中payload值寫WDMATLPP數(shù)據(jù)值7寫DMA開始寫DCR20x000000018等待中斷TLP9寫DMA執(zhí)行結果讀WDMAPERF

  寄存器,WDMATLPS是寫DMA事務包的大小、事務包TC字段。WDMATLPC是寫數(shù)據(jù)包個數(shù)寄存器。WDMATLPP是寫數(shù)據(jù)包類型及32位有效負載寄存器。WDMAPERF是寫DMA執(zhí)行寄存器,表示完成DMA傳輸所用到的接口時鐘周期數(shù)。

  讀DMA與上述過程一致,只是在DMA中的傳輸方向的寄存器值不同。

4仿真及測試結果

  完成FPGA的程序編程后,用Modlesim對程序進行仿真。硬件測試時,使用ChipScope抓取數(shù)據(jù),主要分析DMA控制器產(chǎn)生的PCIe總線傳輸信號時序是否滿足要求。同時,通過軟件測試了DMA傳輸速率。

008.jpg

  圖7是DMA寫過程的仿真圖,功能是由FPGA板卡將數(shù)據(jù)上傳至PC機,圖8是讀過程的仿真圖,功能是由PC機到FPGA板卡的數(shù)據(jù)傳輸。由測試數(shù)據(jù)可以估算出PCIe Gen1x8寫操作速度可以達到15 GB/s。

  由圖7可以看到數(shù)據(jù)包傳輸開始于trn_tsof_n低電平之后,結束于trn_teof_n。數(shù)據(jù)傳輸期間trn_tsrc_rdy_n和trn_rdst_rdy_n必須有效。

  由圖8可以看到數(shù)據(jù)包傳輸開始于trn_rsof_n低電平之后,結束于trn_reof_n。數(shù)據(jù)傳輸期間trn_rsrc_rdy_n和trn_tdst_rdy_n必須有效。從圖中可以看到,若DMA傳輸沒有結束,在該數(shù)據(jù)包結束之后,會有新的數(shù)據(jù)包出現(xiàn)在鏈路上。

  由仿真圖可知該設計能完成DMA讀寫功能并保證數(shù)據(jù)的正確傳輸。

  實驗結果可得,DMA寫數(shù)據(jù)的速率可達15 GB/s,讀數(shù)據(jù)的速率可達147 GB/s,數(shù)據(jù)速率有大幅的提高。

5結論

  本文在PCIe硬核基礎上,設計了DMA控制器,使傳輸速度大幅度提高。經(jīng)實際測試,該方案的數(shù)據(jù)傳輸速度在15 GB/s左右,可以滿足工作需要。PCIe是目前總線中傳輸速度最快的一種,此方案為高速的數(shù)據(jù)傳輸提供了一個參考,具有很好的參考和應用價值。參考文獻

  [1] 王齊.PCI Express 體系結構導讀[M].北京:機械工業(yè)出版社,2010.

  [2] 雷雨,任國強,孫健,等.基于PCIE 的高速光纖圖像實時采集系統(tǒng)設計[J].電子技術應用,2013,39(10):136-142.

 ?。?] 魏蕓.基于FPGA的PCIe總線DMA平臺設計[D].武漢:武漢理工大學,2013.

 ?。?] 陳剛,張京,唐建.一種基于FPGA的PCIe總線及其DMA的設計方法[J].兵工自動化,2014,33(5):75-77.

  [5] LogiCORETM IP Virtex6 FPGA Integrated Block Data Sheet[R].Xilinx,2009.

 ?。?] 李木國,黃影,劉于之.基于FPGA的PCIe總線接口的DMA傳輸設計[J].計算機測量與控制,2013,21(1):233-235.


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