廖寅龍,田 澤,趙 強,馬 超
(西安航空計算技術(shù)研究所 集成電路與微系統(tǒng)設(shè)計航空科技重點實驗室,陜西 西安 710068)
PCIe總線物理層彈性緩沖設(shè)計與實現(xiàn)
廖寅龍,田 澤,趙 強,馬 超
(西安航空計算技術(shù)研究所 集成電路與微系統(tǒng)設(shè)計航空科技重點實驗室,陜西 西安 710068)
PCIe是在PCI總線的基礎(chǔ)上提出的新一代總線和接口標(biāo)準(zhǔn),它原來的名稱為“3GIO”,是由英特爾在2001年提出的。PCIe屬于高速串行點對點雙通道高帶寬傳輸,所連接的設(shè)備分配獨享通道帶寬,不共享總線帶寬,主要支持主動電源管理、錯誤報告、端對端的可靠性傳輸、熱插拔以及服務(wù)質(zhì)量(QOS)等功能。PCIe作為高速串行數(shù)據(jù)總線以其眾多的優(yōu)點在計算機、通訊、航空航天等領(lǐng)域得到了廣泛應(yīng)用。為了實現(xiàn)穩(wěn)定可靠的數(shù)據(jù)通訊,必須解決總線恢復(fù)時鐘域數(shù)據(jù)和本地時鐘域數(shù)據(jù)的同步問題,彈性緩沖區(qū)是實現(xiàn)PCIe總線接口數(shù)據(jù)同步機制的有效方法。文中根據(jù)PCIe協(xié)議要求,分析PCIe總線通信中時鐘偏差的多種場景,設(shè)計了一款采用20位數(shù)據(jù)總線,讀寫時鐘頻率可達(dá)250 MHz的彈性緩沖,有效解決了PCIe總線通信中總線恢復(fù)時鐘域與本地時鐘域的數(shù)據(jù)同步問題。
PCIe;彈性緩沖;同步FIFO;半滿
PCIe(PCI Express)是從PCI發(fā)展而來的一種系統(tǒng)互聯(lián)接口標(biāo)準(zhǔn)。PCI和PCI-X都是基于32位以及64位的并行總線,而PCIe則使用高速串行總線。PCIe后向兼容于PCI,能夠靈活地提供大峰值帶寬。PCIe鏈路由多條通路組成,在鏈路中增加更多的通路可提高PCIe鏈路的帶寬。規(guī)范支持的鏈路通路帶寬有x1、x4、x8和x16等[1-3]。
PCIe總線是高速串行總線,并行數(shù)據(jù)在物理層經(jīng)過字節(jié)拆分、擾頻、8b/10b編碼、并串轉(zhuǎn)換等過程將數(shù)據(jù)包由差分驅(qū)動接口以2.5 Gbps(PCIe 2.0標(biāo)準(zhǔn)中此速率為5 Gbps)的速率傳輸出去,接收設(shè)備執(zhí)行大致相反的過程完成串行數(shù)據(jù)包接收和并行數(shù)據(jù)重組。8b/10b編碼的目的則是為了將高頻時鐘嵌入到串行數(shù)據(jù)中,接收端內(nèi)嵌時鐘和數(shù)據(jù)恢復(fù)電路(Clock and Data Recovery,CDR)可根據(jù)比特流中眾多的0和1轉(zhuǎn)換來重建接收時鐘,這樣就避免了在發(fā)送和接收端之間傳輸高達(dá)GHz的高頻時鐘[4-5]。
PCIe接收模塊CDR電路恢復(fù)時鐘及其本地時鐘并不是同源時鐘,雖然兩者的時鐘頻率在標(biāo)稱上是一致的,但是也必然存在頻率的輕微不一致。所以,為了保證可靠地將CDR恢復(fù)時鐘域的數(shù)據(jù)同步到本地時鐘域,必須要考慮時鐘頻率偏差的影響,而彈性緩沖區(qū)可以很好地達(dá)到這個目的[6]。
根據(jù)協(xié)議要求,PCIe總線在2.5 Gbps的速率下通信,允許有300ppm的誤差,所以總線頻率在2.499 25~2.500 75 GHz范圍內(nèi)都是允許的。由于這個允許的總線偏差,兩個互相通信的PCIe總線設(shè)備,其工作頻率會有輕微的不一致。因此,在同一個設(shè)備中數(shù)據(jù)的發(fā)送和接收將處于兩個不同的時鐘域。彈性緩沖將在兩個時鐘域的數(shù)據(jù)同步中起到頻率補償?shù)淖饔?,使通過彈性緩沖向上提交的數(shù)據(jù)保持完整。
彈性緩沖擁有兩個時鐘,一個來自于CDR電路,用于接收數(shù)據(jù)寫入彈性緩沖;另一個用于從彈性緩沖中讀出數(shù)據(jù)。兩個時鐘可以是異步時鐘,并且時鐘頻率也可以不一樣。彈性緩沖具有上溢或者下溢的保護(hù)機制,用來監(jiān)控彈性緩沖中數(shù)據(jù)的填充狀態(tài),并自動填充或者刪除特定的字符數(shù)據(jù)。在PCIe總線中這個特定字符為SKP有序集中的SKP(K28.1)字符。每個SKP有序集由一個COM字符(K28.5)和3個SKP字符組成。為了保證彈性緩沖不上溢也不下溢,要求發(fā)送端周期性地發(fā)出SKP有序集。
SKP有序集的周期必須要考慮最壞情況,PCIe總線速率與標(biāo)準(zhǔn)速率最大可允許300ppm,那么總線上通信的兩個PCIe設(shè)備時鐘最大可以有600ppm。這意味著1 666個時鐘周期就可能有一個2.5 GHz時鐘周期的時鐘偏差。這要求發(fā)送端發(fā)送SKY有序集的周期必須小于1 666個周期。根據(jù)協(xié)議定義要求,發(fā)送端在1 180~1 538個SKP有序集傳輸時間內(nèi),必須發(fā)出一個SKP有序集出來。接收端彈性緩沖接收到這個有序集后,根據(jù)恢復(fù)時鐘和本地時鐘的狀態(tài),可以決定在這個有序集中增加或者刪除2個COM字符,從而達(dá)到消除發(fā)送端和接收端時鐘偏差的目的。
在發(fā)送端正在發(fā)送大數(shù)據(jù)包的TLP(傳輸層包)而導(dǎo)致SKP有序集不能及時發(fā)送的情況下,為保證擁有足夠的SKP有序集來保證彈性緩沖正常工作,這些不能按時發(fā)出的SKP有序集應(yīng)該在發(fā)送端緩存起來,并等待TLP發(fā)送結(jié)束,然后立刻將緩沖的SKP有序集發(fā)送出去[7-9]。
彈性緩沖的緩沖容量由3個因素決定:SKP有序集的發(fā)送周期、器件支持的最大數(shù)據(jù)包的大小及總線的鏈路寬度。這3個要素共同決定了到達(dá)接收端的SKP有序集的最大時間間隔。這個最大間隔時間是由可能大于協(xié)議要求的1 180~1 538個有序集產(chǎn)生的。比如,當(dāng)需要發(fā)送一個SKP有序集時,發(fā)送端正在發(fā)送一個TLP包,那么SKP有序集必須在當(dāng)前TLP包發(fā)送完成后才可以進(jìn)行發(fā)送。最壞的情況是,PCIe總線處于X1狀態(tài),而且在需要發(fā)送SKP有序集的時候,發(fā)送端剛好已經(jīng)開始發(fā)送總線所支持最大TLP包數(shù)據(jù)。
規(guī)劃彈性緩沖的容量大小,必須基于最壞的情況來考慮,其最大可能偏差的計算公式如下:
Max_symbols_shifted=1 666-1((Max_Payload_Size+TLP_Overhead)Link_With-1+1 538)
(1)
式中,Max_symbols_shifted為緩沖最大可能偏差;Max_Payload_Size為器件支持的最大TLP包的數(shù)據(jù)負(fù)載長度;TLP_Overhead固定為28個字符時間,包含包起始字符、結(jié)束字符、幀頭及CRC字段等;Link_With為總線通信通道數(shù)目,這個值通常取1。
彈性緩沖主要包含了一個FIFO,在正常模式下,這個FIFO應(yīng)該是半滿的。如果彈性緩沖的寫入時鐘與讀出時鐘頻率嚴(yán)格相等,那么FIFO將總是處于半滿狀態(tài)。如果彈性緩沖的寫入時鐘與讀出時鐘頻率存在頻率偏差,那么彈性緩沖將緩存在彈性緩沖中的SKP有序集中的SKP字符刪除或者插入,保持FIFO是半滿的狀態(tài)。根據(jù)式(1),在最壞情況下依然能保持FIFO半滿狀態(tài),那么彈性緩沖中FIFO的深度必須大于Max_symbols_shifted的2倍。
在PCIe總線接收端,根據(jù)總線恢復(fù)時鐘及本地時鐘的快慢情況,彈性緩沖區(qū)可以分為以下幾種情況進(jìn)行處理:
(1)總線恢復(fù)時鐘快于本地時鐘。
當(dāng)總線恢復(fù)時鐘快于本地時鐘的時候,寫入彈性緩沖區(qū)的數(shù)據(jù)將會比讀出數(shù)據(jù)多,本地時鐘域在獲得SKP有序集的COM字符時,彈性緩沖中FIFO數(shù)據(jù)將會超過半滿狀態(tài),如圖1所示。
如果本地時鐘在彈性緩沖區(qū)獲得SKP有序集的時候,彈性緩沖FIFO的數(shù)據(jù)超過半滿狀態(tài)大于2個字符,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候加3;彈性緩沖FIFO的數(shù)據(jù)超過半滿狀態(tài)1個字符,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候加2;彈性緩沖FIFO的數(shù)據(jù)剛好半滿狀態(tài),那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候加1。
(2)總線恢復(fù)時鐘慢于本地時鐘。
當(dāng)總線恢復(fù)時鐘慢于本地時鐘的時候,寫入彈性緩沖區(qū)的數(shù)據(jù)將會比讀出數(shù)據(jù)少,本地時鐘域在獲得SKP有序集的COM字符時,彈性緩沖中FIFO數(shù)據(jù)將會少于半滿狀態(tài),如圖2所示。
圖1 恢復(fù)時鐘快于本地時鐘
圖2 恢復(fù)時鐘慢于本地時鐘
如果本地時鐘在彈性緩沖區(qū)獲得SKP有序集的時候,彈性緩沖FIFO的數(shù)據(jù)少于半滿狀態(tài)達(dá)2個字符,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候停頓2個本地時鐘周期;彈性緩沖FIFO的數(shù)據(jù)少于半滿狀態(tài)1個字符,那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候停頓1個本地時鐘周期;彈性緩沖FIFO的數(shù)據(jù)剛好半滿狀態(tài),那么彈性緩沖控制彈性緩沖FIFO的讀指針在讀SKP有序集的時候加1[10-11]。
文中所描述的彈性緩沖采用Verilog HDL語言設(shè)計,保證邏輯設(shè)計與工藝無關(guān),可方便應(yīng)用于FPGA設(shè)計或者ASIC芯片設(shè)計中。對設(shè)計代碼采用SPYGLASS工具進(jìn)行代碼風(fēng)格檢查及CDC(時鐘域檢查),保證代碼的可靠性。同時構(gòu)建仿真平臺,模擬恢復(fù)時鐘及本地時鐘的頻率差異的多種情況,保證彈性緩沖區(qū)正常工作[12-13]。
文中分析了高速串行總線PCIe數(shù)據(jù)通訊的同步問題,研究了彈性緩沖進(jìn)行高速串行總線數(shù)據(jù)同步的基本原理,根據(jù)PCIe總線協(xié)議提出了一種適用于PCIe總線的彈性緩沖設(shè)計方法,并驗證了其可行性。同時,該彈性緩沖設(shè)計方法的提出對其他高速串行通信的通信緩沖設(shè)計也有一定的參考意義。
[1] 馬 萍,唐衛(wèi)華,李緒志.基于PCI Express總線高速數(shù)采卡的設(shè)計與實現(xiàn)[J].微計算機信息,2008,24(25):116-118.
[2] 徐君明,裴先登,王海衛(wèi),等.高性能計算機I/O技術(shù)PCI Express分析[J].計算機工程,2004,30(12):6-7.
[3] 王 齊.PCI Express體系結(jié)構(gòu)導(dǎo)讀[M].北京:機械工業(yè)出版社,2010:350-362.
[4] 馬鳴錦.PCI、PCI-X和PCI Express的原理及體系結(jié)構(gòu)[M].北京:清華大學(xué)出版社,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狀態(tài)判斷的研究與設(shè)計[J].微電子學(xué)與計算機,2007,24(3):81-84.
[11] 張維旭,賀占莊.基于FPGA的異步FIFO設(shè)計[J].計算機技術(shù)與發(fā)展,2006,16(7):168-170.
[12] 郭 蒙,田 澤,蔡葉芳,等.1553B總線接口SoC驗證平臺的實現(xiàn)[J].航空計算技術(shù),2008,38(6):99-101.
[13] 韓 霞,楊洪斌,吳 悅.面向SoC的事務(wù)級驗證研究[J].計算機技術(shù)與發(fā)展,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
中國航空工業(yè)集團(tuán)公司創(chuàng)新基金(2010BD63111)
廖寅龍(1982-),男,工程師,研究方向為SoC設(shè)計與驗證;田 澤,博士,研究員,中國航空工業(yè)集團(tuán)首席技術(shù)專家,研究方向為SoC設(shè)計、嵌入式系統(tǒng)設(shè)計、VLSI設(shè)計等。
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