這些最主要的模組包括序列器(也有叫串化器)、時鐘資料恢復(cdr)、解串器以及均衡器等。這樣的裝置與源同步介面不同,因為接收機裝置包含時鐘和資料恢復(cdr)電路,其基於訊號的跳變沿來動態地確定資料訊號的最佳取樣點。 換句話說,從資料中直接提取時鐘資訊,而不是依賴於單獨的時鐘。本篇我們主要來簡單介紹前面三種必要的模組,均衡器會在後續的內容中介紹。
序列器要實現的功能就是並串轉換,簡單來說就是將原本並行的資料轉換成序列的資料。目前有兩種主要的並串轉換方式——可裝載移位暫存器和迴轉選擇器。
解串器的功能正好和序列器的功能及步驟相反,那就是將序列的訊號又重新轉換成並行訊號,又叫串並轉換,
時鐘資料恢復(cdr)顧名思義就是將資料流裡面的資料和時鐘在接收端恢復出來,說起來感覺很簡單的樣子,但實際上如下圖所示時鐘恢復過程無法產生乙個共用時鐘或者同資料一起傳送的時鐘。作為替代,由鎖相環(pll)合成出乙個與輸入序列訊號的時鐘頻率一致的時鐘,也即pll能根據參考時鐘和輸入訊號來產生鎖定於輸入訊號的新時鐘,所以pll對於serdes的接收也是至關重要的。
您了解的均衡器的種類與功能有哪些?
那再往10g,25g,56g走呢,豈不是就玩不轉啦?
在我們的序列鏈路中,損耗可以算是眼睛張不開的最大元凶,從理想的插損曲線來判斷的話,我們一般會記住幾個常用的數值:
0db=1,-3db=0.7,-6db=0.5,-12db=0.25,-20db=0.1。。。然後速率越高,db值肯定越大啦,那麼眼高自然就慢慢沒了……
當然,我們也會想出很多方法來應對,比如板材是影響損耗的重要因素,我們從原始普通的fr4板材到中等損耗板級,再到低損耗板材,再到超低損耗板材,那在同樣的走線長度,自然損耗就小了,或者換句話說在同樣的損耗情況下,我們可以走得更長了;然後銅箔粗糙度也會影響損耗,因此我們把銅箔的工藝研究得非常深入,也製造出了各種的銅箔型別;
然而無論是對板材還是對銅箔的優化,付出的是更高的成本,更新板材和銅箔也需要經歷時間的等待。我們習慣性把乙個鏈路分成三個部分,分別為傳送晶元,傳輸通道和接收晶元。我們上述對板材,銅箔的優化其實都是對傳輸通道進行的優化,那我們能不能在晶元本身做點文章呢?
答案當然是可以的。均衡技術就是針對晶元端的其中一種技術。實際上均衡技術種類有很多,從結構上分類,分為線性和非線性均衡,或者說是模擬和數字的區別;按作用來分類則可分為頻域均衡和時域均衡,前者是校正頻率特性,而後者是直接校正畸變的波形;按調節方法還可以分為固定均衡和可變均衡,而可變均衡分為手動均衡和自適應均衡。按抽樣時間間隔的不同來分類,又可以分為碼元間隔均衡和分數間隔均衡等等。
在那麼多的分類之中,的確在我們的pcb鏈路上常用的一般就三種:ctle(continuous time linear equalization)連續時間線性均衡,ffe(feed forward equalization)前向反饋均衡和dfe(decision feedback equalization)決策反饋均衡。前面兩種是線性的均衡器,而且後面的dfe是非線性的。
均衡的終極作用就是把我們接收端的眼圖給睜開,的確從pcb相關的**或者測試中也驗證了這個是一項非常有用的技術,在晶元裡面去做這樣的技術,與從板材銅箔這些的優化相比,也是成本較低的方案。
為了把訊號傳輸更遠距離,通常在傳送端和接收端使用預加重或去加重的均衡技術,通過提公升訊號的高頻部分能量,以補償傳輸通道對高頻的衰減。均衡器有:1.ctle連續時間性均衡器,特點是功耗低,實現簡單,不會增大抖動。2.ffe前端反饋式均衡器,由延時電路、乘法器、加法器組成的模擬均衡器。3.dfe判決反饋均衡器,特點不會放大雜訊和串擾,易於實現,廣泛應用高速收發晶元中。
為什麼損耗全頻段都變差的情況下,居然能夠使眼圖張開呢,隱藏著什麼秘密???
通過該通道的損耗情況能夠發現,由於連續0或連續1對應的頻率是比較低的,因此對應的幅度衰減也比較小,單獨的1或0 的轉換則代表高頻的情況,幅度衰減則比較大,因此連續0或連續1在經歷高幅度後突然要轉換成相反電平的高頻資料,這個高頻資料幅度衰減很大,就會跟不上節奏,不能拉回到乙個屬於它電平的正確位置。
我們對這種碼型帶來的惡劣影響的情況稱為isi,碼間干擾,這是又一種重要影響訊號質量的因素,不同於阻抗不匹配,反射或者串擾這些影響,即使把傳輸線優化得很好,阻抗反射串擾這些都考慮得很完善,但是只要通道的衰減達到一定的幅度,都有可能出現碼間干擾
現在就把這個關子拿出來講講,也就是今天要說的編碼方式。說到針對於nrz資料的編碼方式,本人聽過的有4b/5b,8b/10b,64b/66b,64/67b,128b/130b,128b/132b編碼(可能各位還有其他吧),不同的編碼方式針對於不同的訊號協議,當然效率也是不一樣的。什麼叫效率?在資料報傳送的術語叫開銷,意思就是除了實際需要的資料之外的一些資料bit,例如冗餘校驗等。那大家看上面的編碼的數值比就知道了,例如8b/10b,要把8bit的實際資料擴充套件為10b,那開銷就是20%,效率就只有80%了,更通俗來說就是增加了20%的非實際資料的傳輸 。所以乙個好的編碼方式,除了看它本身的演算法優化情況外,還要注重效率高不高。
本人將用兩期的篇章主要介紹下8b/10b和64/66b編碼方式,其他的主要都是由他們擴充套件開來的。那介紹完前面總體的情況後,進入本期的主題,8b/10b編碼。
首先,為什麼要編碼?原來的碼型有什麼不好的地方嗎?其中最主要的原因用下面這個圖來進行解釋:
大家看明白了吧,由於我們的序列鏈路中會有交流耦合電容,我們知道理想電容的阻抗公式是zc=1/2πf*c,因此訊號頻率越高,阻抗越低,反之頻率越低,阻抗越高。因此上面的情況,當碼型是高頻的時候,基本上可以不損耗的傳輸過去,但是當碼型為連續「0」或者「1」的情況時,電容的損耗就很大,導致幅度不斷降低,帶來的嚴重後果是無法識別到底是「1」還是「0」。因此編碼就是為了盡量把低頻的碼型優化成較高頻的碼型,從而保證低損耗的傳輸過去。
上面解釋了原因,下面就介紹下這種8b/10b的編碼方式的演算法。
對於一些常見的編碼方式而言,即使在我們不知道它們有什麼好處的情況下,也很容易想到它的缺點,那就是需要增加額外的資料bit。因此我們看到很多像pcie1,明明傳輸了2.5gbps的資料,但是實際上有用的資料只有2g;pcie2也一樣,5gbps的資料由於的只有4g。對於8b/10b編碼而言,這是一筆不小的損失。人們還是要用這種編碼,也正說明了它的好處顯然會大於它的壞處。很多網友也回答得非常精準,我再稍微彙總下大家的答案哈。
首先,使用8b/10b編碼的根本目的是為了直流平衡,所謂直流平衡,在上文中也**並茂的解釋過了。但是說到保證直流平衡又是為了什麼呢?我們可以對上文的prbs7碼型(10gbps)進行有和沒有8b/10b編碼的頻譜進行分析,如下所示:
可以看到,進行8b/10b編碼後,訊號在低頻段的能量明顯少了,補充到了高頻能量中去了。其實,這就相對於乙個高通濾波器,根本作用和之前說的加重均衡時一樣的,就是使經過傳輸通道後保持平坦的頻域曲線,這樣能有效緩解isi碼間干擾,使接收眼圖擴大。所以說,使眼圖變好的方式有很多,但是萬變也不離其中,原理都是殊途同歸的。
另外,通過8b/10b後,連續0或1的數量減少了,對於時鐘恢復電路(cdr)也是有幫助的。它使cdr能夠有更多的邊沿變換,對於cdr的pll來說,更能把握到資料的內嵌時鐘,對正確取樣資料和減小抖動有很大的益處。
其他的作用還包括:
增加一些校驗的碼型,起到資料對齊和控制命令的作用,增加糾錯的能力;
編碼後起到加密的作用;
編碼有一定的規律的碼型,對解碼來說也有幫助。
上文說完了8b/10b之後,我們再來說說貌似更複雜的64b/66b編碼。很多人可能在想,8b/10b編碼主要作用的優化直流平衡,從8bit中插2個bit進去,這樣的話最終效果能夠使長0或者長1的位數不超過5位,達到很好的效果。那64b/66b編碼方式呢?在從64個bit中僅加入2個bit,能夠很好的解決長0長1的問題嗎?作用似乎只是杯水車薪,2個bit相對於64個bit太少了。但是這種64b/66b的編碼方式流行至今,肯定是有它自己的優勢所在,其實它和8b/10b編碼還是有原理上和演算法上的區別的。
當然,如果僅靠這2個bit來實現8b/10b的作用顯然不太現實。其實上,這兩個bit只是起乙個同步頭的作用,主要用於接收端的資料對齊和接收資料位流的同步。這兩個bit有「10」和「01」兩種同步表徵方式,「01」表徵後面的64個bit都是資料bit,「10」表示後面的64bit是資料和控制資訊的混合,其他的「00」或者「11」都表徵為錯誤資訊。資料bit用「d」表示,每個資料碼是8bit;控制bit用「z」表示,每個資料碼是7bit。其中在「10」這種資料控制資訊混合的情況下,後8個bit劃分為表徵型別域,其後的56bit才是真正的控制資訊或資料控制兩者的混合。另外「s」表示包開始傳送,「t」表示包傳送結束,值得注意的是「s」只能在第0和第4位元組出現。「t」可以出現在任何的位元組。
那按照上面說的,新加的2個bit只是作為同步,那後面的資料可以如何優化呢?這裡有一項區別於8b/10b編碼的技術——擾碼。
所謂擾碼,就是一種將資料重新排列或者進行編碼以使其最優化的方法。怎麼才能最優化呢?就是使資料bit的「0」和「1」最大程度的達到隨機分布,進一步減輕了抖動的碼間串擾,提高了資料傳輸的可靠性。從本質上說,擾碼就是為了達到這個目的而在傳輸資料進入通道傳輸之前,對其進行的位元層的隨機化處理過程。它的方法就是使用上面prbs碼型所說到的多項式,關於多項式的選擇通常是基於擾碼的特性,包括生成資料的隨機度,以及打亂連0和連1的能力。從prbs多項式的角度說,其實就是重新生成偽隨機碼型的過程。64b/66b的擾碼使用的多項式是1+x39+x58。按照前期說的prbs生成器,得到該擾碼器的框圖如下所示:
就是前幾期prbs說的第39和第58位的異或運算,然後通過移位暫存器輸出的碼型結果。當然,前面說了,64b/66b編碼的這種擾碼方式目標是使資料的「0」和「1」最大程度的隨機分布,減小連續出現的情況,因此它可能並不能適用於所有的碼型,不像8b/10b編碼一樣對所有的bit組合都有出色的表現,具體還要看接收器的能力。但是無可否認,它最大的好處是效率比較高,傳輸冗餘的bit只有2位,不像8b/10b編碼需要20%的開銷。這方面在更高速的傳輸環境下更具有優勢。
Modbus序列傳輸方式
在485匯流排上使用modbus協議,有兩種主要方式 rtu ascii。rtu傳輸方式傳輸的資料幀為二進位制資料,ascii傳輸方式傳輸的是ascii碼。舉例來說要傳送 0x31 十進位制數 使用rtu直接傳送0x31就可以 占用乙個byte 而ascii碼傳輸方式則需要傳送0x33和0x31這兩...
Webservice SOAP傳輸序列化總結
一.所有webservice中傳遞的物件都必須能夠序列化,這個是作為在網路之間傳輸的必要條件。xml webservice和soap標準支援的資料型別如下 1.基本資料型別.標準型別,如 int float bool datetime string等基本資料型別 2.列舉.支援列舉enum定義的型別...
Webservice SOAP傳輸序列化總結
一.所有webservice中傳遞的物件都必須能夠序列化,這個是作為在網路之間傳輸的必要條件。xml webservice和soap標準支援的資料型別如下 1.基本資料型別.標準型別,如 int float bool datetime string等基本資料型別 2.列舉.支援列舉enum定義的型別...