xilinx 高速收發器Serdes深入研究

2021-08-07 13:21:55 字數 2255 閱讀 4209

傳統的源同步傳輸,時鐘和資料分離。在速率比較低時(<1000m),沒有問題。

在速率越來越高時,這樣會有問題

由於傳輸線的時延不一致和抖動存在,接收端不能正確的取樣資料,對不准眼圖中點。

然後就想到了從資料裡面恢復出時鐘去取樣資料,即cdr

這樣就不存在延遲不一致的情況,有輕微的抖動也不會影響取樣(恢復的時鐘會隨著資料一起抖動)。

這樣還有問題,收發兩端必須共地,但往往很難實現。

於是取樣差分訊號傳輸,為了防止共模電壓在接收端導致電流過大,使用電流驅動模式。看到接收端有電容進行交流耦合,隔直流。這樣又帶來乙個問題,需要dc平衡。所以有了下面另乙個原因。

agc自動增益控制需要交流分量才能實現放大

在serdes上面的高速序列流在接收端需要重新串並轉化成多字並行,怎麼找到字的邊界進行對齊呢?

這就需要乙個特殊的序列,這就是comma碼。

傳輸過程中需要的一些控制,最好不要和資料衝突了,這就是k碼。

基於以上四個原因,就有了8b10b,64b66b的出現。

8b10b編碼一句話概括起來就是把8bit的資料變成10bit的資料,其中所有1或0的個數不會超過6個,並且連續的1或0的個數不會超過4個。這樣原本1024的漢明空間編碼後就大大減小了。其中有256個data碼和12k碼控制碼。這樣資料和控制碼不會重合。

其中k28.1,k28.5,k28.7可以作為分隔碼,也叫comma碼,用於接收端在序列的資料流中找到位元組邊界。常用的k28.5即0xbc。因為正常傳輸的資料也可能有0xbc,怎麼區分呢?是有一根單獨的控制線,tx_is_k在傳輸k碼時拉高,在傳資料時拉低,去控制8b10b的編碼模組到底是編碼成資料還是控制k碼。

k28.5,0xbc,+0101_111100,-1010_000011; 為檢測位元組分割。

使用其它k碼,作為幀開始,幀結束,時鐘修正和資料對齊。

在資料率比較高的時候,外部位寬可能是2字(16位)或者4字(32位)。這是如果收發雙方不約定好在高低哪個字傳送comma碼,這時是可以檢測字邊界,但接收端就會出現高低位元組翻轉的情況。在任意對於單comma的資料對齊,選擇偶數位元組對齊。傳送的時候 0x5abc->2』b01。

也可以選擇傳送組合的comma碼,就是把np的comma拼接起來傳送,這樣接收端就檢測16bit的雙字邊界。也可以避免上面的情況出現。傳送的時候0xbcbc->2』b11

注意:decode valid comma only不要選,因為還可能傳送其他的k碼用於控制。反正8b10b是用的收發器硬核的資源,不用白不用。

1.「000」:正常模式

2.「001」:近端pcs環迴

3.「010」:近端pma環迴

4.「100」:遠端pma環迴

5.「110」:遠端pcs環迴

注意xilinx例化的example的檔案中配置的環迴是預留環迴介面的意思,仍然需要另外手動配置。

在monitor data_valid模組,是用的frame_check的正確的訊號,校驗失敗會導致復位gtrxreset。可以不用這個反饋,直接置1。需要手動改一下。

限於篇幅,單獨列出

限於篇幅,單獨列出

光纖收發器

注 1.左上角 亮時代表1000m速率 2.右上角 亮時代表100m速率 3.左中間 亮時代表已接上尾纖,閃爍代表正在傳輸資料 4.右中間 亮時代表已接上網線,閃爍代表正在傳輸資料 5.左下角 亮時代表已接入電源線 6.右下角 亮時代表全雙工速率 滅時代表半雙工 由於我們常使用的網線 雙絞線 的最大...

簡易檔案收發器

簡易檔案收發器 實現的功能是 客戶端向伺服器傳送檔名,伺服器接受並判斷是否存在此檔案,若不存在則向客戶端反饋不存在,若存在則反饋檔名及大小 位元組數 並傳送,由客戶端接收.主要理論 運用了socket網路輸入輸出流,使伺服器和客戶端都建立了記憶體與網路的交流 運用了file檔案輸入輸出流,同樣還它們...

串並轉換收發器 千兆光纖收發器調整措施

千兆光纖收發器 又名光電轉換器 是一種快速乙太網,其資料傳輸速率達1gbps,仍採用csma cd的訪問控制機制並與現有的乙太網相容,在佈線系統的支援下,可以使原來的快速乙太網平滑公升級並能充分保護使用者原來的投資。那麼,千兆光纖收發器的調整措施有哪些呢?接下來我們就一起來詳細看看吧!一 降低衰減值...