樊仕超,賈一平,舒 毅,楊海鋼
(1.中國科學院空天信息創新研究院,北京 100190;2.中國科學院大學電子電氣與通信工程學院,北京 100049;3.山東產業技術研究院山東產研集成電路產業研究院,山東濟南 250001)
隨著高速串行接口的不斷發展,彈性緩沖器逐漸出現在許多接口技術應用中,例如以太網[1-3]、USB[4-7]、PCI-Express[8-9]、SATA[10]、光纖通信(Fiber Communications,FC)[11]、InfiniBand 等接口協議。由于接口協議中的收發兩端支持獨立參考時鐘源,所以其恢復時鐘頻率與本地時鐘頻率存在差別[12]。為了保證數據可靠地從一個時鐘域傳送到另一個時鐘域,部分接口協議采用了彈性緩沖器來解決時鐘相位同步和頻率補償的問題[13]。
目前對于彈性緩沖器的設計,絕大多數是基于特定協議,采用新型設計方法來實現控制字符集的添加與刪減。例如,文獻[4]基于USB3.0 協議,采用具有寫指針屏蔽與跳躍、斷點保存等功能的異步FIFO 來實現彈性緩沖器。文獻[5-6]則在文獻[4]的基礎上,設計出通過讀指針暫停實現控制字符集增添和寫指針暫停實現控制字符集刪減的結構。文獻[1-2]基于10Gbase-KR/10Gbase-R 協議,通過控制寫指針插入和暫停實現字符集的增刪操作。基于PCIE2.0 協議,文獻[9]采用半滿檢查方式和半滿同步方法,簡化了邏輯結構,相比于其他文獻所設計的彈性緩沖器,省去了格雷碼轉換這一步驟。
文獻[4]所設計的彈性緩沖器在添加SKP 字符時,需要讀寫指針在不同的時鐘域進行讀寫操作,會帶來復雜的異步控制電路,可能產生亞穩態、采樣丟失等時序錯誤。為了解決這一問題,文獻[1]和文獻[9]采用單獨控制寫指針或讀指針的方式來實現緩沖操作。
各個協議對彈性緩沖需求的主要差異在于控制字符集、緩沖深度以及數據位寬。為了提高設計的復用性,文中設置了多組控制字符集檢測邏輯,并通過更改參數來實現多種數據位寬和緩沖深度,從而滿足多種協議的要求。文中在文獻[9]和文獻[12]設計方法的基礎上,結合可變多路指針以及半滿檢查的方式,通過控制讀指針暫停和跳躍實現緩沖控制,設計了一種能夠兼容1000Base-X 千兆以太網、USB3.0 以及PCI-Express2.0 3 種協議的可重復配置彈性緩沖器。經過仿真驗證,在對應的協議要求下,多指針彈性緩沖器能夠在適當的頻率下正確地實現SKP 或IDLE 字符的增添和刪減功能。
彈性緩沖器本質上是一個異步FIFO 器件,常見的實現彈性緩沖器的方式有兩種:流程控制方式和常半滿方式[1-2]。多數彈性緩沖器采用常半滿方式實現。常半滿方式通過計算讀寫地址差值,根據結果判斷是否增減SKP 或IDLE 字符,調節彈性緩沖器兩邊有效讀寫速率,使彈性緩沖器恒在半滿狀態。流程控制方式則是當寫入數據速率小于讀出數據速率時,產生使能信號使讀指針停滯,將彈性緩沖器維持在一個底端進入點的狀態[1-2]。在常半滿實現方式下,讀時鐘一直處于活躍狀態,輸出端口持續有信號輸出。流程控制則通過門控時鐘暫停讀指針跳轉以及控制讀時鐘使能并降低功耗,但門控時鐘方式將更改后續電路工作模式,不利于DFT 的實現,同時會造成額外的面積消耗。綜上,文中采用常半滿方式實現彈性緩沖器。
彈性緩沖器通常位于高速接口接收通路中,位于串并轉換和物理層編解碼器之間,以調整恢復時鐘域和本地時鐘域之間的微小偏差。彈性緩沖器所在位置如圖1 所示。

圖1 彈性緩沖器位置圖
控制字符集是為了實現時鐘頻率補償而規范的一組特殊有序集,每種協議對控制字符集的定義也各有不同。以PCIE2.0 協議為例,協議規定用于調整時鐘相位的特定字符為SKP字符(K28.0),控制字符集由一個COM 字符(K28.5)和3 個SKP 字符組成[14-17]。其他協議的控制字符集信息如表1 所示。

表1 部分協議控制字符集
彈性緩沖器的深度取決于數據的最大位移量,而最大位移量受器件支持的最大數據包大小、字符集發送周期以及總線鏈路寬度等因素影響[18]。由于各個協議對上述因素以及對時鐘允許誤差范圍的要求千差萬別,因此需要對每種協議單獨計算數據最大位移量,才能找到適合各個協議的最低緩沖深度。
1)PCIE2.0 協議
PCIE2.0 協議規定總線時鐘速率與標準速率最大可以允許300 ppm 的誤差范圍,兩個設備之間最大可以有600 ppm的時鐘誤差[14-17]。即在大約1 666個時鐘周期內就可能會有一個周期的偏差,至少需要在1 666 個周期內發送一個字符集。根據協議要求,SKP 字符集間隔為1 180~1 538 個字符,最大數據包是4 096 個字符,TLP 基本數據量固定為28 個字符。在最差的情況下,即當鏈路寬度為1 時,根據如下公式:

計算可得數據最大位移量為3.4 個,采用常半滿方式實現彈性緩沖時,理論上最小深度為8。在實際應用中,為了避免出現上溢或下溢,彈性緩沖器的深度會被適當加大。在該設計中,只有在數據位寬為10 bit時,深度可以設置為8。
2)USB3.0 協議
USB3.0 協議對時鐘管理電路采取擴頻技術,擴頻后的時間精度為-5 000~0 ppm,同時USB3.0 規范要求的時間精度為+/-300 ppm[19-20]。由上述兩點可知,時鐘的疊加精度為-5 300~+300 ppm,最大時鐘偏差為5 600 ppm,即發送端最多每隔約177 個字符便插入一個SKP 字符,每次間隔354 個時鐘周期發送一次字符集。此外,USB3.0 協議規定最長的數據包為1 056 個字符,在最差的情況下,發送一個最長的數據包后需要發送6 個SKP 字符(3 個字符集)。理論上最小深度為12,為了便于彈性緩沖器的實現,設置最小深度為16。
3)1000Base-X 協議
1000Base-X 協議規定時鐘允許的誤差范圍為+/-100 ppm,即最少隔5 000 個周期就會產生一個周期的移位。另外,在長連續隨機測試模式中的每個數據包均包含1 536 個字符,由此可以估算出,在該協議下的數據最大位移量小于1,對彈性緩沖深度的需求最低。
為滿足不同協議下的最大位移量需求,并評估設計復雜度,文中選擇在PCIE2.0 和1000Base-X 協議下,彈性緩沖最小深度為8;在USB3.0 協議下,彈性緩沖最小深度為16。
為了滿足PCIE2.0、USB3.0、1000Base-X 3 種協議對彈性緩沖器容量的需求,提出了可變參數的方法來實現數據位寬以及緩沖深度的可配置性。目前支持時鐘頻率在500 MHz 以內,數據位寬為40 bit 以下的各種模式,其配置信息如表2 所示。此外還可以通過參數選擇時鐘頻率,實現同步配置。

表2 3種協議可選配置信息
多指針彈性緩沖器由多個讀寫指針尋址,指針數與當前數據位寬有關。例如,彈性緩沖器深度為16,寬度為11(最高位為數據有效位,低10 位用于存儲數據),當前數據位寬為20 bit,寫指針個數為2,讀指針個數是寫指針的兩倍。其原理結構如圖2 所示。在PCIE2.0 協議中規定,字符集為一個COM 字符,后面跟隨3 個連續的SKP 字符。由于需要在檢測到COM 字符之后才能進行SKP 字符的增刪,所以在檢測到COM 字符的下一個周期,才能進行讀指針的暫停或跳躍。

圖2 多指針彈性緩沖器原理結構圖
設計的基于常半滿方式下多指針彈性緩沖器結構如圖3 所示,該緩沖器包含輸入輸出控制模塊、寫指針操作模塊、讀指針操作模塊、字符集檢測模塊、緩沖閾值測量模塊、同步模塊和雙端口存儲器RAM模塊。

圖3 彈性緩沖器結構圖
輸入輸出控制模塊是與外部進行信息交互的連接模塊。輸入模塊的主要功能是控制讀寫時鐘域下的復位操作。在寫數據有效和全局復位信號共同作用下,產生讀寫指針復位信號。輸出模塊則由讀使能信號控制著信號的輸出。只有當讀使能有效時,才能從存儲器中讀出數據并發送給其他模塊。此外,輸出模塊需要輸出彈性緩沖器當前狀態信號,字符集檢測結果也會由該模塊傳遞。寫數據有效信號作為輸入信號,表示當前數據的有效狀態,其中數據為數據字符或控制字符均為有效。當上層指示數據無效時,觸發復位邏輯,復位整個彈性緩沖器。
在正常模式下,讀寫指針遞增,由于讀寫時鐘異步,需要將寫指針經過同步后再進行差值計算。同時為了避免毛刺的生成,采用格雷碼轉換器,這會占用較多資源,邏輯結構也較為復雜。為了解決這一問題,文中采用半滿狀態檢查的方式,在觸發讀指針的檢查操作時寫指針處在半滿位置,即寫指針即將到達半滿位置時,觸發檢查脈沖,將此脈沖信號經過同步模塊傳遞到讀時鐘域下,隨后讀指針地址信息被送到緩沖閾值測量模塊,由該模塊判斷當前彈性緩沖器的狀態,并進行后續操作。相對于直接跨時鐘域同步多位指針的實現方法來說,既減少了同步的位數,也簡化了邏輯結構。
存儲器的容量由參數控制,最小深度為8,寬度固定為11 bit。存儲器寬度設置成固定有利于讀指針操作,擴展數據位寬可以通過增加讀寫指針實現。
由于各個協議定義的字符集各不相同,因此設計了3 組字符集檢測邏輯,通過模式選擇信號(也可由參數控制,通過定義參數來選擇不同模式)確定當前適用的協議,并將字符集檢測結果送到緩沖閾值測量模塊和輸出控制模塊。
緩沖閾值測量模塊的工作流程是,寫指針位于半滿位置觸發檢查脈沖,檢查脈沖經過同步模塊到達讀時鐘域,讀取讀指針地址,根據閾值劃分判斷此時存儲器狀態。彈性緩沖器深度為16 時,其閾值劃分示意圖如圖4 所示。讀指針位于高緩沖區,表示存儲器中的有效數據較少,一旦檢測到字符集,則增加讀指針遞增值,實現刪除SKP/ IDLE 字符操作,提高有效數據的讀出速率,反之亦然。如果讀指針處于上溢或下溢區間,則彈性緩沖器過滿或過空,為了避免指針躍遷,讀指針會直接跳過數據或立即暫停,并向外部輸出上溢或下溢信號。為了滿足其他協議的要求,彈性緩沖器深度隨參數設置而變化,緩沖區間隨深度成比例變化。

圖4 彈性緩沖器閾值劃分示意圖
讀指針主要用于選定要讀出的存儲單元,以及通過暫停和跳轉的方式來實現字符集的增添與刪減。由于讀指針個數大于讀指針遞增數,因此能夠預先檢測到字符集,在下個時鐘周期進行讀指針的暫停或跳躍。若數據寬度為20 bit,在一般模式下,讀指針依次遞增數為2。當讀指針的最低位處于高緩沖區,并且收到字符檢測信號時,讀指針多跳過一個字符,從而實現刪減字符功能,反之,讀指針位于低緩沖區,讀指針不再遞增,此時重復讀取當前字符,完成增添字符操作。
文中采用Verilog HDL 硬件描述語言設計多指針彈性緩沖器,用VCS 仿真工具進行功能仿真驗證。同時在臺積電55 nm 工藝條件下,通過EDA 工具DC(Design Compiler)進行綜合,并且采用相對保守的時序約束。綜合報告結果如圖5 所示。從綜合結果可以看出,該設計能夠滿足時鐘頻率為500 MHz的時序要求。

圖5 綜合報告結果
表3 展示了在相同參數及綜合約束條件情況下,支持不同模式所需要的面積、功耗的比較。其中,僅支持PCIE2.0 的模式是從支持多協議模式中分離出來的模式,從表中可以看出,支持多協議的彈性緩沖器在面積和功耗上有一定的增加,面積增加4.4%,功耗增加1.0%。

表3 不同模式下面積功耗對比
仿真結果如圖6~圖11 所示。圖6、圖7 表示在PCIE2.0 協議下,彈性緩沖器配置為數據位寬40 bit,深度設置為32。從圖6 中rd_data=40’b3e_8f4c_2c00 可以發現,讀出數據刪除了控制字符集中第一個SKP 字符,圖7 讀出數據在COM 字符后增添了SKP 字符;圖8、圖9 表示在USB3.0 協議下,將數據位寬配置成20 bit,深度配置為16,讀指針處于高緩沖區或低緩沖區時,寫入數據wr_data=20’b3_e706 被刪除或重復加入;圖10、圖11 表示在1000Base-X 協議下,設置數據位寬為10 bit,彈性緩沖深度為最小值8,在控制字符刪減/增添信號有效時完成刪減/增添操作,維持了彈性緩沖器的常半滿狀態。

圖6 PCIE2.0協議下SKP字符的刪減操作

圖7 PCIE2.0協議下SKP字符的增添操作

圖8 USB3.0協議下SKP字符的刪減操作

圖9 USB3.0協議下SKP字符的增添操作

圖10 1000Base-X協議下IDLE字符的刪減操作

圖11 1000Base-X協議下IDLE字符的增添操作
文中討論了基于常半滿方式的多指針彈性緩沖器原理與設計。該設計采用半滿檢查和多路指針的方法,實現了緩沖測量以及字符增刪操作,同時引入可配置參數,使得該彈性緩沖器能夠適配不同協議的數據位寬和深度需求。經過仿真綜合驗證,該設計能夠同時滿足1000Base-X 千兆以太網、USB3.0 以及PCI-Express2.0 的協議要求,正確完成動態增添或刪除字符,實現傳輸速率補償。