引言
8 b/10 b是目前許多高速串行總線采用的編碼機(jī)制,如USB 3.0,1394b,Serial ATA,PCI Express,Infini-band,F(xiàn)iber Channel,RapidIO等總線或網(wǎng)絡(luò)。8 b/10 b編碼方式最初由IBM公司于1983年發(fā)明并應(yīng)用于ESCON(200M互連系統(tǒng)),發(fā)表Al Widmet和Peter Franaszek IBM刊物的“研究與開發(fā)”。8 b/10 b編解碼之所以能得到廣泛的運(yùn)用,主要有以下優(yōu)點(diǎn):采用嵌入式時(shí)鐘,可保持DC平衡;能夠更加有效地檢測(cè)錯(cuò)誤;隔離數(shù)據(jù)碼元和控制碼元。
為了在USB 3.0中實(shí)現(xiàn)數(shù)據(jù)的8 b/10 b編解碼,采用了查找表法和組合邏輯相結(jié)合的方法,把8b/10b編解碼分解成5 b/6 b編解碼和3 b/4 b編解碼,用Verilog HDL語言實(shí)現(xiàn)了算法的描述,并通過了Modelsim仿真,然后在FPGA上實(shí)現(xiàn)了具體的硬件電路。采用500 MHz的時(shí)鐘信號(hào),經(jīng)過測(cè)驗(yàn)滿足了USB 3.0的傳輸速率5 Gb/s。該創(chuàng)新方法使用了少量邏輯,實(shí)現(xiàn)了8 b/10 b編解碼器,并且滿足USB 3.0高速數(shù)據(jù)傳輸?shù)囊蟆?/p>
1 USB 3.0中的8 b/10 b編解碼原理
在USB 3.0分層結(jié)構(gòu)中,發(fā)送端先對(duì)數(shù)據(jù)或者控制字(K)加擾,然后把加擾后的8 b數(shù)據(jù)編碼成10b發(fā)送出去;接收端先把接收到的10b數(shù)據(jù)進(jìn)行解碼得到8 b數(shù)據(jù),然后再解擾得到原始數(shù)據(jù)。
8 b/10 b編碼包含對(duì)256個(gè)數(shù)據(jù)字符和12個(gè)控制字符的編碼。數(shù)據(jù)字符和控制字符分別用Dx,y和Kx,y表示,其中x表示與8 b的低5位(EDCBA)對(duì)應(yīng)的十進(jìn)制數(shù)值;y表示與8 b的高3位(HGF)對(duì)應(yīng)的十進(jìn)制數(shù)值。發(fā)送端在編碼時(shí),根據(jù)編碼表將低5位變成6位,高3位變成4位。編碼完成后,將10 b的并行字符轉(zhuǎn)換成串行發(fā)送出去。接收端在解碼時(shí)先進(jìn)行串并轉(zhuǎn)換得到10 b字符,再將該字符分解成6 b和4 b,根據(jù)相應(yīng)編碼表看是否有效,最后完成解碼。編解碼轉(zhuǎn)換流程如圖1所示。
?
不平衡度disp(disparity)表示編碼后1個(gè)碼字中“1”數(shù)目與“0”的數(shù)目差。“1”用+1表示,“0”用-1表示,碼字中的所有“+1”與“-1”之和就是disp。8 b/10 b編碼的disp取3種狀態(tài):“+2”(6個(gè)1與4個(gè)0),“0”(5個(gè)0與5個(gè)1),“-2”(6個(gè)0與4個(gè)1)。而運(yùn)行不一致RD(Running Disparity)是一個(gè)二進(jìn)制參數(shù),只有正、負(fù)2種狀態(tài),用于編碼模式控制。在8 b/10 b編碼表中,10 b字符分為2種碼表(RD-和RD+)。編碼過程中,通過對(duì)RD值正負(fù)的判斷來選擇對(duì)應(yīng)碼表,如果當(dāng)前RD為負(fù)(RD-),編碼器會(huì)在RD-編碼表中選擇對(duì)應(yīng)值輸出,并且檢測(cè)對(duì)應(yīng)輸出的10 b值的disp,如果disp=0,則RD不變保持RD-,否則RD值變?yōu)镽D+;如果當(dāng)前RD為正(RD+),則在RD+編碼表中選擇對(duì)應(yīng)值輸出,并且檢測(cè)輸出值對(duì)應(yīng)的disp,如果disp=0,則RD不變保持RD+,否則RD變?yōu)樨?fù)RD-??傊赿isp為正或者負(fù)時(shí),RD發(fā)生交替變換,這種方法是為了使0和1分布更均勻,減小差分信號(hào)的直流分量。
2 8 b/10 b編碼器的設(shè)計(jì)
8b/10b編碼器是把8 b數(shù)據(jù)輸入拆成低5位和高3位分別進(jìn)行5 b/6 b和3 b/4 b編碼,根據(jù)編碼表執(zhí)行編碼。因?yàn)槠渲杏行┨厥獾?b/4 b編碼,所以需要一個(gè)特殊3 b/4 b編碼模塊。編碼后數(shù)據(jù)通過RD控制模塊選擇輸出,并且把此時(shí)的RD狀態(tài)反饋給下一輪編碼。對(duì)于8 b控制輸入,由于K控制編碼只有12種有效,所以需要一個(gè)對(duì)無效K碼的識(shí)別模塊。因此,編碼器分為5個(gè)模塊:5 b/6 b編碼、3 b/4 b編碼、特殊3 b/4 b編碼、無效K碼檢測(cè)、RD_controller,前4個(gè)部分在RD_controller的控制下進(jìn)行并行編碼,如圖2所示。圖中,kin為8 b控制輸入,data_in為8 b數(shù)據(jù)輸入。由于USB 3.0傳輸速度為5 Gb/s,編碼器clk為500MHz。
?
5 b/6 b編碼模塊、3 b/4 b編碼模塊對(duì)輸入的8 b數(shù)據(jù)輸入分為低5位和高3位進(jìn)行并行編碼,輸出6 b和4 b數(shù)據(jù)構(gòu)成10 b編碼,而輸出disp_6b,disp_4b是6 b和4 b數(shù)據(jù)的不平衡度。
由于在8 b/10 b轉(zhuǎn)換表中,8 b數(shù)據(jù)輸入高3位為“111”、低五位分別為“01011”,“01101”,“01110”,“10001”,“10010”,“10100”時(shí),輸出的4 b是特殊情況,特殊3 b/4 b編碼模塊就是完成對(duì)這幾種特殊情況輸出,輸出sp_4b_RDN和sp_4b_RDP是特殊編碼的不平衡度。
當(dāng)8 b輸入是控制K碼時(shí),控制碼只有12種是有效的,無效K碼檢測(cè)模塊就是檢測(cè)輸入的控制碼是否有效,如果無效輸出invalid_k=1,如果有效則輸出invalid_k=0。
RD控制模塊除了將編碼后數(shù)據(jù)選擇輸出,主要是根據(jù)disp_6b,disp_4b,sp_4b_RDN和sp_4b_RDP來跟新當(dāng)前RD值,并反饋到下一輪編碼的RD輸入,保持差分信號(hào)傳輸?shù)闹绷髌胶狻?/p>
3 8 b/10 b解碼器的設(shè)計(jì)
8b/10b解碼器接收到的數(shù)據(jù)是10 b,根據(jù)8 b10 b解碼原理,把10 b數(shù)據(jù)分開為低6 b和高4 b,然后分別對(duì)低6位和高4位進(jìn)行解碼,劃分為2個(gè)模塊6 b/5 b解碼、4b/3b解碼。這些10位的數(shù)據(jù)分為特殊K字符和有效數(shù)據(jù)字符,特殊K字符是控制字符。解碼器結(jié)構(gòu)如圖3所示,分為4個(gè)模塊:6 b/5 b解碼,4 b/3 b解碼,無效碼檢測(cè)、不平衡度檢測(cè)。
?
6b/5b解碼和4b/3b解碼模塊根據(jù)編碼表,選擇輸入10 b數(shù)據(jù)對(duì)應(yīng)輸出5 b或3 b。當(dāng)高4位為“1001”,“0110”,“1010”,“0101”時(shí),數(shù)據(jù)字符和控制字符其對(duì)應(yīng)的輸出是不同的;并且高4位為“0001”,“1110”時(shí)也是特殊情況。輸入10 b數(shù)據(jù)中有1 024個(gè)數(shù)據(jù),有440個(gè)有效數(shù)據(jù)字符,24個(gè)控制字符,還有560個(gè)錯(cuò)碼。當(dāng)輸入為錯(cuò)碼時(shí),無效碼檢測(cè)模塊會(huì)檢測(cè)出錯(cuò),輸出1個(gè)errdetect。不平衡度檢測(cè)模塊主要是根據(jù)前面模塊輸出的disp和當(dāng)前的disp(current-disp),判斷解碼是否發(fā)生錯(cuò)誤。當(dāng)disp_4 b=0時(shí),disp_6 b!=0,則current_disp應(yīng)該等于disp_6 b,如果不等則發(fā)生錯(cuò)誤。即要保持不平衡度在“+2,0,-2”三個(gè)值中變化,超出則發(fā)生編碼錯(cuò)誤。
4 仿真分析
本文完成了8 b/10 b編解碼器的RTL設(shè)計(jì),并在Modelsim上進(jìn)行功能仿真。
?
圖6是編解碼聯(lián)調(diào)的仿真波形,可以看出輸入的數(shù)據(jù)經(jīng)過編碼器編碼成10 b的數(shù)據(jù),然后在經(jīng)過解碼器所還原的數(shù)據(jù)跟之前輸入的數(shù)據(jù)一樣,說明編解碼功能正確,并且最高的工作頻率能夠達(dá)到500 MHz,滿足USB 3.0的數(shù)據(jù)傳輸速度。
5 結(jié)語
本文采用的分塊編解碼方法,使用了少量的邏輯完成了8 b/10 b編解碼器設(shè)計(jì)。該編解碼器在USB 3.0數(shù)據(jù)傳輸中能夠得到很好的運(yùn)用,滿足了USB 3.0高速數(shù)據(jù)傳輸?shù)囊蟆?/p>
評(píng)論
查看更多