朱策+徐暉+周體民
摘 ?要: 隨著高速采集系統的采樣速率的增大和采樣精度的提高,如何設置PCI Express系統的參數,充分利用PCI Express總線的帶寬,以滿足高速海量數據的實時傳輸就變得非常重要。在此分析了PCI Express系統數據傳輸開銷的來源,研究了幾種主要的系統參數,以提高數據吞吐量。通過使用PLDA 的EZDMA2 IP核,在Xilinx KC705評估板上對各個參數進行測試,結果表明,靈活設置這些關鍵的系統參數可以利用較少的FPGA資源,同時達到較高的傳輸帶寬,對PCI Express系統設計具有非常高的參考價值。
關鍵詞: 高速數據采集; PCI Express; 總線傳輸帶寬; PLDA EZDMA2 IP; Xilinx KC705
中圖分類號: TN964?34 ? ? ? ? ? ? ? ? ? 文獻標識碼: A ? ? ? ? ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2014)24?0126?04
Performance analysis of PCI express bus for high?speed data acquisition
ZHU Ce1, XU Hui1, ZHOU Ti?min2
(1. School of Electronic Science and Engineering, National University of Defense Technology, Changsha 410073, China; 2. Unit 63626 of PLA, Jiuquan 732750, China)
Abstract: With increase of sampling rate and improvement of sampling precision of high?speed acquisition system, it is very important to know how to set the parameters PCI Express system and to make full use of PCI Express bus bandwidth, so as to meet the high?speed real?time transmission of mass data. In this paper, the data transfer overhead of PCI Express system is
analyzed and several major system parameters are investigated to improve data throughput. By using EZDMA2 IP core in PLDA, various parameters were tested on Xilinx KC705 evaluation board. The results show that flexible setting of these critical system parameters can occupy fewer FPGA resources while achieving higher transmission bandwidth. It has a very high reference value for PCI Express system design.
Keywords: high?speed data acquisition; PCI express; bus transmission bandwidth; PLDA EZDMA2 IP; Xilinx KC705
0 ?引 ?言
高速數據采集系統廣泛應用于電子測量、軟件無線電、雷達等領域,涉及采樣理論、數字信號處理、高速電路設計、高速ADC等多個領域,屬于信號獲取領域的重要課題。隨著半導體工藝技術的日益進步,高速數據采集中所用的ADC采樣精度和采樣速度己經達到一個新的水平,幾百MHz甚至幾GHz采樣速率的采集系統,已得到廣泛的應用,這就要求有相應的高帶寬的數據總線,將采樣數據傳輸出來,進行信號處理或存儲[1]。作為一個串行的點對點互聯協議,PCI Express技術為可靠的數據傳輸提供了一個高帶寬可擴展的解決方案,所以其迅速在高速采集領域得到了廣泛的應用[2]。文章分析了PCI Express系統數據傳輸開銷的來源,研究了影響PCI Express系統性能的因素,同時基于PLDA 的EZDMA2 IP核和Xilinx KC705評估板對PCI Express系統進行性能測量和分析,以驗證這些因素的影響[3?6]。
1 ?PCI Express性能定義
PCI Express協議規定,對于PCI Express Gen1系統,單個鏈路最大傳輸速率是2.5 Gb/s,Gen2系統最大傳輸速率為5 Gb/s,最新的Gen3系統[7]為8 Gb/s。這些速率描述的是每個通道上單方向數據傳輸的原始比特率,而不是PCI Express系統的數據傳輸速率。由于存在各種開銷和其他系統設計的折衷,PCI Express系統的有效數據傳輸速率會降低。
PCI Express系統的數據傳輸使用各種各樣的數據包,比如存儲器類型、I/O類型和配置類型的數據包。大部分設計以提高傳輸存儲器類型數據包速率為目標。本篇文章也將存儲器類型數據包的傳輸速率定義為系統性能。下文中,如果無特殊說明,數據都指的是存儲器類型的數據。
PCI Express Gen1、Gen2和Gen3協議存在少量的不同點,文章主要研究PCI Express Gen2協議,所有的性能測量也都是基于Gen2的系統。但是,文章中提到的這些觀點同樣適用于Gen1和Gen3系統。
2 ?PCI Express數據傳輸開銷
在PCI Express系統上傳輸任何數據都會有一定數量的開銷。符號編碼開銷,TLP開銷和傳輸開銷是影響PCI Express系統的3個關鍵因素,下面分別研究三個因素的影響。
2.1 ?符號編碼
PCI Express Gen2協議采用8 b/10 b編碼來保持傳輸線上的直流(DC)平衡,并可以進行錯誤檢測,8 b/10 b編碼不像其他影響因素那樣可以調整,這種編碼是必須的。表1是部分8 b/10 b編碼的例子。完整的8 b/10 b編碼表,請參考PCI Express協議規范。
表1 部分8 B/10 B編碼表
8 b/10 b編碼保證了數據流中包含足夠豐富的時鐘信息,使得接收方可以從串行數據流中恢復出本地接收時鐘。這種編碼保證每傳輸20 b數據,1和0的數量相差不超過2,而且不會有連續的5個1或0出現。為了保持直流平衡,每個傳輸的字節都有一個正極性和負極性的10?bit編碼,由發送方根據電路的流動差異(CRD)選擇一個10?bit編碼發送到串行鏈路上。因此,一個字節的數據需要串行鏈路上傳送10 b的數據。顯然,編碼損失了20%的傳送能力。由此可以得到鏈路在半雙工下的理論帶寬:
[半雙工理論帶寬(B)=5 ?Gb/s×鏈路寬度10 ?b/B] ?(1)
表2給出了對于不同的鏈路寬度下PCI Express Gen2的理論帶寬。
表2 PCI Express Gen2理論帶寬
所以,盡管PCI Express Gen2每條串行鏈路數據率為5 Gb/s,但是8 B/10 B編碼會把每條鏈路單向傳輸的有效帶寬減少為4 Gb/s。實際的系統性能還會因為包的開銷,傳輸開銷等進一步降低。
2.2 ?TLP開銷
信息以包的形式在PCI Express設備間傳送,PCI Express系統用事務層包(TLP)來傳輸數據,存儲器類型的數據傳輸主要應用兩種類型的TLP:存儲器寫TLP(MWr)和帶數據的完成TLP(CplD),CplD響應存儲器讀操作。圖1為一個典型的TLP結構,有效數據存在于圖中Payload部分。
PCI Express協議的事務層,數據鏈路層,物理層都增加了每個TLP的開銷,使有效數據的比例降低。事務層添加了包頭(Header)和可選的端到端的循環冗余校驗(ECRC)。數據鏈路層添加了包序列號(Sequence)和鏈路層循環冗余校驗(LCRC)。物理層則添加了包的開始和結束標志。PCI Express包含32?bit和64?bit兩種地址模式,32?bit地址的TLP包頭為12 B,64?bit地址的TLP包頭為16 B,需要附加的4 B來標識高32 b地址信息。根據地址模式和可選的CRC校驗,TLP的開銷在20~28 B之間變化。
大量數據的傳輸需要許多的TLP,每個TLP都會有自己的開銷。因此,采用更大的TLP可以增加有效數據的比例從而增加鏈路的效率。PCI Express系統中的每個設備都有自己的最大載荷(MPS),這決定了最大的TLP大小,但是增加MPS并不一定會使鏈路效率成比例增加,因為TLP的大小變大,其他的因素比如傳輸開銷會增加對系統性能的影響。
2.3 ?傳輸開銷
PCI Express協議的物理層和鏈路層都會引入傳輸開銷,當鏈路進入正常工作狀態(L0狀態),物理層會插入SKIP有序集,SKIP用于補償發送方時鐘與本地接收時鐘之間的時鐘偏差。SKIP包的長度為4 B,在1 180~1 538個符號時間內必須插入一次。一個符號時間就是在串行鏈路上傳輸一個字節的時間。PCI Express協議不允許在TLP包的中間插入有序集或者其他類型的包,所以SKIP有序集和其他負責鏈路管理的包只可以在TLP包的發送間隙內被發送,PCI Express協議的這個特性也是增大MPS并不會使鏈路效率成倍增加的原因。當TLP變大時,在兩個TLP之間的發送的鏈路管理包也會增加。
PCI Express協議定義了鏈路管理層包(DLLPs),目的是為了確保鏈路雙方傳輸數據的可靠性。DLLPs只在數據鏈路層產生和處理。PCI Express協議有許多用于鏈路管理的包,其中確認(ACK)DLLPs、不確認(NAK)DLLPs和流控制(FC)DLLPs對PCI Express系統的傳輸性能影響最大。
發送方每次發送一個TLP包,接收方就要返回發送方一個ACK或者NAK來表示接收TLP成功或失敗,發送方必須把TLP保存在它的重傳緩存中,直到接收到這個TLP對應的ACK包。當傳輸發生錯誤時,那么該TLP可以重傳,以確保數據無丟失。由于PCI Express協議的ACK/NAK機制,當大量的TLP發送時,就會產生相當多的ACK/NAK DLLPs,減少了鏈路的數據帶寬。
PCI Express協議允許多個等待發送的相同類型的DLLPs被縮減為一個DLLPs,如圖2所示。例如,如果接收方成功接收5個TLP,接收方對第5個TLP返回ACK包,那么發送方就認為5個TLP都被成功發送。這樣就減少了鏈路上的ACK包的數量,當然,如果接收方ACK包發送的頻率很小,那么發送方的重傳緩存就會累積很多等待ACK的TLP,發送方會因此減慢發送速度。如果發送方重傳緩存填滿,那么新的TLP就不會被發送,直到已發送的TLP接收到確認。所以,當用戶開發一個PCI Express產品時,他必須設計一種機制,來決定什么時候把多個DLLPs縮減為一個DLLPs。
基于信用量(Credit)的流控制(FC)協議減少了因為接收緩存溢出而造成的包丟失,流控制協議相比較傳統PCI的重試(Retry)模式更優越,但它還是不可能保證鏈路效率一直高效。鏈路上的每個設備持續發送流控制DLLPs,用來更新設備接收緩存的狀態,發送方只會在接受方有足夠緩存空間的情況下發包。發送設備記錄接收設備可用的信用量,每次發送一個包,就將信用量減少。在接收方處理一個包和釋放緩存空間后,它發送更新流控制包(FC Update DLLP)來通知發送方還有多少剩余空間。設備處理和發送FC Update DLLP的效率影響著整個鏈路的效率。類似于設備可以控制ACK/NAK包的頻率,一個設備怎樣處理和發送流控制包取決于設備內部邏輯的設計,不同設備之間可能不同。降低流控制包的頻率可以減少用于鏈路管理的傳輸開銷,但是,接收緩存必須更大以保持相應的性能。
3 ?影響性能的系統參數
3.1 ?最大載荷長度
PCI Express協議允許最大載荷的上限至4 096 B,但協議規定MPS參數不可超過數據傳輸路徑上的每個設備的MPS。因此,MPS很大的設備必須使用較低的MPS來適應路徑上低MPS能力的設備。例如,圖3中PCI Express系統的MPS設置為128 B,以適應端點3。
MPS設置在系統枚舉和配置過程就決定了。設備的MPS存放在設備能力寄存器(Device Capability register)中,該寄存器位于設備的配置空間。軟件探測每個設備得到MPS,計算系統的MPS,然后把MPS寫入設備的設備控制寄存器(Device Control register)中。
MPS決定了傳輸給定數量數據所需要的TLP數量。當MPS增加時,相同數據需要的TLP數量就會減少。但是,增加MPS并不會等比例增加系統效率。等式II定義了包效率。
[包效率=MPSMPS+TLP開銷] (2)
表3給出了4種MPS的包效率,表中數據假設TLP使用3DW包頭,沒有ECRC校驗,總共20 B開銷。
表3 包效率
包效率和MPS成正比例關系,但不是等比例增加。現在大部分的系統將MPS設置為128 B或256 B。對于一個確定的MPS,包效率也固定了,不會隨著傳輸數據多少而變化。
3.2 ?最大讀請求長度
在配置過程中,軟件還將最大讀請求長度寫入設備的控制寄存器。參數設定一次存儲器讀的最大長度,最大讀請求長度可以以128 B為步進,最大可設為4 096 B。最大讀取請求長度可以比MPS大。例如,一個512 B的讀請求可以發給MPS為128 B的設備。該設備返回的帶數據的完成TLP(CplD)長度限制為128 B或更少,這需要多個CplD來一個讀操作。PCI Express系統采用最大讀取請求長度來平衡分配總線拓撲結構上的帶寬。限制設備在一次讀請求中可以讀取的最大數據量,可以防止其壟斷系統帶寬。最大讀請求長度也影響系統性能,因為它決定了讀請求被發送的次數,而讀請求不包含任何有效載荷。當最大讀請求長度為128 B時,讀取64 KB的數據需要讀取512次TLP(64 KB / 128 B= 512)。為了提高效率,移動大數據塊時,讀請求的大小應該盡可能地接近最大讀請求長度,減少讀取次數。
3.3 ?讀完成邊界
設備接收到讀請求后,通過帶數據的完成TLP(CplD)返回要讀取的數據,讀完成邊界(RCB)使一次讀請求的數據通過多個CplD來返回。根據地址邊界對齊,數據被劃分為64 B或128 B,也有一部分CplD中的數據小于RCB設置,這取決于下個地址邊界的位置。大部分根復合體設置RCB為64 B,每包返回64 B數據,而不是其他MPS允許的值。圖4給出了當RCB為64 B,端點從地址0x00010028讀取256(0x100) B數據時,根復合體如何返回這些數據。
返回256 B數據需要5個CplD,如果每個TLP采用3DW包頭,包效率為64/(64+20)=76%。許多根復合體使用64 B RCB,盡管MPS為128 B或更高。所以,讀完成操作就是返回這些CplD的時間,而且根據RCB設置,這些數據被劃分成了很小的包。
4 帶寬測試
Xilinx KC705評估板包含一片Xilinx Kintex?7 XC7K325T?2FFG900C FPGA,1GB SODIMM 800 MHz / 1 600 Mb/s DDR3和PCI Express x8邊緣連接器。Kintex?7 FPGA是Xilinx采用28 nm HKMG 高性能低功耗 (HPL) 工藝的FPGA系列之一,Kintex?7 系列是一種新型 FPGA,能以不到Virtex?6 系列一半的價格實現與其相當性能,性價比提高了一倍,功耗降低了一半。XC7K325T?2FFG900C FPGA帶有16個GTX串行收發器,支持最大數據率10.312 5 Gb/s,可以實現PCI Express協議,采用Xilinx PCI Express硬核,最大支持Gen2x8配置,若采用第三方IP,最高支持Gen3x8[8?11]。
PLDA EZDMA2 IP是基于FPGA PCI Express硬核開發的支持DMA操作的IP核,最大支持8個通道DMA操作。MPS最大支持512 B,最大讀請求支持1 KB。PLDA為其IP提供了完整的Windows驅動和上位機測試程序。
測試時采用PCI Express Gen2x8,測試環境為Win7操作系統,主板芯片組Intel Z77,CPU為Intel Core i5?3 570。
表4 列出了測試結果
5 ?結 ?語
本文以高速信號采集為應用背景,分析了PCI Express系統數據傳輸開銷和影響PCI Express系統性能的因素,同時基于PLDA 的EZDMA2 IP核和Xilinx KC705評估板對上述因素進行驗證,實驗結果對PCI Express系統設計具有一定的參考價值。
參考文獻
[1] 趙宇玲.基于FPGA的信號采集與處理系統設計與實現[D].南京:南京理工大學,2008.
[2] 馬明錦,朱劍冰,何紅旗,等.PCI、PCI?X和PCI Express的原理及體系結構[M].北京:清華大學出版社,2007.
[3] PLDA. EZDMA2 IP for Xilinx hard IP getting started [EB/OL]. [2012?10?01]. http://www.plda.com.
[4] PLDA. 2012EZDMA2 IP for Xilinx hard IP reference manual [EB/OL]. [2011?10?05]. http://www.plda.com.
[5] Xilinx. Kintex?7 FPGA KC705 evaluation kit getting started guide [EB/OL]. [2013?07?02]. http://www.xilinx.com.
[6] Xilinx. KC705 evaluation board for the Kintex?7 FPGA user guide [EB/OL]. [2013?07?18]. http://www.xilinx.com.
[7] PCI?SIG. PCI express base 2.0 specification [EB/OL]. [ 2006?10?09]. http://www.pcisig.com.
[8] Xilinx. PIPE mode simulation using integrated endpoint PCI express block in Gen2 x8 and Gen3 x8 configurations [EB/OL]. [2014?02?19]. http://www.xilinx.com.
[9] Xilinx. LogiCORE IP endpoint block plus v1.15 for PCI express [EB/OL]. [2011?06?22]. http://www.xilinx.com.
[10] Xilinx. 7 Series FPGAs integrated block for PCI express v3.0 [EB/OL]. [2014?02?04]. http://www.xilinx.com.
[11] Xilinx. PCI express for the 7 series FPGAs [EB/OL]. [2012?09?21]. http://www.xilinx.com.
本文以高速信號采集為應用背景,分析了PCI Express系統數據傳輸開銷和影響PCI Express系統性能的因素,同時基于PLDA 的EZDMA2 IP核和Xilinx KC705評估板對上述因素進行驗證,實驗結果對PCI Express系統設計具有一定的參考價值。
參考文獻
[1] 趙宇玲.基于FPGA的信號采集與處理系統設計與實現[D].南京:南京理工大學,2008.
[2] 馬明錦,朱劍冰,何紅旗,等.PCI、PCI?X和PCI Express的原理及體系結構[M].北京:清華大學出版社,2007.
[3] PLDA. EZDMA2 IP for Xilinx hard IP getting started [EB/OL]. [2012?10?01]. http://www.plda.com.
[4] PLDA. 2012EZDMA2 IP for Xilinx hard IP reference manual [EB/OL]. [2011?10?05]. http://www.plda.com.
[5] Xilinx. Kintex?7 FPGA KC705 evaluation kit getting started guide [EB/OL]. [2013?07?02]. http://www.xilinx.com.
[6] Xilinx. KC705 evaluation board for the Kintex?7 FPGA user guide [EB/OL]. [2013?07?18]. http://www.xilinx.com.
[7] PCI?SIG. PCI express base 2.0 specification [EB/OL]. [ 2006?10?09]. http://www.pcisig.com.
[8] Xilinx. PIPE mode simulation using integrated endpoint PCI express block in Gen2 x8 and Gen3 x8 configurations [EB/OL]. [2014?02?19]. http://www.xilinx.com.
[9] Xilinx. LogiCORE IP endpoint block plus v1.15 for PCI express [EB/OL]. [2011?06?22]. http://www.xilinx.com.
[10] Xilinx. 7 Series FPGAs integrated block for PCI express v3.0 [EB/OL]. [2014?02?04]. http://www.xilinx.com.
[11] Xilinx. PCI express for the 7 series FPGAs [EB/OL]. [2012?09?21]. http://www.xilinx.com.
本文以高速信號采集為應用背景,分析了PCI Express系統數據傳輸開銷和影響PCI Express系統性能的因素,同時基于PLDA 的EZDMA2 IP核和Xilinx KC705評估板對上述因素進行驗證,實驗結果對PCI Express系統設計具有一定的參考價值。
參考文獻
[1] 趙宇玲.基于FPGA的信號采集與處理系統設計與實現[D].南京:南京理工大學,2008.
[2] 馬明錦,朱劍冰,何紅旗,等.PCI、PCI?X和PCI Express的原理及體系結構[M].北京:清華大學出版社,2007.
[3] PLDA. EZDMA2 IP for Xilinx hard IP getting started [EB/OL]. [2012?10?01]. http://www.plda.com.
[4] PLDA. 2012EZDMA2 IP for Xilinx hard IP reference manual [EB/OL]. [2011?10?05]. http://www.plda.com.
[5] Xilinx. Kintex?7 FPGA KC705 evaluation kit getting started guide [EB/OL]. [2013?07?02]. http://www.xilinx.com.
[6] Xilinx. KC705 evaluation board for the Kintex?7 FPGA user guide [EB/OL]. [2013?07?18]. http://www.xilinx.com.
[7] PCI?SIG. PCI express base 2.0 specification [EB/OL]. [ 2006?10?09]. http://www.pcisig.com.
[8] Xilinx. PIPE mode simulation using integrated endpoint PCI express block in Gen2 x8 and Gen3 x8 configurations [EB/OL]. [2014?02?19]. http://www.xilinx.com.
[9] Xilinx. LogiCORE IP endpoint block plus v1.15 for PCI express [EB/OL]. [2011?06?22]. http://www.xilinx.com.
[10] Xilinx. 7 Series FPGAs integrated block for PCI express v3.0 [EB/OL]. [2014?02?04]. http://www.xilinx.com.
[11] Xilinx. PCI express for the 7 series FPGAs [EB/OL]. [2012?09?21]. http://www.xilinx.com.