高速串行通信經(jīng)常需要用到 XILINX FPGA 內(nèi)部專用的 SERDESE 模塊來(lái)實(shí)現(xiàn)串并轉(zhuǎn)換。LVDS 配合 SERDESE可以充分發(fā)揮 FPGA 的高速接口優(yōu)勢(shì)。SERDESE 分輸入和輸出,輸入采用 ISERDESE, 輸出采用 OSERDESE,OSERDESE 的使用要比 ISERDESE 簡(jiǎn)單。
本文涉及到一些重要原語(yǔ)概念,包括 idelay 延遲原語(yǔ),IDELAYCTRL原語(yǔ), ISERDESE 、OSERDESE。其中很關(guān)鍵一點(diǎn)時(shí)使用 idelay 延遲模塊以及 ISERDESE 原語(yǔ)中 BITSLIP 功能,實(shí)現(xiàn)比特流的時(shí)鐘對(duì)齊,以及數(shù)據(jù)流的位流順序?qū)R。XILINX FPGA 高速通信中經(jīng)常會(huì)用到 idelay模塊對(duì)信號(hào)比特流做細(xì)微的時(shí)序調(diào)整。
參考文檔包括:官方手冊(cè)u(píng)g471,xapp585,第三方米聯(lián)客教程。
1、IDELAYCTRL模塊

2、IDELAY模塊

3、IDELAY模塊工作時(shí)序


4、OSERDES模塊

OSERDES模塊數(shù)據(jù)傳輸方式支持SDR,DDR兩種,數(shù)據(jù)位寬支持級(jí)聯(lián)以擴(kuò)展到14比特。


由上圖可知,OSERDES串行輸出的數(shù)據(jù)流與原始并行數(shù)據(jù)比較,大小端是相反的。
5、ISERDES模塊
ISERDESE2 在 SDR 模式下數(shù)據(jù)轉(zhuǎn)換的位寬可以為 2、 3、 4、 5、 6、 7、 8bit,在 DDR 模式時(shí),數(shù)據(jù)轉(zhuǎn)換位寬為 4、 6、 8bit, 2 個(gè) ISERDESE2 級(jí)聯(lián)使用, DDR 模式可以支持 10、 14bit。如下圖所示通過(guò) 2 個(gè) ISERDESE2 級(jí)聯(lián)輸出14bit 位寬數(shù)據(jù)接口。

6、Bitslip數(shù)據(jù)對(duì)齊功能


7、Serdes時(shí)鐘源設(shè)計(jì)要求

二、源碼解析
1、SDR ISERDESE 時(shí)鐘恢復(fù)
ISERDESE 的作用是和 OSERDESE 相反的過(guò)程,但是比 OSERDESE 稍微復(fù)雜一些。ISERDESE 代碼需要實(shí)現(xiàn)自動(dòng)找到最佳的數(shù)據(jù)采樣點(diǎn), 自動(dòng)完成數(shù)據(jù)對(duì)其,其中的加入了 IDELAY 和 BITSLIP 功能的使用,以及一些狀態(tài)機(jī)代碼。筆者下面根據(jù) XAPP585 中給出的 demo 源碼分析。
1.1使用IDELAY之前,需配置IDELAYCTRL。

1.2 計(jì)算比特流最大速率參數(shù)
官方源碼仿真使用的并行時(shí)鐘為80M,SDR模塊采用1_to_7串并轉(zhuǎn)換,則Serdes工作速率為560Mbps,由此可以得到Idelay調(diào)節(jié)Tap最大的步數(shù)。

設(shè)置 bit_rate_value=0560,那么代表了 serdes 的速率是 560Mbps,根據(jù)下面代碼得出 bt_val=5’h17(bt_val=5’d23)。由上文可知, idelay 的參考時(shí)鐘是 200MHZ, 那么每個(gè)延遲節(jié)拍是 78ps,則23*78ps= 1,794 ps = 557 Mb/s.最接近 560Mbps。
1.3 如何實(shí)現(xiàn)時(shí)鐘恢復(fù)時(shí),差分時(shí)鐘信號(hào)正負(fù)相位對(duì)齊
查看源碼可知,SERDES工作速率為560Mbps參數(shù),就可以選出 bit_rate_value 為 0557, 所以 bt_val 為 17h。先取出 bt_val 的中間值,即17h 的中間值是 0Bh。把差分時(shí)鐘n 的延遲時(shí)間設(shè)定為0Bh,把差分時(shí)鐘p的初始延遲設(shè)定為17h,然后保持差分時(shí)鐘n 的延遲時(shí)間不變,每次調(diào)節(jié)1個(gè)Tape,用于差分時(shí)鐘p和差分時(shí)鐘n的反向 進(jìn)行相位對(duì)比,直到二者相位差為零。這個(gè)細(xì)節(jié)就是實(shí)現(xiàn)差分時(shí)鐘信號(hào)對(duì)齊的核心,看代碼時(shí)很容易忽略。我在第一遍時(shí)就犯了這個(gè)錯(cuò)誤,導(dǎo)致始終不明白所以然。


1.4 Bitslip進(jìn)行比特流位順序調(diào)節(jié)

這段代碼不復(fù)雜,Bitslip的調(diào)節(jié)原理見(jiàn)上文,也容易理解。
1.5 差分時(shí)鐘正負(fù)信號(hào)時(shí)序補(bǔ)償

需要把上述代碼段看明白就知道補(bǔ)償原理了。
通過(guò)控制每次減 1 個(gè) tap,減少 idelay 延遲,并且通過(guò) ISERDESE 檢測(cè)時(shí)鐘的跳變。當(dāng)?shù)谝淮翁儼l(fā)生的時(shí)候,代表檢測(cè)到了時(shí)鐘的跳變沿,假設(shè)這個(gè)時(shí)候 bt_val=05h,05h<0Bh 所以計(jì)算出時(shí)鐘的 0BH+05H =10H。
如果恢復(fù)出的時(shí)鐘信號(hào)不是目標(biāo)Pattern值 1100001 或者 1100011,就需要用到 Bslip 調(diào)整,每次設(shè)置 Bslip 調(diào)整一次。

仿真結(jié)果如上圖的箭頭所示,接收的 clk_data 是 7bit 時(shí)鐘數(shù)據(jù),通過(guò)調(diào)整 c_delay_in 值調(diào)整 idelay每次減 1 個(gè) tap,直到 clk_data 發(fā)生改變,可以看到這個(gè)值是 0b 整好是和中間值相等。這個(gè)時(shí)候狀態(tài)機(jī) state2 也會(huì)進(jìn)入狀態(tài) 1,這個(gè)時(shí)候計(jì)算出 c_delay_in_target=0,這個(gè)就是我們需要延遲的時(shí)間,可以看到需要延遲的時(shí)間為 0,這種情況非常理想,如果實(shí)際程序跑起來(lái)一般不會(huì)是 0,之后進(jìn)入狀態(tài) 2。在狀態(tài) 2 中繼續(xù)調(diào)整 c_delay_in 直到和 c_delay_in_target 相等,如下圖,可以看到 clk_data=1100001b 是占比3:4 的時(shí)鐘就恢復(fù)出來(lái)了。
總結(jié):
本篇文檔通過(guò)學(xué)習(xí)米聯(lián)客的教程,并結(jié)合UG471的學(xué)習(xí),XAPP585的源碼學(xué)習(xí),來(lái)不斷加深SERDES的工作原理及實(shí)現(xiàn)細(xì)節(jié),并記錄一下自己學(xué)習(xí)過(guò)程,仿真有助于理解源碼。
審核編輯 :李倩
-
DDR
+關(guān)注
關(guān)注
11文章
761瀏覽量
69566 -
源碼
+關(guān)注
關(guān)注
8文章
689瀏覽量
31514 -
SerDes
+關(guān)注
關(guān)注
8文章
236瀏覽量
36984
原文標(biāo)題:XAPP585 - Serdes 1_to_7_sdr 解讀
文章出處:【微信號(hào):Hack電子,微信公眾號(hào):Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
這個(gè)電路干啥用的呢?它的工作原理是怎么樣?
433M無(wú)線模塊的工作原理和距離
探索SN65LVDS95 - EP LVDS SERDES發(fā)射器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)
超景深顯微鏡的工作原理與測(cè)試影響因素
智多晶SerDes 2.0 IP介紹
解析基帶和射頻的工作原理
車載SerDes產(chǎn)業(yè)起飛!國(guó)產(chǎn)新品密集炸場(chǎng)
晶體管光耦的工作原理
語(yǔ)音控制模塊工作原理
電壓傳感器是什么?工作原理是哪樣
FLASH的工作原理與應(yīng)用
SERDES的工作原理及實(shí)現(xiàn)細(xì)節(jié)
評(píng)論