1. 程式人生 > >【設計經驗】4、SERDES關鍵技術總結

【設計經驗】4、SERDES關鍵技術總結

一、SERDES介紹

       隨著大資料的興起以及資訊科技的快速發展,資料傳輸對匯流排頻寬的要求越來越高,並行傳輸技術的發展受到了時序同步困難、訊號偏移嚴重,抗干擾能力弱以及設計複雜度高等一系列問題的阻礙。與並行傳輸技術相比,序列傳輸技術的引腳數量少、擴充套件能力強、採用點對點的連線方式,而且能提供比並行傳輸更高頻寬,因此現已廣泛用於嵌入式高速傳輸領域。

  Xilinx公司的許多FPGA已經內建了一個或多個MGT(Multi-Gigabit Transceiver)收發器,也叫做SERDES(Multi-Gigabit Serializer/Deserializer)。MGT收發器內部包括高速串並轉換電路、時鐘資料恢復電路、資料編解碼電路、時鐘糾正和通道繫結電路,為各種高速序列資料傳輸協議提供了物理層基礎。MGT收發器的TX傳送端和RX接收端功能獨立,而且均由物理媒介適配層(Physical Media Attachment,PMA)和物理編碼子層(Physical Coding Sublayer,PCS)兩個子層組成,結構如下圖所示

 

  PMA子層內部集成了高速串並轉換電路,預加重電路、接收均衡電路、時鐘發生電路和時鐘恢復電路。串並轉換電路的作用是把FPGA內部的並行資料轉化為MGT介面的序列資料。預加重電路是對物理連線系統中的高頻部分進行補償,在傳送端增加一個高通濾波器來放大訊號中的高頻分量進而提高訊號質量,但預加重電路會導致功耗和電磁相容(Electro Magnetic Compatibility,EMC)增加,所以如非必要一般情況下都把它遮蔽掉。接收均衡電路主要用來補償由頻率不同引起的阻抗差異。時鐘發生電路與時鐘恢復電路在傳送端把時鐘和資料繫結後傳送,在接收端再從接收到的資料流中恢復出時鐘,這樣可以有效地避免在高速序列傳輸的條件下時鐘與資料分開傳輸帶來的時鐘抖動問題。

  PCS子層內部集成了8B/10B編/解碼電路、彈性緩衝電路、通道繫結電路和時鐘修正電路。8B/10B編/解碼電路可以有效的避免資料流中出現連續的‘0’或者‘1’,以保證資料傳輸的平衡性。通道繫結電路的作用是通過在傳送資料流中加入K碼字元,把多個物理上獨立的MGT通道繫結成一個時序邏輯上同步的並行通道進而提高傳輸的吞吐率。彈性緩衝電路用來解決恢復的時鐘與本地時鐘不一致的問題並可以通過對緩衝區中的K碼進行匹配對齊來實現通道繫結功能。

  下面將詳細討論SERDES用到的各種關鍵技術。

二、SERDES關鍵技術

  簡化的SERDES結構圖如下圖所示

 

       SERDES的優勢在於其頻寬很高,引腳數目較少而且支援目前多種主流的工業標準,比如Serial RapidIO ,FiberChannel(FC),PCI-Express(PCIE),Advanced Switching Interface,Serial ATA(SATA),1-Gb Ethernet,10-Gb Ethernet(XAUI),Infiniband 1X,4X,12X等。它的線速度能達到10Gb/s甚至更高,主要原因是因為它採用了多種技術來實現這些功能。

2.1 多重相位技術

  如果輸入的序列資料流位元率為x, 那麼可以使用多重相位以x/4的低速時鐘來重新組織資料流。輸入的資料流直接連線到4個觸發器,每一個觸發器執行在時鐘的不同相位上(0、90、180以及270)。多重相位技術的資料提取電路如下圖所示

 

  對應的時序圖如下圖所示

 

  每個觸發器的輸出連線到時鐘相位小90度的觸發器,直到到達時鐘相位為0 的觸發器。這樣,輸入資料流就被分解成了1/4輸入速率, 4bit寬度的並行資料流。

  在上述的示例電路中,相位等差排列,時鐘頻率嚴格等於輸入資料流速率的1/4。怎樣才能實現呢?我們必須和輸入的資料流保持鎖定。我們可以使用典型的鎖相環來實現這一點,但是鎖相環需要一個全速率的時鐘,這是很難滿足的。鎖相環是高速SERDES設計中最重大的改進之一,它主要用於時鐘和資料恢復。一般的鎖相環需要有執行在資料速率上的時鐘,不過可以通過多種技術來避免這種要求,包括分數鑑相器、多重相位鎖相環、並行取樣以及過取樣資料恢復。

2.2 線路編解碼技術

  線路編碼機制將輸入的原始資料轉變成接收器可以接收的格式,並保證有足夠的切換提供給時鐘恢復電路。編碼器還提供一種將資料對齊到字的方法,同時線路可以保持良好的直流平衡。線路編碼機制也可選擇用來實現時鐘修正、塊同步、通道繫結和將頻寬劃分到子通道。線路編碼機制主要有兩種方式,分別為數值查詢機制和擾碼機制。

2.2.1 8B/10B編解碼

  8b/10b編碼機制是由IBM開發的,已經被廣泛採用。 8b/10b編碼機制是Infiniband,千兆位乙太網, FiberChannel以及XAUI 10G乙太網介面採用的編碼機制。它是一種數值查詢型別的編碼機制,可將8位的字轉化為10位符號。這些符號可以保證有足夠的跳變用於時鐘恢復。下表是兩個8-bit資料編碼為10-bit資料的例子。

 

  在上面的例子中8-bit資料會導致線路很長時間不出現切換而丟失同步資訊。 所以8B/10B編解碼電路採用了一種叫做執行不一致(Running Disparity)的技術來保證線路良好的直流平衡效能。

2.2.2 執行不一致(Running Disparity)

  8B/10B編解碼機制中的直流平衡是通過一種稱作“執行不一致性”的方法來實現的。實現直流平衡的最簡單辦法是:只使用有相同個數0和1的符號,但是這將限制符號的數量。而8B/10B則為各個數值分配了兩個不同的符號。其中一個符號有6個0和4個1,這種情況稱為正執行不一致符號,簡寫為RD+,另一個符號則有4個0和6個1,這種情況稱為負執行不一致符號,簡寫為RD-。編碼器會檢測0和1的數量,並根據需求選擇下一個符號,以保證線路的直流平衡。下表給出了一些符號示例

 

  “執行不一致性”技術的另一個優點是如果資料違反了執行不一致性規則,那麼接收器可以通過監控輸入資料的執行不一致性規則來檢測資料中的錯誤。

2.2.3 控制字元(Control Characters)

  8B/10B編解碼技術將12個特殊字元編碼成12個控制字元,通常也稱作“K”字元。這些控制字元用於資料對齊,控制以及將頻寬劃分成為子通道。下表是12種控制字元的編碼情況

 

2.2.4 Comma檢測

  Comma指的是用於對齊序列的一個7-bit符號。資料的對齊是解串器的一項重要功能,下圖給出了序列流中的有效8B/10B資料示例。

 

       在Serdes中,資料被Comma序列隔開,Comma序列可以自行設定,也可以預先定義好。接收器在輸入資料流中掃描搜尋特定的位元序列。如果找到序列,解串器調整字元邊界以匹配檢測到的Comma字元序列。掃描是連續進行的,一旦對齊確定,所有後續的Comma字元均會發現對齊已經確定。當然,在任意的序列組合裡comma字元序列必須是唯一的。

       例如,如果我們使用符號K28.7作為Comma字元,則我們必須確保任意有序符號集xy中都不包含位元序列K28.7。使用預定義協議時是不會出現這個問題的,因為Comma字元都是已經定義好的。

  常用的K字元是全部控制字元中的一個或多個特定子集。這些子集中包含K28.1,K28.5,K28.7,這些字元的頭7位都是1100000。這種位元序列模式只可以在這些控制字元中出現。其他任意的字元序列或者其他K字元都不包含這一位元序列。因此,這些控制字元是非常理想的對齊序列。在使用自定義協議的情況下,最安全且最常用的解決方案是從比較著名的協議中“借”一個序列。千兆位乙太網使用K28.5作為Comma字元。鑑於這個原因,儘管在技術上還有其他的選擇,這個字元還是經常被當作Comma字元。

  控制字元的命名方式源於編碼器和解碼器構建方式,例如: D0.3和K28.5,下圖描述了這種方法。

 

  輸入的8位位元被分成5位和3位的資料分別進行5B/6B編碼和3B/4B編碼,這就是其名字的來源。舉例說明, Dx.y表示最低5位的數值對應十進位制值x,而最高3位的數值對應十進位制值y的輸入位元組。字母D表示資料字元,而字母K表示控制字元。另一種命名方式中, 8位位元對應於HGF EDCBA,而10位位元對應於abcdei fghj。開銷是8b/10b機制的一個缺陷。為了獲得2.5Gbit的頻寬,需要3.125Gb/s的線路速率。但使用擾碼技術可以很容易地解決時鐘傳送和直流偏置問題,並且不需要額外的頻寬。

2.2.4 擾碼(Scrambling)

  擾碼是一種將資料重新排列或者進行編碼以使其隨機化的方法,但是必須能夠解擾恢復。我們希望打亂長的連0和長的連1序列,將資料隨機化。顯然,我們希望解擾器在解擾時不需要額外的對齊資訊。具有這種特性的碼稱作自同步碼。

  一個簡單的擾碼器包含一組排列好的觸發器,用於移位資料流。大部分的觸發器只需要簡單地輸出下一個位元即可,但是某些觸發器需要和資料流中的歷史位元相與或者相或。下圖描述了此概念。

 

  擾碼方法通常是伴隨著多項式出現的,因為擾碼的數學原理中使用了多項式。多項式的選擇通常是基於擾碼的特性,包括生成資料的隨機度,以及打亂長的連0、連1的能力。擾碼必須避免生成長的連0或連1序列。

  我們希望能夠加快觸發器的時鐘速率。但是想要達到諸如10Gb/s的高速率不是能輕易辦到的。但是,還是有方法可以將任意形式的序列資料並行化為y位寬度的並行資料,從而加快程序。如下圖所示。

 

  擾碼器消除了長連0、連1序列以及其他會對接收器接收能力有負面影響的序列。但是線路編碼機制(例如: 8B/10B)的其他功能不是由擾碼器提供的,包括:

  1、 字對齊(Word Alignment)

  2、 時鐘修正機制(Clock Correction Mechanism)

  3、 通道繫結機制(Channel Bonding Mechanism)

  4、 子通道生成(Sub-Channel Creation)

  某些情況下後三種功能可能是不需要的,而字對齊通常是必要的。如果線路編碼使用了擾碼,那麼字對齊也必須採用相應的方法。例如,我們可以將某些數值排除在容許的資料(或者有效載荷)數值之外。此後,我們可以使用這些禁用的值來建立一個位元流,這個位元流不會在序列的資料部分中出現。如下圖所示

 

  通常,因為存在不允許的數值,所以需要設計資料流中不能出現連0或連1的長度。長的連0、連1會被擾碼器打亂,並在解擾時進行恢復。接收資料流的解擾邏輯在資料流中搜尋這些符號並對齊資料。類似的技術還可用於建立其他特性。

2.2.5 4B/5B與64B/66B編解碼技術

  4B/5B和8B/10B是類似的。顧名思義,這種機制將4個位元編碼成5個位元。4B/5B的編碼器和解碼器要比8B/10B簡單一些。4B/5B的控制字元要少一些,並且不能處理直流平衡和執行不一致性問題。由於編碼開銷相同但是功能卻比較少,所以4B/5B編碼機制並不經常使用。它的最大優勢是設計的尺寸,不過隨著邏輯閘價格的降低這個優勢也不再明顯。4B/5B仍用在各種標準中,包括低速率版本的FiberChannel、音訊工程協會-10(AES-10)以及多通道數字音訊介面(MADI,一種數字音訊復接標準)。

  還有一種新的編碼方式稱作64B/66B 。我們可以認為64B/66B是8B/10B的簡化版本,它具有更低的編碼開銷,但是實現細節相當不同。在現有的技術使用者需求下,人們開發出了64B/66B機制。10G乙太網協會要求實現基於乙太網的10Gb/s通訊。他們可以通過使用4條有效載荷速率為2.5Gb/s、線路速率為3.125Gb/s的鏈路來實現,但此時SERDES已經可以在單個鏈路上實現10Gb的解決方案。此時新型SERDES的執行速率已經可以略高於10Gb/s了,但還不能達到12.5Gb/s以支援8B/10B的開銷。

  更多的64B/66B編解碼技術的實現細節請檢視參考文獻1。

2.3 包傳輸技術

  包是一種確切定義的位元組集合,包括頭部、資料和尾部。

  注意,定義中沒有包括源地址和目的地址、 CRC校驗碼、最小長度、或者開放系統互連協議層。包只不過是一個定義了起點和終點的資料結構。區域網的包通常有很多特性,但是其他用途的包則通常要簡單得多。

  包用於各種場合下的資訊傳遞。例如汽車動力佈線、手機以及家庭娛樂中心等等。但是,包和千兆位序列鏈路有什麼關係呢?

  通過千兆位序列鏈路傳輸的資料多數都是嵌入在某種型別的包中的。Serdes自然需要一種將輸入的資料流對齊成字的方法。如果系統需要時鐘修正,還必須傳送特殊的位元序列或者Comma字元。 Comma字元是指示幀的開始和結束的天然標識。如果需要時鐘修正,時鐘修正序列常常是比較理想的字元。加入有序集合用於指示包的開始、結束以及包的特殊型別之後,我們就有了一個簡單而又強大的傳輸通道。

  idle符號或序列是包的概念的另一要點。如果沒有資訊需要傳送,則傳送idle符號。資料的連續傳輸保證鏈路能夠維持對齊,同時PLL可以保持恢復時鐘鎖定。下圖給出了一些不同標準的包格式。

 

2.4 參考時鐘要求

  千兆位級收發器的輸入時鐘、或是參考時鐘的規格定義是非常嚴格的。其中包含非常嚴格的頻率要求,通常用每百萬次容許頻率錯誤的單位PPM來定義。抖動要求也是十分嚴格的,通常用時間(皮秒)或者時間間隔(UI)定義。

  如此嚴格的規定才使得PLL和時鐘提取電路能夠正常工作。通常系統的每一個印刷電路板都需要有一個精確石英晶體振盪器供MGT使用。這些晶體振盪器的精確度比大多數用在數字系統中的晶體振盪器要高一個級別,而且價格也要高出一截。很多情況下,一般的時鐘發生晶片和PLL因為帶有很大的抖動,而不能用於MGT。

2.5 時鐘修正技術

  千兆位Serdes對傳輸時鐘有非常嚴格的抖動要求,所以通常不能將恢復時鐘作為傳輸時鐘。每一個PCB集合都有唯一的振盪器和唯一的頻率。如果兩個1GHz的振盪器僅僅有1PPM的頻差,同時提供1/20th的參考時鐘,則資料流的時鐘每秒鐘可能會增加或者缺失20,000個週期。因此,在8B/10B編碼的系統中,每秒將會額外增加或者損失2萬個符號。

  大多數的Serdes都有時鐘修正功能。時鐘修正需要使用唯一的符號或者符號序列,它們在資料流中是不會出現的。因為時鐘修正是對齊的後續處理,所以可以比較容易地通過保留一個K字元、或者一組有序的K字元、或者一個時鐘修正資料序列來實現。

  某些情況需要使用4個符號的時鐘修正序列。時鐘修正通過檢測接收FIFO來完成其工作。如果FIFO接近於滿,則查詢下一個時鐘修正序列而不將資料序列寫入FIFO。這種操作稱作丟棄。相反地,如果FIFO接近於空,則查詢下一個時鐘修正序列,同時它會被兩次寫入FIFO。這種操作通常也稱作重複。

  時鐘修正進行的頻數必須足夠多,從而可以通過丟棄或者重複來補償時鐘的差異。時鐘修正序列和idle序列通常也是一樣的。

  有些系統並不需要時鐘修正。例如,在很多晶片到晶片(chip-to-chip) 的應用中,同一個振盪器為所有收發器提供參考時鐘。相同的參考時鐘和相同的速率意味著不需要進行時鐘修正。同樣,如果所有接收電路的時鐘都來自恢復時鐘,那麼時鐘修正也是不需要的。如果FIFO的寫入速率和讀出速率相等,也沒有必要進行時鐘修正。

  如果所有的傳輸參考時鐘都是通過一個外部的PLL鎖定在一個公共的參考頻率上,那麼也不需要時鐘修正。對於高精確度的序列數字視訊鏈路來說,這是常用的一種結構。所有的傳輸時鐘都是從一個公共的視訊參考中獲取的。無法鎖定到這個訊號往往將導致自由滑動的視訊流,相對於其他的鎖定訊號。在1G或2G速率上實現是比較簡單的,但是設計一個能夠用於10Gb鏈路且有足夠精度的參考時鐘是非常有挑戰性的。

  下表給出了在不同晶振頻率和晶振精度下時鐘修正序列之間的最大時鐘週期數。

 

2.6 接收和傳送緩衝器

  接收和傳送緩衝器,即FIFO,是千兆位級收發器的主要數字介面。 FIFO通常是資料寫入和讀出的地方。傳送端通常有一個小型的FIFO,它要求讀取和寫入的時鐘是等時同步(isochronous)的(等時同步是指頻率匹配但相位不一定匹配)。

  如果tx_write和tx_read選通訊號不是工作在精確相同的頻率,則通常採用另外的方法。此時,需要使用一個較大的FIFO,同時要求持續不斷地檢測FIFO的當前狀態。如果FIFO被不斷地填充,將最終導致溢位。在這種情況下,必須在輸入資料流中檢測idle符號。如果檢測到idle符號,則不把idle符號寫入FIFO。

  反過來,如果FIFO執行較慢則在輸出資料流會出現idle符號,資料被傳送給使用者。此時寫指標保持不動,不斷重複idle符號。使用idle符號而不使用位元組對齊、 Comma字元、時鐘修正序列或者通道繫結序列,這一點是非常重要的。為了保證一定的傳送速率,所有這些序列都是必需的。

  相對於傳送緩衝器而言, MGT內建的接收FIFO通常需要有更深層次的考慮。它的主要目的是為了實現時鐘修正和通道繫結。

2.7 通道繫結

  有時候我們需要傳送的資料會超過一條序列鏈路的承載能力。在這種情況下,可以同時使用多條鏈路來並行傳輸資料。如果使用這種方式,則輸入的資料流必須是對齊的。這個過程通常稱作通道繫結。通道繫結可以吸收兩個或多個MGT之間的偏差,將資料提交給使用者,就像只使用一條鏈路進行傳送一樣。通道繫結的過程如下圖所示

  不同MGT間資料偏差的一些主要原因:

  1、 傳輸通道長度的偏差

  2、 傳輸通道的有源中繼器

  3、 時鐘修正引起的偏差

  4、 鎖定和位元組對齊引起的時間偏差

  因為通道繫結需要涉及到收發器之間的通訊,所以具體的細節因廠家、器件而異。但是它們有一些共同的特性,例如:指定一個通道作為主通道,指定從通道,還可能需要指定前向從通道。三級通道繫結包括一個主通道和前向從通道,所以通常也稱為兩-跳通道繫結。

  通道繫結序列必須是唯一的而且是可擴充套件的,因為可能會新增或丟棄通道繫結序列,所以下行鏈路中必須忽略。通常時鐘修正序列和通道繫結序列之間會有最小間隔符號數。很多基於8B/10B的標準協議規定時鐘修正序列和通道繫結序列之間至少需要間隔四個符號。因此,四個符號或位元組是比較常用的間隔距離。

2.8 物理訊號

  千兆位級Serdes的物理實現普遍採用基於差分的電氣介面。常用的差分訊號方法有三種:低電壓差分訊號(LVDS)、低電壓偽射級耦合邏輯(LVPECL)和電流模式邏輯(CML)。千兆位鏈路通常使用CML。CML採用最常用的介面型別,並且通常都會提供AC或DC端接以及可選的輸出驅動。部分輸入還提供了內建的線路均衡和/或是內部端接。通常端接的阻抗也是可選的。

  下圖給出了一個CML型的驅動電路。這些高速驅動電路的原理非常簡單。兩個電阻中的一個始終都有電流通過,並且此電流和通過另一個電阻的電流不同。

 

  下圖給出了一個MGT接收器的示意圖。

 

2.9 預加重

  千兆位級驅動器最重要的特性可能就是預加重的能力。預加重是在轉變開始前的有意過量驅動。如果沒有相關的經驗,這看起來會像是一個缺陷;看起來就象是一個不好的設計可能發生的上衝和下衝。為了弄懂這麼做的意圖,我們需要理解符號間干擾。

  如果序列流包含多個位元位時間的相同數值資料,而其後跟著短位元位(1或2)時間的相反資料數值時,會發生符號間干擾。介質(傳輸通道電容)在短位時間過程中沒有足夠的充電時間,因此產生了較低的幅度。符號間干擾的示意圖如下:

 

  在符號間干擾的情況下,長時間的恆定值將通道中的等效電容完全的充電,在緊接著的相反資料數值位時間內無法反相補償。所以,相反資料的電壓值有可能不會被檢測到。這個問題的解決方法是:轉變開始時加入過量驅動,而在任意的連續相同數值時間內減少驅動量,這種過程有時也稱作去加重。

2.10 差分傳輸

  數字設計工程師和PCB設計師們曾經一度認為佈線只不過是簡單的互連或連線。實際上,原型建造時通常採用一種叫做蛇行佈線的技術。實際中並不是一定要運用傳輸線和傳輸線理論。如果線路的傳輸延時只是訊號上升時間中的很小一部分,我們可以不使用傳輸線理論。

  但是隨著訊號的傳輸速率的增大,PCB設計過程中就必須使用傳輸線理論。對於千兆位級操作而言,不僅包括傳輸線和阻抗控制,還包括差分線路對的阻抗控制。差分線路對阻抗匹配的兩條線路是相鄰的。兩條線路之間的間隔使得兩線路相互耦合。如果兩線路相隔較遠,則稱作弱耦合。如果相隔較近,則為強耦合。

  如果給定線路的長度以及疊層結構(會帶來給定的阻抗),耦合還會影響線路的阻抗。相同幾何形狀的差分線路對也會有不同的阻抗。阻抗的精確大小因材料而異,但是板製作廠商通常會提供精確的資料。下表給出了受控阻抗差分線路的各種型別。

 

2.11 線路均衡

  均衡主要用於補償由頻率不同而引起的阻抗/衰減差異。均衡器有很多種形式,但總體上可以分為有源和無源兩種。

  無源均衡器是無源電路,其頻率響應可以補償傳輸衰減。無源均衡器可以認為是一個濾波器。如果我們的濾波器可以使傳輸線所使用的各頻率通過,而將傳輸線沒有使用的其他頻率濾除,那麼整體的頻率響應就會變得平坦許多。

  有源均衡器可以認為是依賴頻率的放大器/衰減器。有源均衡器主要有兩種:固定形式有源均衡器和自適應有源均衡器。對於任意的輸入資料流,固定形式有源均衡器的頻率響應都是一樣的。

  固定形式均衡器的增益/衰減量通常是使用者可選擇的,或者可程式設計的。部分均衡器有一個簡單的控制引數—n 用於設定高增益或低增益,類似於簡單音響系統中的低音設定。還有一些均衡器可以獨立設定不同頻率的增益/衰減量,這和複雜音響系統中的均衡設定是類似的。

  自適應均衡器(也稱學習型均衡器)要複雜的多,自適應均衡器需要分析輸入訊號並檢測哪些頻率在傳輸通道中被削弱。測量和調節是以閉環形式實現的。自適應均衡器的頻率響應取決於輸入的位元流。

  自適應均衡器通常和特殊形式的線路編碼機制協同工作。自適應均衡器對於可變通道的鏈路來說是最合適的,可變通道可以是可變的電纜長度,或是顯著的位置依賴的背板系統。固定形式均衡器比較適合於不變系統中,例如:晶片到晶片,平衡化的背板系統以及固定長度電纜的系統。均衡器通常包含在SERDES的模擬前端,或者作為系統的一個獨立部分。

2.12 光解決方案

  如果系統中電纜要傳輸的距離很遠(遠大於相鄰底板的距離),那麼通常採用光解決方案。使用光纖可以實現多種長距離傳輸,例如:樓下到樓上,樓與樓之間,街區之間或者城鎮之間。

  光纖系統使用光訊號取代電訊號來傳輸資訊。最基本的光纖系統包括髮送器或訊號源、光纖以及接收器,接收器將光脈衝重新轉變為電訊號。訊號源通常是注入型鐳射二極體(ILD)或者發光二極體(LED),如下圖所示。

 

       光纖中的光脈衝傳輸是基於全反射定理的。全反射定理:如果入射角大於臨界值,則光線不會透射而會全部反射回來。簡單的說,光纖可以看作是一個內部全是鏡子的彈性管線。光線在管道中不停反射前進,就算管道發生了彎曲,光線也能一直前進到達末端。

  光線有兩種型別——單模光纖和多模光纖。單模的價格較高,可以傳輸的距離也較長。多模光纖的價格較低,只能用於短距離傳輸。

  單模光纖的示意圖如下圖所示

 

  多模光纖的示意圖如下圖所示

 

  基本的光聯結器如下圖所示

 

2.13 迴圈冗餘校驗碼(CRC)

  設計師還是需要設計一個穩健的系統。首先,他需要檢查系統的要求,看是否能夠使用常用的方法來解決問題。

  一種方法是錯誤檢測資料重傳。檢查輸入資料中是否有錯。如果發現錯誤,則傳送資訊給傳送者要求重傳資料。錯誤檢測的首選方法是CRC。因為CRC十分常用,所以許多SERDES內部都有CRC發生器和檢測邏輯。通常重傳請求是由上層協議定義的。如果協議支援CRC和重傳,或者資料要求正是其所能滿足的,那麼這種方法將會是最好的選擇。

  如果情況不是這樣的話,設計師還可以有其他的選擇。設計師可以建造並測試所設計的系統,以觀察其能否正常工作。SERDES釋出的BER可以用來確定測試需要進行到什麼程度,所以設計師還是有一些機動空間的。設計師不可能設計出一個遠優於釋出資料的系統。除了持續測試直到達到釋出的BER,設計師還需要在各種極限情況下進行測試(例如,輸入抖動十分靠近容限)。如果給系統設計提供更好的輸入流,那麼結果會更好。  

  資料還提供了另一種值得考慮的選擇。多數的資料流都是有模式的,和用於BER測試的偽隨機位元流相比,資料流更容易預測。這一點可能是好處也可能是壞處,這取決於傳輸通道和均衡器適配資料流的情況。所以必須進行測試和調整。所以建造一個系統並觀察其能否正常工作,這種方法並不是十分牽強的。儘管如此,如果這種方法會出現操作上的問題,那麼前向糾錯(FEC)可能會有所幫助。

2.14 前向糾錯(FEC)

  由於設計師知道可能會發生錯誤,所以可以通過提供冗餘資料位來恢復這些錯誤。常用的方法就是利用一些前向糾錯碼來對資料流中的錯誤進行糾正。

  前向糾錯的定義:新增額外的位,用於幫助恢復錯誤資料。

  考慮一個待傳輸的資料塊,其大小為NxR位元組,分為R行,每行N位元組。現在給矩陣的每一行附加額外的一個位元組,並給矩陣附加額外的一行。這些地方就是額外的位置。

  資料塊的附加資訊就儲存在這些額外的位置中。此例中,額外的資訊是奇偶位。附加位元組的每一位代表此行中各位元組對應位的奇偶性。也就是說,P[1][0]是D[1.1][0] D[1.2][0]D[1.3][0] …. D[1.N][0]的奇偶性。而對於額外的行而言,其中的每一位就是對應列中各位的奇偶性。也就是說, P[R+1.0][0]是 D[0.0][0], D[1.0][0] D[2.0][0] ….D[N.0][0]的奇偶性。矩陣的示意圖如下圖所示。

 

  資料和附加位同時通過鏈路傳輸。在另一側,接收器會檢查矩陣的奇偶性。如果資料的任一位是錯誤的,那麼它會標記出來,並通過行值和列值來確定位置。只需要簡單的取反,即可糾正該位的錯誤。多位的錯誤即可能被糾正,也可能會導致混亂而且會阻止其他錯誤的糾正,這取決於錯誤發生的位置。

  這種方法通常稱作簡單矩陣奇偶性法,而且也是FEC的最初型別。這也是多數FEC方法基本模組。這個例子是簡單易懂的,但是它有侷限性。針對惡劣環境和效能不好的傳輸通道,已經開發出多種FEC 方法,例如Viterbi,Reed-Soloman 和 Turbo 編碼。所有這些方法都有強大的糾錯能力,但是糾錯也是有代價的:

  1、執行速度不夠快: 與大多數可以在常規結構下發揮作用的方法相比,千兆位級 SERDES的速度較快。

  2、編解碼器太過龐大: 編碼器和解碼器的電路邏輯數量可能會是MGT及其剩餘部分的十倍。

  3、編碼開銷過大: 編碼開銷就是那些附加的位。編碼開銷過大常常可以使一種 FEC方法不可行。

三 總結

  Serdes技術中的各種可用功能極大地促進了I/O設計的發展。 SERDES的各種功能例如RX定位、時鐘管理器、傳送/接收FIFO、線路編碼器/解碼器等被廣泛用於提高速度和精確度。SERDES在未來I/O設計中扮演著重要角色,它提供的各種功能也將是高效 I/O器件設計的重要工具。

四、參考資料

  1、ug476_7Series_Transceivers,下載連結:https://www.xilinx.com/support/documentation/user_guides/ug476_7Series_Transceivers.pdf

  2、High-speed serial IO made simple,下載連結:https://pan.baidu.com/s/1Is8oZznS4MCHEOPK5Qwufg   密碼:rttp