GTX/GTH QPLL CPLL學習之Aurora

        

目錄

1 基礎知識

2 Aurora  使用過程中報錯


1 基礎知識

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系列裏面器件類型和支持的收發器類型以及最大的收發器數量。

以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接收端的彈性緩衝區,其具有時鐘糾正和通道綁定功能。

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

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

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

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

參考網址:

https://cloud.tencent.com/developer/article/1528849

 

2 Aurora  使用過程中報錯

 

從這個錯誤裏,提示我們兩點:

A)

在配置IP核第二頁的時候,其實就是每個通路分配引腳的過程。這裏選擇通路的時候,要和引腳分配嚴格對應。否則,生成bit文件可能不會報錯(在只使用一個bank接口的時候,LAN就選錯了,但是也順利生成了bit文件)。對應方式如下:

 

 

GTHQ8 對應bank 118這個quad,上圖對應的就是bank118 的MGTX1。

B)

 QPLL時鐘驅動該QUAD以外的GTX模塊報錯。雖然錯中提示中讓添加時序約束,把錯誤降爲warning。但是,也說明了不建議用,同時也嘗試過,不能正常生成bit文件。

差分時鐘可以最多驅動12個GTX正常工作,但是在驅動時要注意GTX_COMMOM模塊,即一個GTX_COMMON最多可以驅動同一個QUAD上的4個GTX_CHANNEL,如果說要驅動超過四個或者其他QUAD上的GTX,必須要生成新的GTX_COMMON模塊,來保證其他QUAD上的GTX可以正常工作。

 

這是檢查了一下工程發現了問題,主核的Aurora IP核中包含了GTX_COMMON模塊,但是從核GTX_COMMON模塊在IP核的外面被註釋掉了,因爲在之前的設計中,兩個IP核的四個GTX在同一個BANK中,所以在從核的頂層將GTX_COMMOM模塊刪掉了,所以該模塊產生的信號(gt_qpllclk_quad1_in_i和gt_qpllrefclk_quad1_in_i)採用了主核產生後外接到從核的工作模式。

 

發現問題後,將從核的GTX_COMMON模塊添加到從核的頂層,並且將gt_qpllclk_quad1_in_i和gt_qpllrefclk_quad1_in_i這兩個信號從外接改成了從核的GTX_COMMON模塊產生後再接到IP核的方式,問題解決。

 

參考網址:https://blog.csdn.net/d179212934/article/details/84852890

根據2  修改代碼

修改Xilinx自帶IP核源碼的方法:

https://blog.csdn.net/FPGADesigner/article/details/81807296

 

代碼結構如下:

 

 

   Aurora_8b10b  是最頂層,看有個鏈接,有人說頂層更改一些IO端口以後,更改IP覈報錯,爲了躲避這個風險,就沒有更改最頂層的IO端口。所以在Aurora_8b10b_8_core這個文件裏刪除端口上的公共時鐘。

 調用 _core 的時候common的信號沒用到。這些信號在 _core裏面自己生成。

 

 

Aurora_8b10b  中更改:  定義下面5個公共端口爲 wire 型,同時初始化爲0(沒有初始化爲0 編譯最終結果會報嚴重警告,端口未連接).

 

Aurora_8b10b_8_core 中修改:

端口上刪除 公共模塊中 的5個信號,代碼中定義爲wire型。把代碼中原本需要外部輸入的信號變換成用gt_common輸出。gt_common的輸入有復位  和initclk

core  代碼的 aurora_8b10b_8_GT_WRAPPER 中添加這一部分,具體不會的抄第一個核的代碼

 添加gt_common模塊。IP核源碼中不會添加.V 文件,所以,gt_common直接在改模塊中添加,不做成獨立的.V

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章