樊仕超,賈一平,舒 毅,楊海鋼
(1.中國科學(xué)院空天信息創(chuàng)新研究院,北京 100190;2.中國科學(xué)院大學(xué)電子電氣與通信工程學(xué)院,北京 100049;3.山東產(chǎn)業(yè)技術(shù)研究院山東產(chǎn)研集成電路產(chǎn)業(yè)研究院,山東濟(jì)南 250001)
隨著高速串行接口的不斷發(fā)展,彈性緩沖器逐漸出現(xiàn)在許多接口技術(shù)應(yīng)用中,例如以太網(wǎng)[1-3]、USB[4-7]、PCI-Express[8-9]、SATA[10]、光纖通信(Fiber Communications,F(xiàn)C)[11]、InfiniBand 等接口協(xié)議。由于接口協(xié)議中的收發(fā)兩端支持獨(dú)立參考時(shí)鐘源,所以其恢復(fù)時(shí)鐘頻率與本地時(shí)鐘頻率存在差別[12]。為了保證數(shù)據(jù)可靠地從一個(gè)時(shí)鐘域傳送到另一個(gè)時(shí)鐘域,部分接口協(xié)議采用了彈性緩沖器來解決時(shí)鐘相位同步和頻率補(bǔ)償?shù)膯栴}[13]。
目前對于彈性緩沖器的設(shè)計(jì),絕大多數(shù)是基于特定協(xié)議,采用新型設(shè)計(jì)方法來實(shí)現(xiàn)控制字符集的添加與刪減。例如,文獻(xiàn)[4]基于USB3.0 協(xié)議,采用具有寫指針屏蔽與跳躍、斷點(diǎn)保存等功能的異步FIFO 來實(shí)現(xiàn)彈性緩沖器。文獻(xiàn)[5-6]則在文獻(xiàn)[4]的基礎(chǔ)上,設(shè)計(jì)出通過讀指針暫停實(shí)現(xiàn)控制字符集增添和寫指針暫停實(shí)現(xiàn)控制字符集刪減的結(jié)構(gòu)。文獻(xiàn)[1-2]基于10Gbase-KR/10Gbase-R 協(xié)議,通過控制寫指針插入和暫停實(shí)現(xiàn)字符集的增刪操作。基于PCIE2.0 協(xié)議,文獻(xiàn)[9]采用半滿檢查方式和半滿同步方法,簡化了邏輯結(jié)構(gòu),相比于其他文獻(xiàn)所設(shè)計(jì)的彈性緩沖器,省去了格雷碼轉(zhuǎn)換這一步驟。
文獻(xiàn)[4]所設(shè)計(jì)的彈性緩沖器在添加SKP 字符時(shí),需要讀寫指針在不同的時(shí)鐘域進(jìn)行讀寫操作,會帶來復(fù)雜的異步控制電路,可能產(chǎn)生亞穩(wěn)態(tài)、采樣丟失等時(shí)序錯(cuò)誤。為了解決這一問題,文獻(xiàn)[1]和文獻(xiàn)[9]采用單獨(dú)控制寫指針或讀指針的方式來實(shí)現(xiàn)緩沖操作。
各個(gè)協(xié)議對彈性緩沖需求的主要差異在于控制字符集、緩沖深度以及數(shù)據(jù)位寬。為了提高設(shè)計(jì)的復(fù)用性,文中設(shè)置了多組控制字符集檢測邏輯,并通過更改參數(shù)來實(shí)現(xiàn)多種數(shù)據(jù)位寬和緩沖深度,從而滿足多種協(xié)議的要求。文中在文獻(xiàn)[9]和文獻(xiàn)[12]設(shè)計(jì)方法的基礎(chǔ)上,結(jié)合可變多路指針以及半滿檢查的方式,通過控制讀指針暫停和跳躍實(shí)現(xiàn)緩沖控制,設(shè)計(jì)了一種能夠兼容1000Base-X 千兆以太網(wǎng)、USB3.0 以及PCI-Express2.0 3 種協(xié)議的可重復(fù)配置彈性緩沖器。經(jīng)過仿真驗(yàn)證,在對應(yīng)的協(xié)議要求下,多指針彈性緩沖器能夠在適當(dāng)?shù)念l率下正確地實(shí)現(xiàn)SKP 或IDLE 字符的增添和刪減功能。
彈性緩沖器本質(zhì)上是一個(gè)異步FIFO 器件,常見的實(shí)現(xiàn)彈性緩沖器的方式有兩種:流程控制方式和常半滿方式[1-2]。多數(shù)彈性緩沖器采用常半滿方式實(shí)現(xiàn)。常半滿方式通過計(jì)算讀寫地址差值,根據(jù)結(jié)果判斷是否增減SKP 或IDLE 字符,調(diào)節(jié)彈性緩沖器兩邊有效讀寫速率,使彈性緩沖器恒在半滿狀態(tài)。流程控制方式則是當(dāng)寫入數(shù)據(jù)速率小于讀出數(shù)據(jù)速率時(shí),產(chǎn)生使能信號使讀指針停滯,將彈性緩沖器維持在一個(gè)底端進(jìn)入點(diǎn)的狀態(tài)[1-2]。在常半滿實(shí)現(xiàn)方式下,讀時(shí)鐘一直處于活躍狀態(tài),輸出端口持續(xù)有信號輸出。流程控制則通過門控時(shí)鐘暫停讀指針跳轉(zhuǎn)以及控制讀時(shí)鐘使能并降低功耗,但門控時(shí)鐘方式將更改后續(xù)電路工作模式,不利于DFT 的實(shí)現(xiàn),同時(shí)會造成額外的面積消耗。綜上,文中采用常半滿方式實(shí)現(xiàn)彈性緩沖器。
彈性緩沖器通常位于高速接口接收通路中,位于串并轉(zhuǎn)換和物理層編解碼器之間,以調(diào)整恢復(fù)時(shí)鐘域和本地時(shí)鐘域之間的微小偏差。彈性緩沖器所在位置如圖1 所示。
圖1 彈性緩沖器位置圖
控制字符集是為了實(shí)現(xiàn)時(shí)鐘頻率補(bǔ)償而規(guī)范的一組特殊有序集,每種協(xié)議對控制字符集的定義也各有不同。以PCIE2.0 協(xié)議為例,協(xié)議規(guī)定用于調(diào)整時(shí)鐘相位的特定字符為SKP字符(K28.0),控制字符集由一個(gè)COM 字符(K28.5)和3 個(gè)SKP 字符組成[14-17]。其他協(xié)議的控制字符集信息如表1 所示。
表1 部分協(xié)議控制字符集
彈性緩沖器的深度取決于數(shù)據(jù)的最大位移量,而最大位移量受器件支持的最大數(shù)據(jù)包大小、字符集發(fā)送周期以及總線鏈路寬度等因素影響[18]。由于各個(gè)協(xié)議對上述因素以及對時(shí)鐘允許誤差范圍的要求千差萬別,因此需要對每種協(xié)議單獨(dú)計(jì)算數(shù)據(jù)最大位移量,才能找到適合各個(gè)協(xié)議的最低緩沖深度。
1)PCIE2.0 協(xié)議
PCIE2.0 協(xié)議規(guī)定總線時(shí)鐘速率與標(biāo)準(zhǔn)速率最大可以允許300 ppm 的誤差范圍,兩個(gè)設(shè)備之間最大可以有600 ppm的時(shí)鐘誤差[14-17]。即在大約1 666個(gè)時(shí)鐘周期內(nèi)就可能會有一個(gè)周期的偏差,至少需要在1 666 個(gè)周期內(nèi)發(fā)送一個(gè)字符集。根據(jù)協(xié)議要求,SKP 字符集間隔為1 180~1 538 個(gè)字符,最大數(shù)據(jù)包是4 096 個(gè)字符,TLP 基本數(shù)據(jù)量固定為28 個(gè)字符。在最差的情況下,即當(dāng)鏈路寬度為1 時(shí),根據(jù)如下公式:
計(jì)算可得數(shù)據(jù)最大位移量為3.4 個(gè),采用常半滿方式實(shí)現(xiàn)彈性緩沖時(shí),理論上最小深度為8。在實(shí)際應(yīng)用中,為了避免出現(xiàn)上溢或下溢,彈性緩沖器的深度會被適當(dāng)加大。在該設(shè)計(jì)中,只有在數(shù)據(jù)位寬為10 bit時(shí),深度可以設(shè)置為8。
2)USB3.0 協(xié)議
USB3.0 協(xié)議對時(shí)鐘管理電路采取擴(kuò)頻技術(shù),擴(kuò)頻后的時(shí)間精度為-5 000~0 ppm,同時(shí)USB3.0 規(guī)范要求的時(shí)間精度為+/-300 ppm[19-20]。由上述兩點(diǎn)可知,時(shí)鐘的疊加精度為-5 300~+300 ppm,最大時(shí)鐘偏差為5 600 ppm,即發(fā)送端最多每隔約177 個(gè)字符便插入一個(gè)SKP 字符,每次間隔354 個(gè)時(shí)鐘周期發(fā)送一次字符集。此外,USB3.0 協(xié)議規(guī)定最長的數(shù)據(jù)包為1 056 個(gè)字符,在最差的情況下,發(fā)送一個(gè)最長的數(shù)據(jù)包后需要發(fā)送6 個(gè)SKP 字符(3 個(gè)字符集)。理論上最小深度為12,為了便于彈性緩沖器的實(shí)現(xiàn),設(shè)置最小深度為16。
3)1000Base-X 協(xié)議
1000Base-X 協(xié)議規(guī)定時(shí)鐘允許的誤差范圍為+/-100 ppm,即最少隔5 000 個(gè)周期就會產(chǎn)生一個(gè)周期的移位。另外,在長連續(xù)隨機(jī)測試模式中的每個(gè)數(shù)據(jù)包均包含1 536 個(gè)字符,由此可以估算出,在該協(xié)議下的數(shù)據(jù)最大位移量小于1,對彈性緩沖深度的需求最低。
為滿足不同協(xié)議下的最大位移量需求,并評估設(shè)計(jì)復(fù)雜度,文中選擇在PCIE2.0 和1000Base-X 協(xié)議下,彈性緩沖最小深度為8;在USB3.0 協(xié)議下,彈性緩沖最小深度為16。
為了滿足PCIE2.0、USB3.0、1000Base-X 3 種協(xié)議對彈性緩沖器容量的需求,提出了可變參數(shù)的方法來實(shí)現(xiàn)數(shù)據(jù)位寬以及緩沖深度的可配置性。目前支持時(shí)鐘頻率在500 MHz 以內(nèi),數(shù)據(jù)位寬為40 bit 以下的各種模式,其配置信息如表2 所示。此外還可以通過參數(shù)選擇時(shí)鐘頻率,實(shí)現(xiàn)同步配置。
表2 3種協(xié)議可選配置信息
多指針彈性緩沖器由多個(gè)讀寫指針尋址,指針數(shù)與當(dāng)前數(shù)據(jù)位寬有關(guān)。例如,彈性緩沖器深度為16,寬度為11(最高位為數(shù)據(jù)有效位,低10 位用于存儲數(shù)據(jù)),當(dāng)前數(shù)據(jù)位寬為20 bit,寫指針個(gè)數(shù)為2,讀指針個(gè)數(shù)是寫指針的兩倍。其原理結(jié)構(gòu)如圖2 所示。在PCIE2.0 協(xié)議中規(guī)定,字符集為一個(gè)COM 字符,后面跟隨3 個(gè)連續(xù)的SKP 字符。由于需要在檢測到COM 字符之后才能進(jìn)行SKP 字符的增刪,所以在檢測到COM 字符的下一個(gè)周期,才能進(jìn)行讀指針的暫?;蛱S。
圖2 多指針彈性緩沖器原理結(jié)構(gòu)圖
設(shè)計(jì)的基于常半滿方式下多指針彈性緩沖器結(jié)構(gòu)如圖3 所示,該緩沖器包含輸入輸出控制模塊、寫指針操作模塊、讀指針操作模塊、字符集檢測模塊、緩沖閾值測量模塊、同步模塊和雙端口存儲器RAM模塊。
圖3 彈性緩沖器結(jié)構(gòu)圖
輸入輸出控制模塊是與外部進(jìn)行信息交互的連接模塊。輸入模塊的主要功能是控制讀寫時(shí)鐘域下的復(fù)位操作。在寫數(shù)據(jù)有效和全局復(fù)位信號共同作用下,產(chǎn)生讀寫指針復(fù)位信號。輸出模塊則由讀使能信號控制著信號的輸出。只有當(dāng)讀使能有效時(shí),才能從存儲器中讀出數(shù)據(jù)并發(fā)送給其他模塊。此外,輸出模塊需要輸出彈性緩沖器當(dāng)前狀態(tài)信號,字符集檢測結(jié)果也會由該模塊傳遞。寫數(shù)據(jù)有效信號作為輸入信號,表示當(dāng)前數(shù)據(jù)的有效狀態(tài),其中數(shù)據(jù)為數(shù)據(jù)字符或控制字符均為有效。當(dāng)上層指示數(shù)據(jù)無效時(shí),觸發(fā)復(fù)位邏輯,復(fù)位整個(gè)彈性緩沖器。
在正常模式下,讀寫指針遞增,由于讀寫時(shí)鐘異步,需要將寫指針經(jīng)過同步后再進(jìn)行差值計(jì)算。同時(shí)為了避免毛刺的生成,采用格雷碼轉(zhuǎn)換器,這會占用較多資源,邏輯結(jié)構(gòu)也較為復(fù)雜。為了解決這一問題,文中采用半滿狀態(tài)檢查的方式,在觸發(fā)讀指針的檢查操作時(shí)寫指針處在半滿位置,即寫指針即將到達(dá)半滿位置時(shí),觸發(fā)檢查脈沖,將此脈沖信號經(jīng)過同步模塊傳遞到讀時(shí)鐘域下,隨后讀指針地址信息被送到緩沖閾值測量模塊,由該模塊判斷當(dāng)前彈性緩沖器的狀態(tài),并進(jìn)行后續(xù)操作。相對于直接跨時(shí)鐘域同步多位指針的實(shí)現(xiàn)方法來說,既減少了同步的位數(shù),也簡化了邏輯結(jié)構(gòu)。
存儲器的容量由參數(shù)控制,最小深度為8,寬度固定為11 bit。存儲器寬度設(shè)置成固定有利于讀指針操作,擴(kuò)展數(shù)據(jù)位寬可以通過增加讀寫指針實(shí)現(xiàn)。
由于各個(gè)協(xié)議定義的字符集各不相同,因此設(shè)計(jì)了3 組字符集檢測邏輯,通過模式選擇信號(也可由參數(shù)控制,通過定義參數(shù)來選擇不同模式)確定當(dāng)前適用的協(xié)議,并將字符集檢測結(jié)果送到緩沖閾值測量模塊和輸出控制模塊。
緩沖閾值測量模塊的工作流程是,寫指針位于半滿位置觸發(fā)檢查脈沖,檢查脈沖經(jīng)過同步模塊到達(dá)讀時(shí)鐘域,讀取讀指針地址,根據(jù)閾值劃分判斷此時(shí)存儲器狀態(tài)。彈性緩沖器深度為16 時(shí),其閾值劃分示意圖如圖4 所示。讀指針位于高緩沖區(qū),表示存儲器中的有效數(shù)據(jù)較少,一旦檢測到字符集,則增加讀指針遞增值,實(shí)現(xiàn)刪除SKP/ IDLE 字符操作,提高有效數(shù)據(jù)的讀出速率,反之亦然。如果讀指針處于上溢或下溢區(qū)間,則彈性緩沖器過滿或過空,為了避免指針躍遷,讀指針會直接跳過數(shù)據(jù)或立即暫停,并向外部輸出上溢或下溢信號。為了滿足其他協(xié)議的要求,彈性緩沖器深度隨參數(shù)設(shè)置而變化,緩沖區(qū)間隨深度成比例變化。
圖4 彈性緩沖器閾值劃分示意圖
讀指針主要用于選定要讀出的存儲單元,以及通過暫停和跳轉(zhuǎn)的方式來實(shí)現(xiàn)字符集的增添與刪減。由于讀指針個(gè)數(shù)大于讀指針遞增數(shù),因此能夠預(yù)先檢測到字符集,在下個(gè)時(shí)鐘周期進(jìn)行讀指針的暫?;蛱S。若數(shù)據(jù)寬度為20 bit,在一般模式下,讀指針依次遞增數(shù)為2。當(dāng)讀指針的最低位處于高緩沖區(qū),并且收到字符檢測信號時(shí),讀指針多跳過一個(gè)字符,從而實(shí)現(xiàn)刪減字符功能,反之,讀指針位于低緩沖區(qū),讀指針不再遞增,此時(shí)重復(fù)讀取當(dāng)前字符,完成增添字符操作。
文中采用Verilog HDL 硬件描述語言設(shè)計(jì)多指針彈性緩沖器,用VCS 仿真工具進(jìn)行功能仿真驗(yàn)證。同時(shí)在臺積電55 nm 工藝條件下,通過EDA 工具DC(Design Compiler)進(jìn)行綜合,并且采用相對保守的時(shí)序約束。綜合報(bào)告結(jié)果如圖5 所示。從綜合結(jié)果可以看出,該設(shè)計(jì)能夠滿足時(shí)鐘頻率為500 MHz的時(shí)序要求。
圖5 綜合報(bào)告結(jié)果
表3 展示了在相同參數(shù)及綜合約束條件情況下,支持不同模式所需要的面積、功耗的比較。其中,僅支持PCIE2.0 的模式是從支持多協(xié)議模式中分離出來的模式,從表中可以看出,支持多協(xié)議的彈性緩沖器在面積和功耗上有一定的增加,面積增加4.4%,功耗增加1.0%。
表3 不同模式下面積功耗對比
仿真結(jié)果如圖6~圖11 所示。圖6、圖7 表示在PCIE2.0 協(xié)議下,彈性緩沖器配置為數(shù)據(jù)位寬40 bit,深度設(shè)置為32。從圖6 中rd_data=40’b3e_8f4c_2c00 可以發(fā)現(xiàn),讀出數(shù)據(jù)刪除了控制字符集中第一個(gè)SKP 字符,圖7 讀出數(shù)據(jù)在COM 字符后增添了SKP 字符;圖8、圖9 表示在USB3.0 協(xié)議下,將數(shù)據(jù)位寬配置成20 bit,深度配置為16,讀指針處于高緩沖區(qū)或低緩沖區(qū)時(shí),寫入數(shù)據(jù)wr_data=20’b3_e706 被刪除或重復(fù)加入;圖10、圖11 表示在1000Base-X 協(xié)議下,設(shè)置數(shù)據(jù)位寬為10 bit,彈性緩沖深度為最小值8,在控制字符刪減/增添信號有效時(shí)完成刪減/增添操作,維持了彈性緩沖器的常半滿狀態(tài)。
圖6 PCIE2.0協(xié)議下SKP字符的刪減操作
圖7 PCIE2.0協(xié)議下SKP字符的增添操作
圖8 USB3.0協(xié)議下SKP字符的刪減操作
圖9 USB3.0協(xié)議下SKP字符的增添操作
圖10 1000Base-X協(xié)議下IDLE字符的刪減操作
圖11 1000Base-X協(xié)議下IDLE字符的增添操作
文中討論了基于常半滿方式的多指針彈性緩沖器原理與設(shè)計(jì)。該設(shè)計(jì)采用半滿檢查和多路指針的方法,實(shí)現(xiàn)了緩沖測量以及字符增刪操作,同時(shí)引入可配置參數(shù),使得該彈性緩沖器能夠適配不同協(xié)議的數(shù)據(jù)位寬和深度需求。經(jīng)過仿真綜合驗(yàn)證,該設(shè)計(jì)能夠同時(shí)滿足1000Base-X 千兆以太網(wǎng)、USB3.0 以及PCI-Express2.0 的協(xié)議要求,正確完成動態(tài)增添或刪除字符,實(shí)現(xiàn)傳輸速率補(bǔ)償。