本文所要說的信號(hào)編碼是指將信號(hào)原來的01序列按照一定的規(guī)則重新排列的過程。
那么信號(hào)為什么要進(jìn)行編碼呢?
最主要的原因就是信號(hào)本身是高頻交流信號(hào),但是原始的信號(hào)序列可能出現(xiàn)多個(gè)連續(xù)的0或1,那么此時(shí)就表現(xiàn)出了一定的低頻分量;
第一、如果鏈路中串有電容器件,前邊的文章中講過,電容對(duì)低頻分量有一定的衰減;
第二、信號(hào)中出現(xiàn)比較多的連續(xù)的0或1會(huì)使信號(hào)的碼間干擾更惡劣,眼圖更差;
因此,信號(hào)協(xié)議采取了一定的編碼以保持0和1的平衡;
下面我們看一下,幾種常見的編碼;
RZ:return to zero,即歸零碼,電平每次跳變后,都要占用一個(gè)bit位進(jìn)行歸零(此bit位不是有效傳輸數(shù)據(jù)),此編碼只有50%的效率;
NRZ:non-return to zero,非歸零碼,信號(hào)每次跳變后,電平不進(jìn)行歸零,序列中發(fā)送的bit1,電平則由0跳變到1,序列中發(fā)送的bit0,電平則由1跳變到0,此編碼有100%的效率,但是不能保證鏈路中的DC平衡;
NRZI:non-return to zero inverted,非歸零反轉(zhuǎn)碼,當(dāng)序列中發(fā)送的是bit1,電平發(fā)生跳變,由高到低,或由低到高都可以,當(dāng)序列中發(fā)送的是bit0,信號(hào)不發(fā)生跳變,此編碼不能保證鏈路中的DC平衡;
MLT-3:multi-level transit-3,多電平傳輸碼,有+1、0、-1三種電平,當(dāng)序列中發(fā)送的是bit1,電平則發(fā)生跳變,如果序列中發(fā)送的是bit0,則不跳變,跳變時(shí),如果前一個(gè)bit是+1或者-1,則下一個(gè)bit變?yōu)?,如果前一個(gè)bit是0,則下一個(gè)bit與最近的一個(gè)非0bit相反,這種編碼由于有三種電平跳變,直流平衡要好于前兩種;
Manchester編碼:當(dāng)序列發(fā)送的是bit0時(shí),電平由低電平跳變到高電平,當(dāng)序列發(fā)送的是bit1時(shí),信號(hào)由高電平跳變到低電平,這種編碼里電平的跳變都是強(qiáng)制的,因此每bit就多出了1bit位進(jìn)行電平調(diào)整,所以這種編碼雖然保證了每bit信號(hào)都發(fā)生跳變,但是效率只有50%;
4b/5b:這種編碼是將原來4個(gè)bit的序列變?yōu)?bit,也就是原來一共有2的4次方(16)種可能的數(shù)據(jù),現(xiàn)在有2的五次方(32)種,在這32位種選取16個(gè)bit0和bit1數(shù)量相當(dāng)?shù)慕M合,如00111/10110等,與原來的4bit序列一一對(duì)應(yīng),剩下的可以挑選用作控制,4b/5b映射表如下:
這樣做的好處是在32組序列中可以將其中01數(shù)量比較均衡的組合選出16組,從而保持DC平衡;
上表就是由原序列的4bit和編碼后的5bit序列進(jìn)行的一一映射,除了01的平衡,沒有別的規(guī)律了,直接查表就行;
8b/10b:和4b/5b編碼類似,這種編碼是將8bit的數(shù)據(jù)用10bit表示,要注意,先將原來的8bit數(shù)據(jù)拆分成高3bit和低5bit,再將高3bit映射為4bit,將低5bit映射為6bit,映射表如下:
高3bit映射表
低5bit映射表
從表中可以看到,有些序列是分RD+和RD-的,如果,0的數(shù)量多,則該序列記為RD+,如果1的數(shù)量多,則該序列記為RD-,當(dāng)前一序列為RD+時(shí),下一序列則用RD-,反之亦然,保持直流平衡;
例如,原序列為000 00000,那么編碼后,高3bit映射為1011(RD-),那么低5bit映射為011000(RD+),以此保證連續(xù)0和1的數(shù)量
這種編碼種最大連1和連0的數(shù)量為5,這種編碼的直流平衡得到了保障,但是效率只有80%,比較高速的信號(hào)逐漸不采用這種編碼了;
另外,需要注意一種數(shù)據(jù)的表示形式:D.31.2,D就是數(shù)據(jù),31則表示該8bit數(shù)據(jù)的低5位,2表示高3位,所以D.31.2就是010 11111;
下表是D碼的編碼表,以及由8bit轉(zhuǎn)為10bit的映射:
K碼表示控制碼,如K28.5,則表示控制碼,101 11100
K碼映射表如下: