天天看點

JESD204接口應用筆記——時鐘時鐘配置要求refclk與glblclk可共享時鐘refclk與glblclk無法共享

近期有個新項目接觸了JESD204B的Transmit接口,使用Kintex UltraScale器件。總體來說,這東西非常好用,也挺簡單。使用過程中在時鐘配置方面遇到一點小問題,順便記錄一下。

時鐘配置要求

Xilinx器件的JESD接口文檔主要有兩個,pg066和pg198,其中pg066是JESD204接口IP的文檔,pg198是JESD204實體層文檔。打開pg066的Clocking章節,可以看到一段比較重要的内容,對外部輸入時鐘做出了限制。

JESD204接口應用筆記——時鐘時鐘配置要求refclk與glblclk可共享時鐘refclk與glblclk無法共享

refclk是收發器的參考時鐘,必須提供;glblclk主要用于使用者邏輯,開發者使用該時鐘産生資料源,然後送給JESD204接口IP。如果refclk大于165MHz,或者小于65MHz,那麼glblclk是必須的;如果refclk和glblclk的時鐘頻率不一緻,那麼glblclk也是必須的。根據refclk的說明,refclk和glblclk是可以共用一路時鐘的。

JESD204接口應用筆記——時鐘時鐘配置要求refclk與glblclk可共享時鐘refclk與glblclk無法共享

當refclk再65MHz~165MHz範圍内,且與glblclk相等時,glblclk可以使用refclk。注意,任何時候refclk和glblclk都應該是同源的。下面這幅圖就是refclk和glblclk共享時鐘的情況。

JESD204接口應用筆記——時鐘時鐘配置要求refclk與glblclk可共享時鐘refclk與glblclk無法共享

寫到這裡,需要重點提一下。Ultrascale器件的時鐘架構和7系列有很大的差別。對于收發器而言,UltraScale多了一個BUFG_GT。以前的器件中,IBUFDS_GTE扇出的時鐘隻能用于收發器。現在,将IBUFDS_GTE的另一路扇出連接配接到BUFG_GT,然後BUFG_GT的輸出時鐘就和普通BUFG扇出時鐘一樣,可以用于驅動使用者邏輯,也可以用于MMCM/PLL等。BUFG_GT需要用下圖中IBUFDS_GTE的黃色端口驅動。

JESD204接口應用筆記——時鐘時鐘配置要求refclk與glblclk可共享時鐘refclk與glblclk無法共享

refclk與glblclk可共享時鐘

隻要滿足前文提到的條件,refclk和glblclk是可以共享時鐘的。第一個項目中,線速率5Gbps,是以glblclk應該為5000/40=125MHz,同時收發器的參考時鐘也可以接收125MHz的頻率。在該設計中我使用了共享時鐘方案,相關子產品和接口都在Block Design中搭建。為了共享時鐘,在添加IP時,記得勾掉下面的選項。

在Xilinx提供的源碼中,這個與refclk共享的glblclk就是通過BUFG_GT産生的。

JESD204接口應用筆記——時鐘時鐘配置要求refclk與glblclk可共享時鐘refclk與glblclk無法共享

refclk與glblclk無法共享

第二個項目中,線路速率10Gbps,是以glblclk為250MHz,大于165MHz。這種情況下,refclk和glblclk隻能使用不同的時鐘。該項目需要4個link,每兩個link共享一個refclk,4個link共享一個glblclk。在block design中,每個link都會生成一個symbol,而且每個symbol都會為glblclk保留一個差分的時鐘輸入端口,這是不可修改的。是以為了4個JESD204 IP共享一個glblclk,我沒有使用block design的方式。而是修改jesd204_support.v子產品的時鐘端口,将原來的差分輸入改為單端,然後将jesd204_clocking.v子產品在頂層例化,用于産生glblclk,然後通過BUFG送給4個link。子產品架構如下。

JESD204接口應用筆記——時鐘時鐘配置要求refclk與glblclk可共享時鐘refclk與glblclk無法共享

上圖中,黃線标示的jesd204_clocking.v子產品用于産生glblclk,供4個JESD204 IP使用;紅線标示的兩個jesd204_clocking.v子產品用于産生refclk。