廖寅龍,田 澤,趙 強,馬 超
(西安航空計算技術研究所 集成電路與微系統設計航空科技重點實驗室,陜西 西安 710068)
PCIe總線物理層彈性緩沖設計與實現
廖寅龍,田 澤,趙 強,馬 超
(西安航空計算技術研究所 集成電路與微系統設計航空科技重點實驗室,陜西 西安 710068)
PCIe是在PCI總線的基礎上提出的新一代總線和接口標準,它原來的名稱為“3GIO”,是由英特爾在2001年提出的。PCIe屬于高速串行點對點雙通道高帶寬傳輸,所連接的設備分配獨享通道帶寬,不共享總線帶寬,主要支持主動電源管理、錯誤報告、端對端的可靠性傳輸、熱插拔以及服務質量(QOS)等功能。PCIe作為高速串行數據總線以其眾多的優點在計算機、通訊、航空航天等領域得到了廣泛應用。為了實現穩定可靠的數據通訊,必須解決總線恢復時鐘域數據和本地時鐘域數據的同步問題,彈性緩沖區是實現PCIe總線接口數據同步機制的有效方法。文中根據PCIe協議要求,分析PCIe總線通信中時鐘偏差的多種場景,設計了一款采用20位數據總線,讀寫時鐘頻率可達250 MHz的彈性緩沖,有效解決了PCIe總線通信中總線恢復時鐘域與本地時鐘域的數據同步問題。
PCIe;彈性緩沖;同步FIFO;半滿
PCIe(PCI Express)是從PCI發展而來的一種系統互聯接口標準。PCI和PCI-X都是基于32位以及64位的并行總線,而PCIe則使用高速串行總線。PCIe后向兼容于PCI,能夠靈活地提供大峰值帶寬。PCIe鏈路由多條通路組成,在鏈路中增加更多的通路可提高PCIe鏈路的帶寬。規范支持的鏈路通路帶寬有x1、x4、x8和x16等[1-3]。
PCIe總線是高速串行總線,并行數據在物理層經過字節拆分、擾頻、8b/10b編碼、并串轉換等過程將數據包由差分驅動接口以2.5 Gbps(PCIe 2.0標準中此速率為5 Gbps)的速率傳輸出去,接收設備執行大致相反的過程完成串行數據包接收和并行數據重組。8b/10b編碼的目的則是為了將高頻時鐘嵌入到串行數據中,接收端內嵌時鐘和數據恢復電路(Clock and Data Recovery,CDR)可根據比特流中眾多的0和1轉換來重建接收時鐘,這樣就避免了在發送和接收端之間傳輸高達GHz的高頻時鐘[4-5]。
PCIe接收模塊CDR電路恢復時鐘及其本地時鐘并不是同源時鐘,雖然兩者的時鐘頻率在標稱上是一致的,但是也必然存在頻率的輕微不一致。所以,為了保證可靠地將CDR恢復時鐘域的數據同步到本地時鐘域,必須要考慮時鐘頻率偏差的影響,而彈性緩沖區可以很好地達到這個目的[6]。
根據協議要求,PCIe總線在2.5 Gbps的速率下通信,允許有300ppm的誤差,所以總線頻率在2.499 25~2.500 75 GHz范圍內都是允許的。由于這個允許的總線偏差,兩個互相通信的PCIe總線設備,其工作頻率會有輕微的不一致。因此,在同一個設備中數據的發送和接收將處于兩個不同的時鐘域。彈性緩沖將在兩個時鐘域的數據同步中起到頻率補償的作用,使通過彈性緩沖向上提交的數據保持完整。
彈性緩沖擁有兩個時鐘,一個來自于CDR電路,用于接收數據寫入彈性緩沖;另一個用于從彈性緩沖中讀出數據。兩個時鐘可以是異步時鐘,并且時鐘頻率也可以不一樣。彈性緩沖具有上溢或者下溢的保護機制,用來監控彈性緩沖中數據的填充狀態,并自動填充或者刪除特定的字符數據。在PCIe總線中這個特定字符為SKP有序集中的SKP(K28.1)字符。每個SKP有序集由一個COM字符(K28.5)和3個SKP字符組成。為了保證彈性緩沖不上溢也不下溢,要求發送端周期性地發出SKP有序集。
SKP有序集的周期必須要考慮最壞情況,PCIe總線速率與標準速率最大可允許300ppm,那么總線上通信的兩個PCIe設備時鐘最大可以有600ppm。這意味著1 666個時鐘周期就可能有一個2.5 GHz時鐘周期的時鐘偏差。這要求發送端發送SKY有序集的周期必須小于1 666個周期。根據協議定義要求,發送端在1 180~1 538個SKP有序集傳輸時間內,必須發出一個SKP有序集出來。接收端彈性緩沖接收到這個有序集后,根據恢復時鐘和本地時鐘的狀態,可以決定在這個有序集中增加或者刪除2個COM字符,從而達到消除發送端和接收端時鐘偏差的目的。
在發送端正在發送大數據包的TLP(傳輸層包)而導致SKP有序集不能及時發送的情況下,為保證擁有足夠的SKP有序集來保證彈性緩沖正常工作,這些不能按時發出的SKP有序集應該在發送端緩存起來,并等待TLP發送結束,然后立刻將緩沖的SKP有序集發送出去[7-9]。
彈性緩沖的緩沖容量由3個因素決定:SKP有序集的發送周期、器件支持的最大數據包的大小及總線的鏈路寬度。這3個要素共同決定了到達接收端的SKP有序集的最大時間間隔。這個最大間隔時間是由可能大于協議要求的1 180~1 538個有序集產生的。比如,當需要發送一個SKP有序集時,發送端正在發送一個TLP包,那么SKP有序集必須在當前TLP包發送完成后才可以進行發送。最壞的情況是,PCIe總線處于X1狀態,而且在需要發送SKP有序集的時候,發送端剛好已經開始發送總線所支持最大TLP包數據。
規劃彈性緩沖的容量大小,必須基于最壞的情況來考慮,其最大可能偏差的計算公式如下:
Max_symbols_shifted=1 666-1((Max_Payload_Size+TLP_Overhead)Link_With-1+1 538)
(1)
式中,Max_symbols_shifted為緩沖最大可能偏差;Max_Payload_Size為器件支持的最大TLP包的數據負載長度;TLP_Overhead固定為28個字符時間,包含包起始字符、結束字符、幀頭及CRC字段等;Link_With為總線通信通道數目,這個值通常取1。
彈性緩沖主要包含了一個FIFO,在正常模式下,這個FIFO應該是半滿的。如果彈性緩沖的寫入時鐘與讀出時鐘頻率嚴格相等,那么FIFO將總是處于半滿狀態。如果彈性緩沖的寫入時鐘與讀出時鐘頻率存在頻率偏差,那么彈性緩沖將緩存在彈性緩沖中的SKP有序集中的SKP字符刪除或者插入,保持FIFO是半滿的狀態。根據式(1),在最壞情況下依然能保持FIFO半滿狀態,那么彈性緩沖中FIFO的深度必須大于Max_symbols_shifted的2倍。
在PCIe總線接收端,根據總線恢復時鐘及本地時鐘的快慢情況,彈性緩沖區可以分為以下幾種情況進行處理:
(1)總線恢復時鐘快于本地時鐘。
當總線恢復時鐘快于本地時鐘的時候,寫入彈性緩沖區的數據將會比讀出數據多,本地時鐘域在獲得SKP有序集的COM字符時,彈性緩沖中FIFO數據將會超過半滿狀態,如圖1所示。
如果本地時鐘在彈性緩沖區獲得SKP有序集的時候,彈性緩沖FIFO的數據超過半滿狀態大于2個字符,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候加3;彈性緩沖FIFO的數據超過半滿狀態1個字符,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候加2;彈性緩沖FIFO的數據剛好半滿狀態,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候加1。
(2)總線恢復時鐘慢于本地時鐘。
當總線恢復時鐘慢于本地時鐘的時候,寫入彈性緩沖區的數據將會比讀出數據少,本地時鐘域在獲得SKP有序集的COM字符時,彈性緩沖中FIFO數據將會少于半滿狀態,如圖2所示。

圖1 恢復時鐘快于本地時鐘

圖2 恢復時鐘慢于本地時鐘
如果本地時鐘在彈性緩沖區獲得SKP有序集的時候,彈性緩沖FIFO的數據少于半滿狀態達2個字符,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候停頓2個本地時鐘周期;彈性緩沖FIFO的數據少于半滿狀態1個字符,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候停頓1個本地時鐘周期;彈性緩沖FIFO的數據剛好半滿狀態,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候加1[10-11]。
文中所描述的彈性緩沖采用Verilog HDL語言設計,保證邏輯設計與工藝無關,可方便應用于FPGA設計或者ASIC芯片設計中。對設計代碼采用SPYGLASS工具進行代碼風格檢查及CDC(時鐘域檢查),保證代碼的可靠性。同時構建仿真平臺,模擬恢復時鐘及本地時鐘的頻率差異的多種情況,保證彈性緩沖區正常工作[12-13]。
文中分析了高速串行總線PCIe數據通訊的同步問題,研究了彈性緩沖進行高速串行總線數據同步的基本原理,根據PCIe總線協議提出了一種適用于PCIe總線的彈性緩沖設計方法,并驗證了其可行性。同時,該彈性緩沖設計方法的提出對其他高速串行通信的通信緩沖設計也有一定的參考意義。
[1] 馬 萍,唐衛華,李緒志.基于PCI Express總線高速數采卡的設計與實現[J].微計算機信息,2008,24(25):116-118.
[2] 徐君明,裴先登,王海衛,等.高性能計算機I/O技術PCI Express分析[J].計算機工程,2004,30(12):6-7.
[3] 王 齊.PCI Express體系結構導讀[M].北京:機械工業出版社,2010:350-362.
[4] 馬鳴錦.PCI、PCI-X和PCI Express的原理及體系結構[M].北京:清華大學出版社,2007.
[5] Data book PEX 8311 detailed technical specification[M].[s.l.]:PLX Technology,2009.
[6] Joe Winkles J.Elastic buff implementation in PCI express device[M].[s.l.]:Mindshare Inc,2003.
[7] PCI-SIG.PCI ExpresTM base specification revision[S].[s.l.]:PCI-SIG,2005.
[8] PCI-SIG.PCI Express? 2.0 base specification revision[S].[s.l.]:PCI-SIG,2006.
[9] Dally W J.Virtual-channel flow control[J].IEEE Transactions on Parallel and Distributed Systems,1992,3(2):194-205.
[10] 劉洪波,龍 娟,郝曉莉,等.異步FIFO狀態判斷的研究與設計[J].微電子學與計算機,2007,24(3):81-84.
[11] 張維旭,賀占莊.基于FPGA的異步FIFO設計[J].計算機技術與發展,2006,16(7):168-170.
[12] 郭 蒙,田 澤,蔡葉芳,等.1553B總線接口SoC驗證平臺的實現[J].航空計算技術,2008,38(6):99-101.
[13] 韓 霞,楊洪斌,吳 悅.面向SoC的事務級驗證研究[J].計算機技術與發展,2007,17(3):33-36.
Design and Implementation of PCIe Physical Layer Elastic-buffer
LIAO Yin-long,TIAN Ze,ZHAO Qiang,MA Chao
(Key Laboratory of Aeronautics Science and Technology of Integrate Circuit and Micro-system Design, AVIC Computing Technique Research Institute,Xi’an 710068,China)
PCIe is a new generation of bus and interface based on PCI bus,its original name is "3GIO",was introduced by Intel in 2001.PCIe belongs to dual channel high bandwidth transmission of high speed serial point to point,the connected equipment allocates unshared bandwidth of channel that do not share bus bandwidth,mainly supporting the functions including active power management,bug reports,end to end transmission of the reliability,hot swappable and Quality of Service (QoS) etc.PCIe had been widely applied in computer,communication,aeronautics and astronautics and other fields as the high-speed-serial data bus.In order to realize stable and reliable communication,elastic-buffer is considered as necessary in PCIe which is used to ensure data integrity between the recovered clock domain and the local clock domain.It analyzes the clock-skew under the variable scenes based on PCIe specification and designs a kind of elastic-buffer with 20 bits data bus and 250 MHz R/W clock frequency,solving the problem of data synchronization between bus recovery clock domain and local clock domain.
PCIe;elastic-buffer;synchronous-FIFO;half-full
2015-08-31
2015-12-09
時間:2016-05-25
中國航空工業集團公司創新基金(2010BD63111)
廖寅龍(1982-),男,工程師,研究方向為SoC設計與驗證;田 澤,博士,研究員,中國航空工業集團首席技術專家,研究方向為SoC設計、嵌入式系統設計、VLSI設計等。
http://www.cnki.net/kcms/detail/61.1450.TP.20160525.1708.042.html
TP39
A
1673-629X(2016)06-0168-03
10.3969/j.issn.1673-629X.2016.06.037