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