FPGA IMPLEMENT 1Gb/10Gb ETH(二)

下面講PMA/PCS具體代碼實現和原理:

PMA字對齊:Serial data must be aligned to symbol boundaries before it can be used as parallel data. Tomake
alignment possible, transmitters send a recognizable sequence, usually called a comma. The receiver
searches for the comma in the incoming data. When it finds a comma,it moves the comma to a byte boundary
so the received parallel words match thetransmitted parallel words.簡而言之,用comma來尋找字邊界並對齊。

xilinx UG476 Figure 4-30 Figure 4-31 這兩個圖比較形象;

還有,可以配置comma pattern,擴展comma,comma 的
mask,還可以用戶使用silde滑窗對齊,Figure4-35講述了comma對齊邊界;

PCS 8b10b encoder/decoder:

編碼表
xilinx UG476 Appendix C 8B/10B Valid Characters 有全部K碼和D碼的編碼表,在FPGA實現時,可以寫入到RAM中,
進行查找表操作;

數據碼,D碼:256個

控制碼,K碼:12個

8B/10B編碼中將K28.1、K28.5和K28.7作爲K碼的控制字符,稱爲“comma”。在任意數據組合中,comma只作爲控制字符出現,而在數據負荷部分不會出現,因此可以用comma字符指示幀的開始和結束標誌,或時鐘修正和數據流對齊的控制字符。

具體在代碼編寫中,一般會有一個tx_k位來指示是D碼還是K碼;

串並轉換:10bit的數據,低位先發;

不一致性Disparity:

有兩種:

1.編碼不一致性Disparity:根據8b/10b編碼表,只有三種情況:

不一致性爲0:5個1,5個0;

不一致性爲+2:6個1,4個0;

不一致性爲-2:4個1,6個0;

2.運行不一致性Running Disparity:簡寫RD,指前面所有已發送數據的不一致性累積產生的狀態,只有兩種狀態:

RD爲1(postive):1比0多;

RD爲-1(negtive):0比1多;

編碼運行規則:If the currently encoded byte produces a symbol of zero disparity, the running
disparity remains unchanged. When the input byte produces a nonzero disparity symbol, the
Encoder will encode the data such that the running disparity is swapped, for example, [+1 + (-
2) = -1] or [-1 +(+2) = +1].根據RD確定選擇哪個編碼,例如XAPP1122的Table9,以D31.1爲例,如果之前的累積不一致性RD爲-1,那麼選擇+2編碼的D31.1,也就是1001110101;

解碼運行規則:以D31.1爲例,接收到的10bit數據,無論是以+2編碼的還是以-2編碼的或者0編碼的,都在編碼表中對應唯一的8bit數據,那就是D31.1=00111111

表達規則:D31.1,1表示高3bit的十進制值,31表示低5bit的十進制值;

爲什麼要8b/10b編碼呢?(轉載,通俗易懂)

由於我們的串行鏈路中會有交流耦合電容,我們知道理想電容的阻抗公式是Zc=1/2πf*C,因此信號頻率越高,阻抗越低,反之頻率越低,阻抗越高。因此上面的情況,當碼型是高頻的時候,基本上可以不損耗的傳輸過去,但是當碼型爲連續“0”或者“1”的情況時,電容的損耗就很大,導致幅度不斷降低,帶來的嚴重後果是無法識別到底是“1”還是“0”。因此編碼就是爲了儘量把低頻的碼型優化成較高頻的碼型,從而保證低損耗的傳輸過去。

非必須功能:

通道綁定,基於elastic buffer,指定一串K碼序列或者使用不容易重複的寬D碼序列(比如8字節D碼序列),作爲對齊標準,在兩個通道的elastic buffer中檢測,當檢測到對齊序列,移動buffer指針,來達到通道對齊的功能,也就是通道綁定,通道同步;時鐘修正CC(clock correction)(不是時鐘恢復CDR)也會用到elastic buffer,一般在這裏加個優先級,時鐘修正和通道綁定哪個優先;

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章