基於Cyclone10LP器件,如何實現串行通信的數據恢復?
對於非源同步的低速串行數據通信場景,會存在通信對端的時鐘頻率相對有偏差的情況,導致數據接收端不能正確的採樣;這時候利用Altera中高端器件的高速收發器或者LVDS serdes中的SOFT-CDR及DPA功能便能解決此問題;但是對於類似Cyclone IV或Cyclone 10LP等中低端器件,既沒有高速收發器,LVDSserdes也不具備SOFT-CDR及DPA功能,所以只能通過我們自行設計邏輯來實現串行數據的恢復。
本設計的技巧是利用接收端的參考時鐘,通過對其相移0°和相移90°的兩個時鐘的上下沿,對接收的數據做8倍過採樣,再通過邏輯來判斷如何選取穩定時鐘域,並以該時鐘域採樣的資料作為可靠數據。
如圖1所示,第一個觸發器由被描述為時域A的CLK上升沿採樣,第二個觸發器由時域B即CLK90的上升沿採樣,第三個觸發器由時域C即CLK下降沿採樣,第四個觸發器由時域D即CLK90的下降沿採樣。
當然,為了消除亞穩態,光使用一級採樣是肯定不夠的,需要對這四個觸發器分別做四級採樣來消除亞穩態,如圖2所示:
我們按照圖2進行觸發器逐級採樣後,命名第三級觸發器分別為AZ(2),BZ(2),CZ(2),DZ(2);命名第四級觸發器分別為AZ(3),BZ(3),CZ(3),DZ(3)。
數據經過四個時鐘域分別四級採樣之後,再做一個組合邏輯,如圖3:
按照圖3依次做異或、與/與非邏輯後,經過觸發器依次得到數據AAP,AAN,BBP,BBN,CCP,CCN,DDP,DDN;
之後就需要進行可靠時鐘域的判決,即挑選採樣數據最穩定的時鐘域:
在實際情況中,我們可能會遇到:例如資料發送端時鐘頻率是401MHz,而本地採樣時鐘頻率是400MHz,或相反發送端是400MHz,而本地是401MHz的情況;通過仿真發現在此情形下,判決的結果會進行週期性的變化,即一段時間後判決為穩定的時鐘域可能從D變為A,但這並沒有關係,按照其判決為最可靠的時鐘域去採樣數據,最後得到的實際資料一定是正確的。
由於可靠時鐘域的判決結果會進行變化,我們需要設計一小段邏輯來進行數據篩選,如圖4:
本設計的主要目的就是為了找到那個能穩定採樣數據的最可靠時鐘域,即使這個時鐘域可能因通信對端時鐘頻偏差而動態變化,最後基於這個時鐘域的採樣數據都是穩定可靠的。目前我在某工業客戶的硬體基礎上,基於10CL010YU256C8G和10CL016YU256C8G驗證資料串行通信,長時間掛機測試偽隨機碼通信,其誤碼率為0;該客戶相關產品已經量產。當然,為了更加可靠的通信品質,我們在實際產品中也會加入8B10B編解碼模組。
更多資訊: