ansi编码转换_8b/1b编码是个什么东东
使用串行比并行總線可以節(jié)省更多的布線空間,芯片、電纜等的尺寸可以做得更小,同時(shí)傳輸速率更高。但是,在很多數(shù)字系統(tǒng)如CPU、DSP、FPGA等內(nèi)部,進(jìn)行數(shù)據(jù)處理的最小單位都是Byte,即8個(gè)bit,如何把一個(gè)或多個(gè)Byte的數(shù)據(jù)通過(guò)串行總線可靠地傳輸出去是需要對(duì)數(shù)據(jù)做些特殊處理的。
并串轉(zhuǎn)換與串并轉(zhuǎn)換
最簡(jiǎn)單的把并行數(shù)據(jù)轉(zhuǎn)換成串行信號(hào)傳輸?shù)姆椒ㄈ缦聢D所示。比如發(fā)送端的數(shù)據(jù)寬度是8bit,時(shí)鐘速率是100MHz,我們可以通過(guò)Mux(復(fù)用器)芯片把8bit的數(shù)據(jù)時(shí)分復(fù)用到1bit的數(shù)據(jù)線上,相應(yīng)的數(shù)據(jù)速率提高到800Mbit/s(在有些LVDS的視頻信號(hào)傳輸中比較常用的是把并行的7bit數(shù)據(jù)時(shí)分復(fù)用到1bit數(shù)據(jù)線上)。信號(hào)到達(dá)接收端以后,再通過(guò)DeMux(解復(fù)用器)芯片把串行的信號(hào)分成8路低速的數(shù)據(jù)。
這種并串轉(zhuǎn)換方法由于不涉及的信號(hào)編解碼,結(jié)構(gòu)簡(jiǎn)單,效率較高,但是需要收發(fā)端進(jìn)行精確的時(shí)鐘同步以控制信號(hào)的復(fù)用和解復(fù)用操作,因此需要專門(mén)的時(shí)鐘傳輸通道,而且串行信號(hào)上一旦出現(xiàn)比較大的抖動(dòng)就會(huì)造成串并轉(zhuǎn)換的錯(cuò)誤。
因此,這種簡(jiǎn)單的并串轉(zhuǎn)換方式一般用于比較關(guān)注傳輸效率的芯片間的短距離互連或者一些光端機(jī)信號(hào)的傳輸中。另外由于信號(hào)沒(méi)有經(jīng)過(guò)任何編碼,信號(hào)中可能會(huì)出現(xiàn)比較長(zhǎng)的連續(xù)的0或者連續(xù)的1,因此信號(hào)必須采用直流耦合方式,收發(fā)端一旦存在比較大的共模或地噪聲,會(huì)嚴(yán)重影響信號(hào)質(zhì)量,因此這種并串轉(zhuǎn)換方式用于電信號(hào)傳輸時(shí)或者傳輸速率不太高(通常<1Gb/s),或者傳輸距離不太遠(yuǎn)( 通常<50cm)。
8b/10b數(shù)據(jù)編碼
為了提高串行數(shù)據(jù)傳輸?shù)目煽啃?#xff0c;現(xiàn)在很多更高速率的數(shù)字接口采用的是對(duì)數(shù)據(jù)進(jìn)行編碼后再做并串轉(zhuǎn)換的方式。編碼的方式有很多,如8b/9b編碼、8b/10b編碼、64b/66b編碼、128b/130b編碼等,下面我們以最流行的ANSI 8b/10b編碼為例進(jìn)行一下介紹。
在ANSI 8b/10b編碼方式中,8比特的數(shù)據(jù)先通過(guò)相應(yīng)的編碼規(guī)則轉(zhuǎn)換成10比特的數(shù)據(jù),然后再進(jìn)行并串轉(zhuǎn)換;接收端收到信號(hào)后先把串行數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換得到10比特的數(shù)據(jù),然后再通過(guò)10比特到8比特的解碼得到原始傳輸?shù)?比特?cái)?shù)據(jù)。因此,如果發(fā)送端并行側(cè)的數(shù)據(jù)速率是8bit100Mb/s,通過(guò)8b/10b編碼和并串轉(zhuǎn)換后的串行側(cè)的數(shù)據(jù)速率就是1bit1Gb/s。8b/10b編碼方法最早由IBM發(fā)明,后來(lái)成為ANSI標(biāo)準(zhǔn)的一部分(ANSI X3.230-1994, clause 11),并在通信和計(jì)算機(jī)總線上廣泛應(yīng)用。下圖是ANSI 8b/10b編碼表的一部分,以數(shù)據(jù)0x00為例,其原始的8bit數(shù)據(jù)是0b00000000,經(jīng)過(guò)編碼后就變成了0b1001110100或者0b0110001011。
8b/10b編碼的好處:
? 有足夠多的跳變沿,可以從數(shù)據(jù)里進(jìn)行時(shí)鐘恢復(fù)。正常傳輸?shù)臄?shù)據(jù)里可能會(huì)有比較長(zhǎng)的連續(xù)的0或者連續(xù)的1,而進(jìn)行完8b/10b編碼后,其編碼規(guī)則保證了編碼后的數(shù)據(jù)流里不會(huì)出現(xiàn)超過(guò)5個(gè)的連續(xù)的0或1,信號(hào)里會(huì)出現(xiàn)足夠多的跳變沿,因此可以采樣嵌入式的時(shí)鐘方式,即接收端可以從數(shù)據(jù)流里用PLL電路直接恢復(fù)時(shí)鐘,不需要專門(mén)的時(shí)鐘傳輸通道。
? 直流平衡,可以采用AC耦合方式。經(jīng)過(guò)編碼后數(shù)據(jù)里不會(huì)出現(xiàn)連續(xù)的0或者1了,但是還是有可能在某個(gè)時(shí)間段內(nèi)0或者1的數(shù)量偏多一些。從上面的編碼表中我們可以看到同一個(gè)Byte對(duì)應(yīng)有正、負(fù)兩組10bit的編碼,一個(gè)編碼里1的數(shù)量多一些,另一個(gè)編碼里0的數(shù)量多一些。數(shù)據(jù)在對(duì)當(dāng)前的Byte進(jìn)行8b/10b編碼傳輸時(shí),會(huì)根據(jù)前面歷史傳輸?shù)臄?shù)據(jù)中正負(fù)bit的數(shù)量來(lái)選擇使用哪一組編碼,從而可以保證總線上正負(fù)bit的數(shù)量在任何時(shí)刻基本都是平衡的,也就是直流點(diǎn)不會(huì)發(fā)生大的變化。直流點(diǎn)平衡以后,在信號(hào)傳輸?shù)穆窂缴衔覀兙涂梢圆捎肁C耦合方式(最常用的方法是在發(fā)送端或接收端串接隔直電容),這樣信號(hào)對(duì)于收發(fā)端的地電平變化和共模噪聲的抵抗能力進(jìn)一步增強(qiáng),可以傳輸更遠(yuǎn)的距離。采用AC耦合方式的另一個(gè)好處是收發(fā)端在做互連時(shí)不用太考慮直流偏置點(diǎn)的互相影響,互連變得非常簡(jiǎn)單,對(duì)于熱插拔的支持能力也更好。
? 有利于信號(hào)校驗(yàn)。很多高速信號(hào)在做傳輸時(shí)為了保證傳輸?shù)目煽啃砸獙?duì)接收到的信號(hào)進(jìn)行檢查以確認(rèn)收到的信號(hào)是否正確。在8b/10bit編碼表里,原始的8bit數(shù)據(jù)總共有256個(gè)組合,即使考慮到每個(gè)Byte有正負(fù)兩個(gè)10bit編碼也只需要用到512個(gè)10bit的組合。而10bit的數(shù)據(jù)總共可以有1024個(gè)組合,因此有大約一半的10bit組合是無(wú)效的數(shù)據(jù),接收端一旦收到這樣的無(wú)效組合就可以判決數(shù)據(jù)無(wú)效。另外,前面我們介紹過(guò)數(shù)據(jù)在傳輸過(guò)程中是要保證直流平衡的,一旦接收端收到的數(shù)據(jù)中發(fā)現(xiàn)違反直流平衡的規(guī)則,也可以判決數(shù)據(jù)無(wú)效。因此采用8b/10b編碼以后數(shù)據(jù)本身就可以提供一定的信號(hào)校驗(yàn)功能。不過(guò)需要注意的是,這種校驗(yàn)不是足夠可靠,因?yàn)槔碚撋线€是可能存在有幾個(gè)bit在傳輸中發(fā)生了錯(cuò)誤但是結(jié)果仍然符合8b/10b編碼和規(guī)則和直流平衡原則。因此,很多使用8b/10b編碼的總線都還會(huì)在上層協(xié)議上再做相應(yīng)的CRC校驗(yàn)(循環(huán)冗余校驗(yàn))。
? 可以插入控制字符。在10bit數(shù)據(jù)可以表示的1024個(gè)組合中,除了512個(gè)組合用于對(duì)應(yīng)原始的8bit數(shù)據(jù)以及一些不太好的組合(比如0b1100000000這樣信號(hào)里有太長(zhǎng)的連續(xù)0或者1而且明顯0、1的數(shù)量不平衡)以外,還有一些很特殊的組合。這些特殊的組合可以用來(lái)在數(shù)據(jù)傳輸過(guò)程中做為控制字符插入(如下圖所示)。這些控制字符不對(duì)應(yīng)特定的8bit數(shù)據(jù),但是在有些總線應(yīng)用里可以代表一些特殊的含義。比如K28.5碼型,其特殊的碼型組合可以幫助接收端更容易判別接收到的連續(xù)的10bit數(shù)據(jù)流的符號(hào)邊界,所以在一些總線的初始化階段或數(shù)據(jù)包的包頭都會(huì)進(jìn)行發(fā)送。還有一些特殊的符號(hào)用于進(jìn)行鏈路訓(xùn)練、標(biāo)記不同的數(shù)據(jù)包類型、進(jìn)行收發(fā)端的時(shí)鐘速率匹配等。
綜上所述,要把并行的信號(hào)通過(guò)串行總線傳輸,一般需要對(duì)數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換。為了進(jìn)一步減少傳輸線的數(shù)量和提高傳輸距離,很多高速數(shù)據(jù)總線采用嵌入式時(shí)鐘和8b/10b的數(shù)據(jù)編碼方式。8b/10b編碼由于直流平衡、支持AC耦合、可嵌入時(shí)鐘信息、抗共模干擾能力強(qiáng)、編解碼結(jié)構(gòu)相對(duì)簡(jiǎn)單等優(yōu)點(diǎn),在很多高速的數(shù)字總線如FiberChannel、PCI-E、SATA、USB3.0、DisplayPort、XAUI、RapidIO等接口上得到廣泛應(yīng)用。下圖是一路串行的2.5Gbps的8b/10b編碼后的數(shù)據(jù)流以及相應(yīng)的解碼結(jié)果,從中我們可以明顯看到從里面解出的K28.5等控制碼以及相應(yīng)的數(shù)據(jù)信息。
8b/10b編碼的缺點(diǎn)
需要注意的是,采用8b/10b編碼方式也是有缺點(diǎn)的,最大的缺點(diǎn)就是8bit到10bit的編碼會(huì)造成額外的20%的編碼開(kāi)銷。比如對(duì)于一個(gè)采用8b/10b編碼的5Gbps的串行總線來(lái)說(shuō),其有效的數(shù)據(jù)傳輸速率只有4Gbps,也就是說(shuō)僅為了進(jìn)行4Gbps的信號(hào)傳輸就需要把總線的數(shù)據(jù)速率提高到5Gbps。相應(yīng)地,如果要進(jìn)行8Gbps的有效數(shù)據(jù)傳輸就需要把總線的數(shù)據(jù)速率提高到10Gbps,而10Gbps相對(duì)與8Gbps的數(shù)據(jù)速率來(lái)說(shuō),對(duì)于硬件人員的設(shè)計(jì)經(jīng)驗(yàn)、接插件、板材都有比較高的要求,所以很多10G左右或更高速率的總線都不再使用8b/10b編碼方式。比如PCI-E1.0和PCI-E2.0的總線速率分別為2.5Gbps和5Gbps,都是采用8b/10b編碼,而PCI-E3.0的總線就舍棄了8b/10b的編碼方式,數(shù)據(jù)速率為8Gbps,是通過(guò)效率更高的128b/130b的編碼結(jié)合更復(fù)雜的擾碼的方法來(lái)實(shí)現(xiàn)直流平衡和嵌入式時(shí)鐘的。另一個(gè)例子是FibreChannel總線,1xFC、2xFC、4xFC、8xFC的數(shù)據(jù)速率分別為1.0625Gbps、2.125Gbps、4.25Gbps、8.5Gbps,都是采用8b/10b編碼,而16xFC、32xFC的數(shù)據(jù)速率分別為14.025Gbps和28.05Gbps,采用的是效率更高的64b/66b編碼方式。
來(lái)源:網(wǎng)絡(luò)整理,如涉及版權(quán)問(wèn)題,請(qǐng)及時(shí)聯(lián)系刪除
總結(jié)
以上是生活随笔為你收集整理的ansi编码转换_8b/1b编码是个什么东东的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: centos图形化桌面的文件在哪_Cen
- 下一篇: echarts 卡_图表太丑怎么破,EC