在數(shù)字電路中,組成一連串信息的基元就是0和1,無(wú)論是在CPU、DSP、MCU甚至是個(gè)數(shù)字計(jì)數(shù)器中,數(shù)字電路在其中能夠處理的信息也只有0和1,而對(duì)于任何外界的信息,計(jì)算機(jī)都能通過(guò)兩個(gè)量來(lái)描述,那就是0和1。而對(duì)于數(shù)字通信來(lái)說(shuō),想要用0和1來(lái)傳遞你想傳達(dá)的信息,則必須要通過(guò)一種特殊的約定來(lái)進(jìn)行同步,這種約定就是編碼。兩臺(tái)設(shè)備要想進(jìn)行有線通信,最終都是將想要傳達(dá)的信息轉(zhuǎn)變成一串比特流,進(jìn)而在傳輸線上進(jìn)行傳輸。常規(guī)數(shù)字通信為數(shù)據(jù)線+時(shí)鐘線的形式,但對(duì)于高速信號(hào)而言,時(shí)鐘線和數(shù)據(jù)線長(zhǎng)度的稍稍偏差,就會(huì)造成接收端無(wú)法滿足數(shù)據(jù)采樣的建立時(shí)間,故會(huì)導(dǎo)致數(shù)據(jù)出錯(cuò)。而最好的方式就是將時(shí)鐘信號(hào)和數(shù)據(jù)信號(hào)用同一根線來(lái)傳遞,所以出現(xiàn)了一些比較特殊的編碼,是的時(shí)鐘和數(shù)據(jù)能夠融合在一起。下面主要討論5中常用的編碼方式:
1.RZ(Return Zero Code)編碼
RZ編碼也成為歸零碼,歸零碼的特性就是在一個(gè)周期內(nèi),用二進(jìn)制傳輸數(shù)據(jù)位,在數(shù)據(jù)位脈沖結(jié)束后,需要維持一段時(shí)間的低電平。舉個(gè)圖例吧:
圖1 RZ碼示意圖
圖中紅色的線表示數(shù)據(jù),只占據(jù)一部分的周期,剩下周期部分為歸零段。而歸零碼而分為單極性歸零碼和雙極性歸零碼,圖1表示的是單極性歸零碼,即低電平表示0,正電平表示1。對(duì)于雙極性歸零碼來(lái)說(shuō),則是高電平表示1,負(fù)電平表示0。如下圖所示:
圖2 雙極性RZ碼示意圖
這種編碼方式雖說(shuō)能夠同時(shí)傳遞時(shí)鐘信號(hào)和數(shù)據(jù)信號(hào),但由于歸零需要占用一部分的帶寬,故傳輸效率也就收到了一定的限制,假設(shè)數(shù)據(jù)傳輸時(shí)間為t,一個(gè)周期時(shí)間為T,則這種傳輸效率η=t/T。
2.NRZ(Non Return Zero Code)編碼
NRZ編碼也成為不歸零編碼,也是我們最常見的一種編碼,即正電平表示1,低電平表示0。它與RZ碼的區(qū)別就是它不用歸零,也就是說(shuō),一個(gè)周期可以全部用來(lái)傳輸數(shù)據(jù),這樣傳輸?shù)膸捑涂梢酝耆?。一般常見的帶有時(shí)鐘線的傳輸協(xié)議都是使用NRZ編碼或者差分的NRZ編碼。因此,使用NRZ編碼若想傳輸高速同步數(shù)據(jù),基本上都要帶有時(shí)鐘線,因?yàn)楸旧鞱RZ編碼無(wú)法傳遞時(shí)鐘信號(hào)。但在低速異步傳輸下可以不存在時(shí)鐘線,但在通信前,雙方設(shè)備要約定好通信波特率,例如UART。
圖3 NRZ編碼示意圖
3.NRZI(Non Return Zero Inverted Code)編碼
NRZI編碼的全稱為反向不歸零編碼,這種編碼方式集成了前兩種編碼的優(yōu)點(diǎn),即既能傳輸時(shí)鐘信號(hào),又能盡量不損失系統(tǒng)帶寬。對(duì)于USB2.0通信的編碼方式就是NRZI編碼。其實(shí)NRZI編碼方式非常的簡(jiǎn)單,即信號(hào)電平翻轉(zhuǎn)表示0,信號(hào)電平不變表示1。例如想要表示00100010(B),則信號(hào)波形如下圖所示:
圖4 NRZI編碼示意圖
由圖可以看到,當(dāng)電平狀態(tài)發(fā)生變化時(shí),表示的數(shù)據(jù)為0。在傳輸?shù)臄?shù)據(jù)中,很少出現(xiàn)全1的狀態(tài),故接收端可以根據(jù)發(fā)送端的電平變化確定采樣時(shí)鐘頻率。但是有時(shí)候依然會(huì)出現(xiàn)數(shù)據(jù)為全1的狀態(tài),也就是說(shuō)信號(hào)線一直保持一個(gè)狀態(tài),這個(gè)時(shí)候時(shí)鐘信號(hào)就無(wú)法傳輸,接收端就無(wú)法同步時(shí)鐘信號(hào),這該如何解決呢?解決方式就是在一定數(shù)量的1之后強(qiáng)行插入一個(gè)0,就是說(shuō)若信號(hào)線狀態(tài)一直持續(xù)一段時(shí)間不變的話,發(fā)送端強(qiáng)行改變信號(hào)線的狀態(tài),接收端則只需要將這個(gè)變化忽略掉就可以了。在USB2.0的協(xié)議中規(guī)定為傳輸7個(gè)1則在數(shù)據(jù)中插入一個(gè)0。例如有一段數(shù)據(jù)為:1111 1111 (B)要發(fā)送,則整個(gè)傳輸線上的電平狀態(tài)是這樣的:
圖5
5.曼徹斯特編碼
曼徹斯特編碼方式和NRZI編碼十分相似,只不過(guò)它是利用信號(hào)的跳變方向來(lái)決定數(shù)據(jù)的。在位中間,信號(hào)由高向低跳變表示數(shù)據(jù)0,信號(hào)由低向高跳變表示數(shù)據(jù)1。舉個(gè)圖例吧,若要表示數(shù)據(jù)1001 1010(B),則信號(hào)波形圖如下圖所示:
圖6 曼徹斯特編碼示意圖
曼徹斯特編碼方式也如前面所說(shuō),雖然傳輸了時(shí)鐘信號(hào),但也損失了一部分的帶寬,主要表現(xiàn)在相鄰相同數(shù)據(jù)上。但對(duì)于高速數(shù)據(jù)來(lái)說(shuō),這種編碼方式無(wú)疑是這幾種編碼方式中最優(yōu)的,相比NRZI編碼,曼徹斯特編碼不存在長(zhǎng)時(shí)間信號(hào)狀態(tài)不變導(dǎo)致的時(shí)鐘信號(hào)丟失的情況,所以在這種編碼方式在以太網(wǎng)通信中是十分常用的。
總結(jié)了以上這幾種編碼方式,其實(shí)最終體現(xiàn)的都是一個(gè)問(wèn)題,就是如何將時(shí)鐘信號(hào)傳遞出去,對(duì)于任何數(shù)字通信而言,時(shí)鐘信號(hào)都是首先要考慮的問(wèn)題,因?yàn)橥酵ㄐ旁诮邮斩藢?duì)數(shù)據(jù)進(jìn)行采樣時(shí),都是利用發(fā)送端發(fā)出的時(shí)鐘信號(hào)作為采樣基準(zhǔn)源,只有保證優(yōu)質(zhì)的數(shù)據(jù)信號(hào)和時(shí)鐘信號(hào)被傳送出來(lái),才能夠保證采樣端不會(huì)在亞穩(wěn)態(tài)區(qū)中進(jìn)行采樣而導(dǎo)致數(shù)據(jù)的錯(cuò)誤。以上內(nèi)容都是個(gè)人的淺見,如有不足或不對(duì)之處,歡迎指正!
聯(lián)系客服