王可揚,吉兵,屈凌翔
(中國電子科技集團公司第五十八研究所,江蘇 無錫 214072)
PCI-Express(Peripheral Component Interconnect Express,PCIe)作為第三代高性能通用I/O 總線技術(shù),可以視作是PCI 總線的改進版本。它不單繼承了PCI 的一些良好特性,實現(xiàn)了PCI 總線協(xié)議全部軟件的向下兼容[1-2],同時,在總線結(jié)構(gòu)上進行了革命性的改變:一是從并行式變?yōu)榱舜惺剑遣捎昧它c對點的互連技術(shù)[3]。此外,PCIe也支持如熱插拔、功耗管理、質(zhì)量服務(wù)等高級特性[4]。
目前PCIe5.0 可支持最快32 GT/s 的傳輸速率,同時,不僅支持單通道數(shù)據(jù)傳輸,也可以支持2 路、4 路、甚至32 路的多通道數(shù)據(jù)傳輸。然而,在PCIe 進行多通道數(shù)據(jù)傳輸時,即使使用同樣的時鐘源從發(fā)送端進行數(shù)據(jù)發(fā)送,如果不在接收端進行處理,仍然無法保證所有通道的數(shù)據(jù)能夠同時抵達接收端[5]。因此各個通道間就會存在時差,這是因為實際電路中存在數(shù)據(jù)的傳輸延時。導(dǎo)致延時的因素有:(1)各通道信號線的長度不同;(2)線路板在印刷時的阻抗存在差別;(3)由于數(shù)據(jù)的串化和解串引入延遲;(4)外部因素例如溫度的影響等[6-7]。
因為各通道的延時來源不盡相同,必然會使得各通道上的延時也有所區(qū)別。這也給消除多通道數(shù)據(jù)傳輸?shù)难訒r誤差帶來了更大的設(shè)計壓力。圖1 所示為以四通道為例的情況。
如圖1 所示,接收端在接收到各通道傳送來的數(shù)據(jù)后需要經(jīng)過反數(shù)據(jù)剝解邏輯,即由數(shù)據(jù)發(fā)送時的剝解順序來進行數(shù)據(jù)合并。如果各通道上的數(shù)據(jù)在同一時間點并未對齊,那么接收端就無法正確地進行數(shù)據(jù)合并,從而產(chǎn)生順序混亂的數(shù)據(jù)包并發(fā)送到數(shù)據(jù)鏈路層。這是不被允許的,所以接收端必須對各通道間的相位偏移進行消除,以保證多通道數(shù)據(jù)能夠在同一時間點到達接收端進行后續(xù)處理。該過程被稱為鏈路的多通道糾偏(Laneto-Lane De-skew),圖2 所示為四通道的De-skew 過程。
圖1 數(shù)據(jù)傳輸中產(chǎn)生的skew 現(xiàn)象
圖2 接收端的De-skew 處理
本文提出了一種De-skew 邏輯電路設(shè)計,能夠在不預(yù)先知曉哪路數(shù)據(jù)先到達的情況下消除各通道間的偏移現(xiàn)象,同時滿足通道間skew 最大值的約束要求。該邏輯方案也可以應(yīng)用于PCIe 以外的其他任何電路中多通道間相位偏移的處理。
PCIe 協(xié)議規(guī)范中對多通道De-skew 做了一些規(guī)則要求,但并未規(guī)定實現(xiàn)De-skew 的具體方法。目前主要的實現(xiàn)方法是借助TS1/TS2 以及FTS 等有序集。因為這些有序集具有特定的結(jié)構(gòu)和長度,且在所有通道上遵循同時發(fā)送的規(guī)則,因此可以用來作為衡量各通道間偏移量的標志。在PCIe 協(xié)議規(guī)范中,針對第一代/第二代(Generation one/Generation two,Gen1/Gen2)和第三代/第四代(Generation three/Generation four,Gen3/Gen4)所要實現(xiàn)的De-skew,建議利用不同的有序集,具體如下[8]:
(1)Gen1/Gen2 中建議使用以下一個或多個作為衡量標志:TS1/TS2 有序集的COM 字符(有序集的頭字節(jié))、EIEOS 有序集的COM 字符、在FTS 序列后緊接著的第一個SKP 有序集的COM 字符、不使用SRIS 時在訓(xùn)練序列中的SKP 有序集的COM 字符。
(2)Gen3/Gen4 中建議使用以下一個或多個作為衡量標志:SDS 有序集、退出L0s 狀態(tài)時的EIEOS 有序集、Gen3 時的SKP 有序集、Gen4 時的FTS 序列后緊跟的第一個SKP 有序集。
目前,國內(nèi)外常見的De-skew 電路設(shè)計思路多是利用計數(shù)器和多個寄存器進行設(shè)計實現(xiàn)。該方法使用多個寄存器進行數(shù)據(jù)的緩存移位,每兩個寄存器間加一個選擇器用來控制數(shù)據(jù)是否進入寄存器進行緩存。同時,在每條通道上添加一個計數(shù)器,當每一路的數(shù)據(jù)到達第一個寄存器時就開始計數(shù)[9]。計數(shù)器可以用來觀察各條通道上的數(shù)據(jù)何時到達,也可以觀察各通道數(shù)據(jù)分別經(jīng)過了多少個寄存器。更重要的是,通過各通道計數(shù)器的數(shù)值做差可以算出各通道間的skew 大小并判斷其是否超過所允許的最大值。但該方法實現(xiàn)需要的寄存器數(shù)量較多,尤其在Gen3/Gen4 速率下,由于每秒內(nèi)傳輸數(shù)據(jù)量的加大,代碼實現(xiàn)會更為冗長復(fù)雜。即使速率不變,隨著設(shè)計頻率以及數(shù)據(jù)位寬的改變,寄存器數(shù)量也會發(fā)生改變,因而整個De-skew 代碼的實現(xiàn)需要進行大量變動。針對上述問題,本文提出了一種新穎的邏輯設(shè)計,可有效降低邏輯設(shè)計的復(fù)雜度,同時擁有很強的代碼復(fù)用性。
針對如何消除多通道的skew 問題,本文提出了一種利用同步FIFO 實現(xiàn)De-skew 的邏輯電路。
以Gen3 速率下的八通道傳輸情況為例,結(jié)構(gòu)如圖3所示。在每條通道后接入一個同步FIFO(FIFO 結(jié)構(gòu)如圖4所示),F(xiàn)IFO 作為一種先進先出的數(shù)據(jù)寄存器,保證了數(shù)據(jù)流按順序?qū)懭肭野错樞蜃x出。在此基礎(chǔ)上,本文所提出的FIFO 結(jié)構(gòu)還能夠準確地對FIFO 的空/滿狀態(tài)進行判斷,以保證數(shù)據(jù)正確地寫入或者讀出。具體實現(xiàn)方式為:采用EIEOS 有序集作為Gen3 條件下的De-skew 衡量標志,當某條通道上檢測到EIEOS 的有序集時,該通道的FIFO 便會將push 信號拉高,此時通道上的數(shù)據(jù)塊將會被寫入到FIFO 中進行暫時的緩存。當所有通道上FIFO 的push 信號均被拉高時,即所有通道均檢測到EIEOS 有序集且每條通道上的數(shù)據(jù)塊均已寫入各個FIFO中后,將所有通道上FIFO 的pop 信號同時進行拉高。這樣,所有通道將同時輸出EIEOS 有序集以及之后的所有數(shù)據(jù)塊,從而實現(xiàn)了各條通道數(shù)據(jù)的對齊校正功能,完成了通道的De-skew。
圖3 利用FIFO 的De-skew 邏輯電路
圖4 FIFO 結(jié)構(gòu)圖
值得注意的是,該邏輯電路所使用的FIFO 支持位寬和深度的自由配置。通過對這兩個參數(shù)的配置,進而滿足各種不同數(shù)據(jù)傳輸速率下的De-skew 需求。在本設(shè)計中,設(shè)備工作在Gen3 條件下,每條通道的數(shù)據(jù)位寬為32 bit,時鐘頻率為250 MHz,規(guī)定各條通道間的skew 最大值為32 ns。因此FIFO 的位寬設(shè)置為32 bit,并合理設(shè)置FIFO 的深度(Deepth)使之能夠滿足最大skew 值的要求。由于此時傳輸?shù)臄?shù)據(jù)流中每個symbol(字符,長度為8 bit)對應(yīng)的傳輸時間為1 ns,則各條通道間的skew 最大為32 個symbol 的位置。此時FIFO 的位寬為32 bit,即4 個symbol 的大小。將FIFO 的深度設(shè)置為8,這樣FIFO中能夠緩存的數(shù)據(jù)最多為32 個symbol,從而確保了最大skew 值的要求。假設(shè)lane0 的數(shù)據(jù)流最先到達接收端并被push 進其對應(yīng)的FIFO 中。而lane7 的數(shù)據(jù)流則比lane0 要晚到36 ns,即36 個symbol 的位置。這樣當lane7的數(shù)據(jù)流到達接收端并被push 進其對應(yīng)的FIFO時,lane0 上的FIFO 已經(jīng)被填滿。而此時因為8 條通道的push 并未全部完成,各FIFO 的pop 信號不會被拉高,lane0 會同lane7 一起往各自FIFO 中送入數(shù)據(jù),這會造成lane0 的FIFO 的數(shù)據(jù)溢出,產(chǎn)生錯誤,進而產(chǎn)生De-skew錯誤信號。De-skew 錯誤信號會通知發(fā)送端重新進行數(shù)據(jù)發(fā)送,直到通道間skew 不超過最大規(guī)定值,或者超時傳輸終止。
針對前文所述的傳輸情況:時鐘頻率為500 MHz、數(shù)據(jù)位寬為8 bit、最大skew 值為20 ns 的Gen2 速率,只要將FIFO 配置為位寬為8 bit,深度為10,同時將EIEOS有序集的檢測改為對COM 字符的檢測,便能夠輕松實現(xiàn)該情況下的De-skew 設(shè)計。因此,本文提出的邏輯電路結(jié)構(gòu)不僅具有全面性和可實現(xiàn)性,還具有很好的代碼復(fù)用性。
本文采用Synopsys 公司的PCIe VIP 以及AMBA AXI VIP 搭建了驗證平臺。VIP 作為驗證知識產(chǎn)權(quán)模塊,它是一種預(yù)先驗證過的內(nèi)建驗證結(jié)構(gòu),能夠提供完整且靈活的應(yīng)用機制。通常,VIP 是基于標準協(xié)議的,可以很方便地將其插入到基于仿真的確認測試中,從而顯著提高驗證的可復(fù)用性及驗證效率。PCIe 控制器可以作為RC(根聯(lián)合體)或者EP(終點設(shè)備),將PCIe VIP 作為RC,而將待測設(shè)計作為EP 進行驗證。
基于所搭建的驗證平臺,本文采用Synopsys 公司的仿真工具以及Novas 公司的Verdi 工具進行了仿真聯(lián)調(diào)。圖5 為對邏輯電路進行驗證仿真的波形。此時的輸入數(shù)據(jù)為連續(xù)4 個64′hffff_0000,即為Gen3 條件下的EIEOS 有序集。從圖3 中可以看到,輸入8 條通道的數(shù)據(jù)中,EIEOS 有序集并未對齊,而經(jīng)過該De-skew 邏輯電路后最終的輸出數(shù)據(jù)——8 條通道的EIEOS 有序集完成了對齊。仿真結(jié)果驗證了該De-skew 邏輯電路功能的正確性和可行性。
圖5 De-skew 功能仿真圖
表1 所示為本文De-skew 邏輯設(shè)計方案同現(xiàn)有常用方案的對比,可以看到,雖然利用計數(shù)器和多個寄存器進行數(shù)據(jù)緩存的方案也能正確實現(xiàn)De-skew 功能,并對通道間skew 是否超過最大規(guī)定值進行判斷,但本文提出的方案更為簡便,代碼量更少,通過配置FIFO 的位寬和深度也能適用于Gen3/Gen4 等更高的速率情況,具有全面性、優(yōu)越性和可復(fù)用性。
表1 De-skew 邏輯電路方案對比
由于PCIe 多通道間的延遲差異,必然會導(dǎo)致數(shù)據(jù)傳輸中的skew 現(xiàn)象。本文提出了一種邏輯電路,在通道數(shù)據(jù)到達接收端的先后順序未知的情況下,實現(xiàn)De-skew功能,同時滿足PCIe 規(guī)定的最大skew 值需求。最后搭建測試平臺并通過仿真驗證了該邏輯設(shè)計方案。結(jié)果表明,本文所提出的邏輯設(shè)計有效實現(xiàn)了PCIe 多通道的De-skew 功能,同時,該邏輯電路具有普適性,能夠適用于PCIe 的各種速率、位寬、時鐘頻率等搭配情況,可應(yīng)用于其他高速電路的多通道傳輸。本設(shè)計為消除通道間的skew 問題提供了良好的借鑒意義。