博客專欄

        EEPW首頁 > 博客 > Xilinx 7系列690T FPGA GTX的QPLL和CPLL使用問題

        Xilinx 7系列690T FPGA GTX的QPLL和CPLL使用問題

        發布人:FPGA小師兄 時間:2023-01-16 來源:工程師 發布文章

        最近使用Xilinx 7系列690T芯片的多個GTX接口傳輸千兆以太網數據幀時,在某些的測試情況下個別GTX接口會出現少量丟幀的問題,最后通過實驗發現是時鐘的分配使用問題,具體而言是GTX接口的QPLL和CPLL的使用問題。

        情況說明

        本次調試的主要任務是調通FPGA板子(型號為690T)上的24個GTX接口(對應于24個SGMII接口)。每個BANK上有4個GTX接口,每個接插件上也是4個GTX接口。如下圖所示。

        1、出現問題波形

        連接數據源,下載自回環程序測試接口,發現X1 AB,X2AB,X3 AB 正常,X1 CD,X2 CD,X3 CD(就是靠后的一排)有少量丟幀。正常的口和有丟幀的口連接同一個地檢口測試,且下載的是相同程序。錯口打固定幀256字節時在VIVADO上抓信號看到收到了超短幀和錯幀。且幀頭出錯。


        2、測試場景一:24口的BANK及接插件分配情況

        框內的為一個BANK,一條橫線上的為一個接插件上的

        測試情況:打接口回環,X1 AB,X2 AB,X3 AB正常收發,X1CD,X2 CD,X3 CD有丟幀。

        3、測試場景二:12口的BANK及接插件分配情況

        測試情況:打接口回環。此時的X1 AB和 X1 CD現象與上面的24口情況相同(約束方法相同,X1 CD有丟幀現象。但之前測試12口的時候無誤)。但此時X3 CD正常接收。(注意到此時的X3 CD和24口測試程序的約束方法不同,此時X3 CD有兩個主核,有兩個從核,初步懷疑是一個主核帶不起三個從核或是一個bank到集插件上的時鐘走線有問題。)

        4、測試場景三:測試版BANK及接插件分配情況

        測試情況:打接口回環。此時的X1 AB上的數據1,2正常,數據3,4丟幀,X1 CD上的數據5,6丟幀,數據7,8正常。可以發現正常的數據口都有一個主核,一個從核。而丟幀的數據口只有從核。

        分析:此時可以排除是硬件問題,因為測試情況一、二時,X1 AB可正常收發數據。然而換成測試三的約束條件,發現有兩個口也丟幀。

        解決思路

        經過上面的三種方案驗證,懷疑是從核不能獨立工作。于是查閱GTX手冊,看到GTX的外部時鐘使用模式如下圖:

        GTXE2_CHANNEL/ GTHE2_CHANNEL必須為每個收發器實例化原語。如果需要高性能QPLL時,必須實例化GTXE2_COMMON/GTHE2_COMMON原語。若速率要求不高,則可以每個通道用CPLL.用QPLL時,每個QUAD塊上若用多個GTX接口,則需要有主從之分。

        用QPLL時參考時鐘經過IBUFDS_GTE2原語輸出到GTXE2_COMMON/GTHE2_COMMON原語。

        GTXE2_COMMON/GTHE2_COMMON原語產生的時鐘再供給其他channel.由于一個QUAD塊上只能有一個GTXE2_COMMON/GTHE2_COMMON,所以再用QPLL時一個QUAD塊上有主從之分。

        為了解決這次調試時出現的從核不能獨立工作的現象,采用CPLL的方式,每個channel都有CPLL,所以每個核都是一樣的,沒有主從之分,問題解決。每個核都接的是參考時鐘經過IBUFDS_GTE2原語輸出的單端參考時鐘。程序中把GTXE2_COMMON/GTHE2_COMMON原語注釋掉,把輸入到核的GTXE2_COMMON/GTHE2_COMMON的輸出接零就好,如下圖:

        基礎知識

        以下來源于網絡:

        Xilinx的7系列FPGA隨著集成度的提高,其高速串行收發器不再獨占一個單獨的參考時鐘,而是以Quad來對串行高速收發器進行分組,四個串行高速收發器和一個COMMOM(QPLL)組成一個Quad,每一個串行高速收發器稱為一個Channel。

        QPLL和CPLL的區別,在于兩者支持的線速率不同,對于CPLL來說,支持的線速率位1.6GHz到3.3GHZ之間,而對于QPLL來說,GTX支持的線速率分兩檔,Lower Baud支持5.93GHz~8.0GHz,Upper Baud支持9.8GHz~12.5GHz,對于GTH則不分檔位,支持的線速率為8.0GHz~13.1GHz。

        Xilinx的7系列FPGA根據不同的器件類型,集成了GTP、GTX、GTH以及GTZ四種串行高速收發器,四種收發器主要區別是支持的線速率不同,下圖可以說明在7系列里面器件類型和支持的收發器類型以及最大的收發器數量。

        Xilinx的7系列FPGA隨著集成度的提高,其高速串行收發器不再獨占一個單獨的參考時鐘,而是以Quad來對串行高速收發器進行分組,四個串行高速收發器和一個COMMOM(QPLL)組成一個Quad,每一個串行高速收發器稱為一個Channel,以XC7K325T為例,GTX在FPGA內部如下圖所示:


        對于每一個串行高速收發器,其包含了發送部分和接收部分,內部結構如下圖:


        發送端和接收端功能獨立,均由PMA(Physical Media Attachment,物理媒介適配層)和PCS(Physical Coding Sublayer,物理編碼子層)兩個子層組成。其中PMA子層包含高速串并轉換(Serdes)、預/后加重、接收均衡、時鐘發生器及時鐘恢復等電路。PCS子層包含8B/10B編解碼、緩沖區、通道綁定和時鐘修正等電路。

        GTX發送端處理流程:首先用戶邏輯數據經過8B/10B編碼后,進入一個發送緩存區,該緩沖區主要是PMA子層和PCS子層兩個時鐘域的時鐘隔離,解決兩者時鐘速率匹配和相位差異的問題,最后經過高速Serdes進行并串轉換,有必要的話,可以進行預加重、后加重。值得一提的是,如果在PCB設計時不慎將TXP和TXN差分引腳交叉連接,則可以通過極性控制來彌補這個設計錯誤。接收端和發送端過程相反,相似點較多,這里就不贅述了,需要注意的是RX接收端的彈性緩沖區,其具有時鐘糾正和通道綁定功能。

        上面是GTX的性能和結構功能概述,下面詳細分析GTX的時鐘結構。

        以7系列的GTX來說,每個Quad有兩個外部差分參考時鐘源,其中一個Quad的時鐘結構如下圖所示:


        紅色方框部分是兩個差分參考時鐘輸入,每個外部參考時鐘的輸入必須經過IBUFDS_GTE2源語之后才能使用。綠色方框是來自其他Quad的參考時鐘輸入,7系列FPGA支持使用相鄰(南北方向)Quad的參考時鐘作為當前Quad的參考時鐘,多路參考時鐘源經過一個選擇器之后,分兩路進入QPLL和CPLL,如圖五和圖六,其中藍色方框是QPLL,黃色方框是CPLL,對于一個GTX Channel來說,可以獨立選擇參考時鐘,可以選擇QPLL,也可以選擇CPLL,QPLL和CPLL的區別在于兩者支持的線速率不同,QPLL支持的線速率高于CPLL,圖七是外部參考時鐘模型的詳細結構,紅色箭頭表示QPLL通路,黃色箭頭表示CPLL通路。


        因為每一個Quad有兩個外部參考時鐘,因此對于每一個Quad來說,可以選擇兩個不同的參考時鐘,每一個CHANNEL的接收端和發送端都可以獨立選擇參考時鐘,如下圖所示:

        如果用戶需要使用其他Quad的參考時鐘源來作為當前Quad的參考時鐘,在滿足下面三個條件的情況下可以使用:

        1、只能使用當前Quad上方的Quad的參考時鐘;

        2、只能使用當前Quad下方的Quad的參考時鐘;

        3、一個Quad的參考時鐘源不能驅動超過3個Quad的收發器(只能驅動當前Quad和上下方相鄰兩個Quad);

        滿足上面的條件,就可以把其他Quad的參考時鐘配置成當前Quad的參考時鐘,如下圖所示,注意圖中紅色方框表示相鄰的Quad:

        QPLL和CPLL的區別,在于兩者支持的線速率不同,對于CPLL來說,支持的線速率位1.6GHz到3.3GHZ之間,而對于QPLL來說,GTX支持的線速率分兩檔,Lower Baud支持5.93GHz~8.0GHz,Upper Baud支持9.8GHz~12.5GHz,對于GTH則不分檔位,支持的線速率為8.0GHz~13.1GHz。當以高于CPLL操作范圍的線路速率操作通道時,需要使用QPLL。GTXE2_COMMON原語封裝了當使用GTX QPLL時,必須實例化GTX QPLL。

        全文完。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: Xilinx 7 QPLL CPLL

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 周口市| 和龙市| 乐山市| 灵武市| 高阳县| 衡阳市| 石林| 长寿区| 凤阳县| 老河口市| 乌鲁木齐市| 环江| 二连浩特市| 阜阳市| 永丰县| 临邑县| 双桥区| 江门市| 郸城县| 福安市| 南靖县| 海伦市| 建平县| 板桥市| 鄯善县| 扶绥县| 绍兴县| 称多县| 民权县| 阿克| 东阿县| 临夏县| 五莲县| 崇文区| 郑州市| 营山县| 岚皋县| 搜索| 石台县| 台前县| 上林县|