隨著半導(dǎo)體技術(shù),特別是 FPGA 的發(fā)展,單片芯片的處理能力越來越強(qiáng)。現(xiàn)在單片的處理能力都在 1Tbit 以上。而要處理這么多的數(shù)據(jù),單靠原來的 LVDS, LVPECL 已經(jīng)無法滿足芯片接口吞吐量的要求。所以,如今越來越多的應(yīng)用都用到高速 SERDES。
XILINX 的 SERDES 作為業(yè)界翹楚,越來越多地被客戶接受并廣泛應(yīng)用。而隨之而來設(shè)計(jì)、調(diào)試問題,也是讓客戶感到害怕的問題。特別是客戶容易對(duì)高速 SERDES 犯怵,碰到問題又無從著手,導(dǎo)致進(jìn)度受阻,壓力倍增。
這是我著手總結(jié) SERDES 設(shè)計(jì)調(diào)試的初衷。
這次主要講 SERDES 復(fù)位設(shè)計(jì)。
復(fù)位的作用
眾所周知,現(xiàn)在主流的 FPGA 上實(shí)現(xiàn)的都是時(shí)序邏輯。時(shí)序邏輯有一個(gè)特點(diǎn)就是前面的狀態(tài)會(huì)影響到后面的狀態(tài)。所以在這種應(yīng)用里,初始狀態(tài)的確定是整個(gè)設(shè)計(jì)里非常重要的一個(gè)環(huán)節(jié)。復(fù)位就是用來初始化邏輯狀態(tài)用的。
對(duì)于 SERDES,根據(jù)不同的應(yīng)用,其時(shí)鐘方案是不同的。對(duì)此,SERDES 的狀態(tài),特別是BUFFER 的狀態(tài)會(huì)受到很大的影響。由于 BUFFER 的讀寫時(shí)鐘有效穩(wěn)定的時(shí)間不同,大致會(huì)引起以下 2 種情況:
1. BUFFER 上下溢出,使得輸入輸出誤碼;
2. 多通道應(yīng)用里,通道間引入偏移,使得各路通道綁定失敗。
所以復(fù)位設(shè)計(jì)必須小心,特別需要和時(shí)鐘方案相匹配,才能給可靠的設(shè)計(jì)打下良好的基礎(chǔ)。
7 系列 GTX 的時(shí)鐘結(jié)構(gòu)
上面說到,復(fù)位應(yīng)該和時(shí)鐘方案相匹配,所以在這里簡單介紹一下 7 系列 GTX/GTH 的時(shí)鐘結(jié)構(gòu)。
7 系列 SERDES 是以 QUAD 為單位的。在一個(gè) QUAD 里,有
a) GTX/GTH: 一個(gè) QUAD 里有 4 個(gè) SERDES;
b) 2 個(gè)參考鐘:它們可以連到任意一個(gè) PLL 上。而且可以給上下相鄰的 QUAD 提供參考鐘;
c) CPLL:這是每路 GTX/GTH 都有的 PLL。這個(gè) C 是指 Channel;
d) QPLL:每個(gè) QUAD 內(nèi)的 SERDES 共享的 PLL。這個(gè) Q 是指 QUAD。
QPLL 和 CPLL 可以供到每個(gè) SERDES 的發(fā)(TX)和收(RX)。在 SERDES 里有TX/RXSYSCLKSEL[1:0]端口選擇使用哪個(gè)時(shí)鐘源。
復(fù)位設(shè)計(jì)的案例
下面,根據(jù)不同的時(shí)鐘方案,會(huì)列出一些復(fù)位的方法。
首先需要提醒的一點(diǎn)是:對(duì)于 7 系列的 SERDES, bit 文件下載完(CONFIGDONE 拉高)后的500ns 時(shí)間內(nèi)的復(fù)位是無效的。SERDES 需要的復(fù)位是脈沖。所以 FPGA 配置完成后 500ns 后復(fù)位信號(hào)才能拉高。
如果在 500ns 之前就拉高,那是無效的。需要在后面在有一個(gè)正脈沖才行。
關(guān)于這個(gè)問題,在 XINLIX 官網(wǎng)上有 AR43482 作說明。
另外相對(duì)于以前的 SERDES,在 7 系列 SERDES 里多了 2 個(gè)信號(hào):TXUSERRDY 和 RXUSERRDY。
這 2 個(gè)信號(hào)是用來控制何時(shí)進(jìn)行 PCS 復(fù)位的。
SERDES 的順序復(fù)位是指 GTXTXRESET 或 GTXRXRESET 有復(fù)位脈沖時(shí),SERDES 會(huì)進(jìn)行從 PMA一直到 PCS 的復(fù)位,最后把 TXRESETDONE 或 RXRESETDONE 拉高。
PMA 和 PCS 復(fù)位涵蓋的范圍見下表
整個(gè)復(fù)位順序都是從 PMA 到 PCS 的。具體流程可以參考 UG476。
在完成 PMA 復(fù)位后進(jìn)入 PCS 復(fù)位是,TXUSERRDY 和 RXUSERRDY 就是開關(guān)。只有當(dāng)它們?yōu)楦邥r(shí)才能進(jìn)入 PCS 復(fù)位,繼而完成整個(gè) SERDES 的復(fù)位。TXUSERRDY 和 RXUSERRDY 的含義是用戶鐘 TXUSRCLK/TXUSRCLK2 和RXUSRCLK/RXUSRCLK2 都穩(wěn)定了。這個(gè)時(shí)候可以進(jìn)行 PCS復(fù)位了。
TX 復(fù)位案例
一、 TXOUTCLKSEL = TXOUTCLKPMA
這種情形下,TXOUTCLK 的頻率是(LINE RATE)/(INTERNAL DATAWIDHT),它會(huì)隨著線速度的變化而變化。
對(duì)于 7 系列 SERDES,內(nèi)部位寬可以有 16/20 bit (即 2 字節(jié))和 32/40bit(即 4 字節(jié))2中選擇。跟邏輯接口的外部位寬有 2、4、8 字節(jié) 3 種選擇。由于邏輯可以跑到 368MHz以上。所以對(duì)于大多數(shù)的應(yīng)用,TXUSRCLK/TXUSRCLK2 是可以同頻的。此時(shí),其時(shí)鐘框圖就會(huì)如下:
這種復(fù)位方案里,有一些要求:
? SERDES 工作在順序復(fù)位模式下(工具產(chǎn)生的代碼默認(rèn)模式)
? RESETOVRD = 1’b0
? GTRESETSEL = 1’b0
? QPLLRESET 或 CPLLRESET 需要脈沖復(fù)位
? 至少一個(gè)參考鐘周期
? QPLLLKDET 或 CPLLLKDET 的上升沿上產(chǎn)生 GTXTXRESET 脈沖,啟動(dòng) SERDES 進(jìn)入順序復(fù)位
? 同時(shí),把 QPLLLKDET/CPLLLKDET 連到 TXUSERRDY
? 最好能延時(shí) 2~3us 以保證 TXOUTCLK 穩(wěn)定。
? 在 TXRESETDONE 的第一個(gè)上升沿做 TXPCSRESET 的復(fù)位
? 對(duì)單路應(yīng)用不需要這個(gè)復(fù)位。
? 對(duì)于多路需要對(duì)齊輸出的應(yīng)用,需要把所有 TXRESETDONE 都拉高后做TXPCSRESET 復(fù)位以減少各路的輸出偏移
二、TXOUTCLKSEL = TXOUTCLKPMA,用到 MMCM
這個(gè)和上面一個(gè)的差別就是需要用到 MMCM。由于 MMCM 的輸入是 TXOUTCLK,必須等到 TXOUTCLK 穩(wěn)定后才能釋放復(fù)位;而 MMCM 給 SERDES 提供 TXUSRCLK 和TXUSRCLK2,所以 TXUSERRDY 必須在 MMCM 穩(wěn)定后才能拉高。
同樣,對(duì)于多通道應(yīng)用,需要在所有 TXRESETDONE拉高后給一個(gè) TXPCSRESET 脈沖,這樣可以減少發(fā)送數(shù)據(jù)通道間的偏移。
三、TXOUTCLKSEL = TXPLLREFCLK_DIV1/2
這種應(yīng)用和第一種不同之處在于TXOUTCLK的時(shí)鐘來源不同,這里是來自于參考鐘。所以它會(huì)在 QPLL 鎖定之前就穩(wěn)定下來。當(dāng)然我們還是可以借用第一種復(fù)位方法。只是QPLLLKDET/CPLLLKDET 送到 TXUSERRDY 時(shí)不需要延時(shí)去等待內(nèi)部時(shí)鐘穩(wěn)定。
四、TXOUTCLKSEL = TXPLLREFCLK_DIV1/2,用到 MMCM同樣,這種應(yīng)用可以參考第二種。
當(dāng)然由于 MMCM 的輸入時(shí)鐘是參考鐘,所以它的復(fù)位釋放也不需要等待 PLL 鎖定。所以我們也可以用下面的復(fù)位方法
當(dāng)然由于 MMCM 復(fù)位要求,QPLLRESET/CPLLRESET 的脈寬需要大于 3 個(gè)參考鐘周期。
五、TXBUFFER BYPASS 情形
對(duì)于 CPRI 等有延時(shí)精度要求的應(yīng)用,需要把 TXBUFFER 旁路。這時(shí)需要在上面的復(fù)位之外還要有相位對(duì)齊電路的復(fù)位。
要能進(jìn)行相位對(duì)齊,對(duì)時(shí)鐘有一定要求:
1. 同源同頻。這里只是做相位對(duì)齊,頻率必須相同;
2. 時(shí)鐘穩(wěn)定。只有時(shí)鐘穩(wěn)定后才能進(jìn)行相位對(duì)齊操作。
所以相對(duì)于前面使能 TXBUFFER 的應(yīng)用的復(fù)位,在 TXRESETDONE 拉高后,做一次相位對(duì)齊操作就可以了。
這里需要注意的一點(diǎn)是,TXDLYSRESET 的脈寬必須小于 50ns。
整個(gè)復(fù)位的波形圖如下
和前面不同的是,這里用 TXPHALIGNDONE 作為后續(xù)邏輯的復(fù)位信號(hào)。這是因?yàn)檫@個(gè)信號(hào)拉高了,表示 SERDES 的初始化已經(jīng)完成,可以工作了。而前面的幾種應(yīng)用,TXRESETDONE 的拉高是 SERDES 能夠正常發(fā)送數(shù)據(jù)的標(biāo)志。
RX 復(fù)位設(shè)計(jì)
這里只包括用到 RXOUTCLK 時(shí)的復(fù)位。如果是用 TXOUTCLK 作為 RXUSRCLK/RXUSRCLK2時(shí)鐘源的情形,可以參考 TX 復(fù)位設(shè)計(jì)部分。
RX 的結(jié)構(gòu)比 TX 要復(fù)雜。相對(duì)應(yīng)的復(fù)位也會(huì)復(fù)雜一些。主要原因是 RXOUTCLK 的源頭可能是 CDR 送出的恢復(fù)鐘。也就是說,需要 CDR 穩(wěn)定工作后才能有穩(wěn)定的 RXOUTCLK 輸出。所以后續(xù)的復(fù)位需要與此相配。
CDR 在有信號(hào)送入時(shí),會(huì)跟蹤上輸入信號(hào)的頻率、相位;當(dāng)沒有信號(hào)送入時(shí),它會(huì)慢慢鎖到本地時(shí)鐘上,直到又有信號(hào)送入。這個(gè)不是躍變的過程,而是慢慢變化的。這里不會(huì)引入恢復(fù)時(shí)鐘的跳變。
一、RXOUTCLKSEL = RXOUTCLKPMA
這種情形下,RXOUTCLK 的源頭就是 CDR 的恢復(fù)鐘。
由于初始化復(fù)位時(shí),我們還是用 QPLLLKDET/CPLLLKDET 作為 RXUSERRDY 的輸入,這樣在 PLL 鎖定后可以完成 PMA/PCS 的初始化。
但是在工作起來后,CDR 會(huì)鎖到輸入信號(hào)上。在跟蹤過程中,恢復(fù)鐘(也就是RXBUFFER 的寫時(shí)鐘)會(huì)有個(gè)漸變的過程。這個(gè)可能會(huì)導(dǎo)致 RXBUFFER 溢出。所以用RXBUFSTATUS[2]送到 RXBUFRESET。這樣在 RXBUFFER 溢出時(shí)復(fù)位 RXBUFFER。
對(duì)于多通道應(yīng)用,也是需要在所有 RXRESETDONE 都拉高時(shí)復(fù)位 RXBUFFRESET 一下,這樣可以減少各路的偏移。當(dāng)然,任意一路有前面說到的溢出,也需要復(fù)位所有的RXBUFFER。
二、RXOUTCLKSEL = RXOUTCLKPMA,且用到 MMCM
這個(gè)情形下,我們需要注意的就是 MMCM/PLL 輸入時(shí)鐘源于 CDR 恢復(fù)時(shí)鐘并給RXPCS 提供用戶時(shí)鐘。所以需要
1. MMCM 必須在 PLL 鎖定后延時(shí)一段時(shí)間釋放復(fù)位,這其中的時(shí)間就是 CDR 鎖定的時(shí)間。
2. MMCM 的 LOCK 信 號(hào) 控 制 RXUSERRDY , 以 保 證 RXPCS 的 復(fù) 位 是 在RXUSRCLK/RXUSRCLK2 都穩(wěn)定后釋放的。
這種應(yīng)用里,如果外部輸入信號(hào)丟失,比如拔掉再插上光纖,那需要對(duì)接收側(cè)做整體復(fù)位以保證接收的可靠。這時(shí)整個(gè)時(shí)鐘都會(huì)重新復(fù)位一遍。
三、RXOUTCLKSEL = RXPLLREFCLK_DIV1/2
這種情形,RXUSRCLK/RXUSRCLK2 的源頭都是參考鐘,所以和 TXOUTCLKSEL = TXPLLREFCLKDIV1/2 的情形是一樣的。在現(xiàn)實(shí)中會(huì)合并用 TXOUTCLK 來驅(qū)動(dòng) TXUSRCLK 和RXUSRCLK。
所以復(fù)位的方法參考 TX。
四、RXOUTCLKSEL = RXPLLREFCLK_DIV1/2, 且用到 MMCM
這 種 情 形 , RXUSRCLK/RXUSRCLK2 的 源 頭 都 是 參 考 鐘 , 所 以 和 TXOUTCLKSEL = TXPLLREFCLKDIV1/2 + MMCM 的情形是一樣的。在現(xiàn)實(shí)中會(huì)合并用 TXOUTCLK 通過MMCM 來驅(qū)動(dòng) TXUSRCLK 和 RXUSRCLK。
所以復(fù)位的方法參考 TX。這里畫出 2 中復(fù)位連接圖:
五、RXBUFFER BYPASS
RXUBFFER BYPASS 模式下,由相位對(duì)齊電路實(shí)現(xiàn) RXCLK 和 RXUSRCLK 的相位對(duì)齊。此時(shí) RXUSRCLK 的源頭必須來自 RXOUTCLKPMA, 而 RX_XCLK_SEL = RXUSR。
在大多數(shù)情況下,RX 工作在 SINGLE LANE 模式下。所以 RXPHASEALINGMENT 只要工作在 AUTO 模式下就可以了。
對(duì)于 GTX,RXPHASEALIGNMENT 的復(fù)位連接和波形如下:
RXPHALIGNDONE 作為 RX 邏輯的復(fù)位信號(hào)。
對(duì)于 GTH,RXPHASEALIGNMENT 的復(fù)位連接和波形如下:
RXSYNCDONE 作為 RX 邏輯的復(fù)位信號(hào)。
同樣的要求:
1. RXDLYSRESET 的脈寬不能超過 50ns。
2. 相位對(duì)齊操作必須在 RXRESETDONE 拉高后進(jìn)行。
總結(jié)
對(duì)于時(shí)序系統(tǒng),復(fù)位的設(shè)計(jì)會(huì)極大影響到系統(tǒng)的工作結(jié)果。對(duì)于 7 系列的 SERDES,其重要性是不言而喻的。這里列舉的是一些應(yīng)用場景以及對(duì)應(yīng)的復(fù)位設(shè)計(jì)。希望對(duì)大家有幫助。
評(píng)論