高速序列匯流排設計基礎(五)揭祕SERDES高速面紗之多相資料提取電路與線路編碼方案

李銳博恩發表於2020-12-24

前言

SERDES可以工作在多吉位元的速率,同樣作為序列匯流排的SPI卻常常在十兆或數十兆位元的速率,為何差別這麼大呢?SERDES的特別之處在哪裡?用了什麼技術?這裡來揭祕SERDES高速面紗!

多相資料提取電路

採取多相位時鐘處理資料的技術應用十分廣泛,例如ADC晶片:EV10AQ190A,它的單通道模式就利用了多相位時鐘技術對模擬訊號進行取樣:

單通道模式取樣技術

這時多相位時鐘技術運用到了ADC電路設計中,可以實現使用資料流的4倍速率提升。
解讀ADC取樣晶片(EV10AQ190A)的工作模式(單通道模式)

如果將這種技術運用到吉位元收發器中呢?當然也可以大展身手,如下:

如下多相資料提取電路:

如果我們有位元率為x的輸入序列流,則可以通過使用慢速時鐘的多個相位來以x / 4的時鐘恢復流。輸入流被定向到四個觸發器,每個觸發器在時鐘的不同相位(0、90、180和270)下執行。

多相資料提取電路

多相提取電路時序圖

然後,每個觸發器送入一個由下一個最低相位時鐘的觸發器, 直到以零相時鐘開始計時。這就將輸入的資料流反串成一個4位字,以輸入資料流的1/4時鐘速率執行。

在前面的示例中,將相位對齊,時鐘恰好是輸入流速率的1/4。怎麼發生的?我們必須鎖定傳入的序列資料流。我們可以使用經典的鎖相環(PLL)來完成此操作,但這將需要全速率時鐘並達到目的。高速SERDES的最大進步之一涉及用於時鐘和資料恢復的PLL。普通PLL需要以資料速度執行的時鐘,但是可以使用幾種技術來避免這種需求,包括分數速率鑑相器,多相PLL,並行取樣和過取樣資料恢復。

線路編碼方案

所謂的線路編碼方案就是高速序列匯流排技術中常用的8B/10B編碼或者64B/66B技術,關於8B/10B編碼技術的具體細節我會在本系列的後續部分給出單獨一篇!
下圖時Xilinx的Transceiver定製頁面的某一頁,可見,8b/10b 編碼是 Xilinx 的眾多(幾乎所有)高速序列匯流排協議中,採用的一種保持序列資料DC平衡的技術。

GTX定製頁面

GTX定製頁面

線路編碼方案將原始資料修改成接收器可以接受的形式。具體而言,資料編碼方案確保有足夠的跳變以使時鐘恢復電路工作。它們提供了一種將資料對齊成字的方法,並且在序列鏈路上具有良好的直流(DC)平衡。

可選地,線路編碼方案還可提供時鐘校正,塊同步和通道繫結以及將頻寬劃分為子通道的實現。有兩種主要的線路編碼方案-值查詢方案和自修改流或加擾器。

8B/10B編解碼

8b / 10b編碼方案是由IBM開發的,已經被廣泛採用。它是Infiniband,千兆位乙太網,光纖通道和10千兆位乙太網的XAUI介面中使用的編碼方案。它是一種值查詢型別的編碼方案,其中將8位字轉換為10位符號。這些符號確保了時鐘恢復的跳變次數。

表3-1給出了一些8位值的示例,這些值會導致長時間執行而不會發生跳變。 8b / 10b允許將12個特殊字元解碼為12個通常稱為K字元的控制字元。後面會更詳細地介紹K個字元,但首先讓我們研究8b / 10b如何確保良好的DC平衡。

編碼示例

執行差異(Running Disparity)

通過一種稱為執行差異的方法,可以在8b / 10b中實現DC平衡。實現DC平衡的最簡單方法是僅允許具有相同數目的1和0的符號,但這將限制符號的數量。
相反,8b/10b使用兩個不同的符號分配給每個資料值。在大多數情況下,其中一個符號有6個0和4個1,另一個符號有4個0和6個1。監視1和0的總數,並根據需要選擇下一個符號,使線路恢復直流平衡。這兩個符號通常被稱為+和-符號。
符號示例見下表。

數字字元的編碼

關於此字元的全部編碼,可參考UG476的附錄C。
執行差異的另外一個好處是,接收器可以監控執行差異,並檢測到傳入流中發生了錯誤,因為違反了執行差異規則。

控制字元

剛才的表格中的以D開頭的字元成為資料字元,它代表的是資料資訊;其實不只有資料資訊,高速序列匯流排傳輸的還有控制字元,如下:
下表列出了12個特殊符號的編碼,這些符號稱為控制字元或K字元。

控制字元編碼

這些控制字元用於對齊,控制,並將頻寬劃分為子通道。

Comma 檢測

Comma Detection可以直譯為逗號檢測,它是指定為對齊序列的一兩個符號,可以看作是一個標誌。

資料對齊是解串器(串並轉換)的重要功能。下圖表示序列流中的有效8b / 10b資料。

序列資料流

我們怎麼知道符號的邊界在哪裡?符號是由逗號劃定的。在這裡,逗號是指定為逗號或對齊序列的一個或兩個符號。這個序列通常在收發器中可設定,但在某些情況下,它可能是預定義的。

接收器掃描傳入的資料流以查詢指定的位序列。如果找到序列,則解串器將重置單詞邊界以匹配檢測到的逗號序列。這是連續掃描。進行對齊後,檢測到的所有後續逗號都應找到已設定的對齊方式。當然,逗號序列在序列的任何組合內必須是唯一的。

例如,如果我們對逗號使用訊號符號c,則必須確定沒有有序的符號xy集包含位序列c(確保唯一,作為僅僅為編)。使用預定義的協議不是問題,因為已經定義了逗號字元。

通常使用K字元的一個或多個特殊子集。該子集由K28.1,K28.5和K28.7組成,它們的前7位均為1100000。僅在這些字元中找到此模式;沒有有序的資料集,也沒有其他K字元包含此序列。因此,它是對齊使用的理想選擇。在構建自定義協議的情況下,最安全,最常見的解決方案是從已知協議中“借用”序列。千兆乙太網使用K28.5作為逗號。因此,即使在技術上還有其他選擇,它也通常被稱為逗號符號。

加擾技術

由於8B/10B編碼技術,會新增額外的bit對資料進行編碼,從而增加了頻寬的開銷;例如要獲得2.5Gb的頻寬,需要3.125Gbps的線速率。
加擾技術可以輕鬆解決時鐘轉換和直流偏置問題,而無需增加頻寬。

什麼是加擾技術呢?
即一種對資料進行重新排序或編碼的方法,以使其看起來是隨機的,但可以被加密。

加擾是一種對資料進行重新排序或編碼的方法,以使其看起來是隨機的,但仍然可以不加擾。我們希望隨機化器可以打破長期的零和一。顯然,我們希望解擾器對位元進行解擾,而無需任何特殊的對齊資訊。此特性稱為自同步編碼。

一個簡單的加擾器由一系列觸發器組成,這些觸發器被安排用來移動資料流。大多數觸發器僅饋送下一位,但有時觸發器將與流中的較舊位進行異或運算。下圖顯示了此概念。

加擾解擾

由於涉及到數學問題,加擾方法通常被稱為多項式。多項式是根據擾頻特性來選擇的,例如它們建立的資料流有多隨機,以及它們能多好地分解零和一的長資料流。它們還必須避免產生長的執行長度。

希望增加觸發器的時鐘速率。但是,根本無法獲得諸如10 Gb / s的高速率。但是,有一種方法可以將任何序列係數並行為y大小的並行字,以加快處理過程,如圖所示。

並行加擾電路

加擾技術雖然很好,不會增加頻寬的開銷,但8b/10b等線路編碼方案所提供的其他任務是擾碼所不能提供的。例如:

  • 字對齊
  • 時鐘校正機制
  • 通道繫結機制
  • 子通道建立

儘管在某些情況下可能不需要最後三個,但是始終需要字對齊。如果將加擾用作行編碼方法,則必須使用另一種方法進行字對齊。例如,我們可以從資料或有效負載的允許值中排除某些值。然後,我們可以使用這些不允許的值建立在序列的資料部分中不會出現的位流(圖3-11)。

加擾資料幀設計

到這裡,SERDES為何如此之快的話題還沒結束,內容較多,留到下一篇再說吧。

參考文獻

ug476_7Series_Transceivers

8B/10B編碼技術

解讀ADC取樣晶片(EV10AQ190A)的工作模式(單通道模式)

注:本系列博文首發自:https://www.ebaina.com/articles/140000005095

相關文章