Xilinx FPGA 初探內部時鐘管理

目錄

1、時鐘網絡與全局緩衝

2、全局時鐘資源的使用方法

2.1、IBUFG+BUFG

2.2、IBUFG+DCM(PLL)+BUFG

3、全局時鐘系統使用的問題與注意事項

4、全局時鐘系統使用舉例

4.1、生成 IP Core 方式

4.2、原語調用方式


 

FPGA基礎知識 1(FPGA 內部結構)文章中,瞭解到 FPGA 內部集成了很多資源,時鐘、BRAM、IOB、CLB、DSP等;時鐘是時序電路的基石,所以掌握時鐘資源和相關的知識顯得尤爲重要;

1、時鐘網絡與全局緩衝

在Xilinx的FPGA中,時鐘網絡資源分爲兩大類:全局時鐘資源區域時鐘資源

全局時鐘資源是一種專用互連網絡,它可以降低時鐘歪斜、佔空比失真和功耗,提高抖動容限。Xilinx的全局時鐘資源設計了專用時鐘緩衝與驅動結構,從而使全局時鐘到達CLB、IOB和BRAM的延時最小。

以全銅工藝實現的全局時鐘網絡,加上專用時鐘緩衝與驅動結構,從而可使全局時鐘到達芯片內部所有的邏輯可配置單元,且I/O單元以及塊RAM的時延和抖動最小,可滿足高速同步電路對時鐘觸發沿的苛刻需求

區域時鐘資源是獨立於全局時鐘網絡的。Xilinx的器件分成若干個時鐘區域,以Virtex-6爲例,Virtex-6的最小器件有6個區域,最大器件有18個區域。它與全局時鐘不同,區域時鐘信號X只能驅動限定的時鐘區域。

在FPGA設計中,FPGA全局時鐘路徑需要專用的時鐘緩衝和驅動,具有最小偏移和最大扇出能力,因此最好的時鐘方案是由專用的全局時鐘輸入引腳驅動的單個主時鐘,去鍾控設計項目中的每一個觸發器。只要可能就應儘量在設計項目中採用全局時鐘,因爲對於一個設計項目來說,全局時鐘是最簡單和最可預測的時鐘。

在ISE設計全局時鐘時,IBUFG、BUFG、BUFGMUX 等概念經常會被提及,這些資源可以統稱爲時鐘資源,它們分爲四類:全局時鐘輸入端口、全局時鐘複用器、I/O時鐘緩衝、水平時鐘佈線緩衝。下面挑選其中幾個常見的資源種類,簡單介紹下:

IBUFG:即輸入全局緩衝,是與專用全局時鐘輸入管腳相連接的首級全局緩衝。所有從全局時鐘管腳輸入的信號必須經過IBUF元,否則在佈局佈線時會報錯。IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、 PCIX和SSTL等多種格式的IO標準。

IBUFGDS:是IBUFG的差分形式,當信號從一對差分全局時鐘管腳輸入時,必須使用IBUFGDS作爲全局時鐘輸入緩衝。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多種格式的IO標準。

BUFG:是全局緩衝,它的輸入是IBUFG的輸出,BUFG的輸出到達FPGA內部的IOB、CLB、選擇性塊RAM的時鐘延遲和抖動最小。

BUFGCE:是帶有時鐘使能端的全局緩衝。它有一個輸入I、一個使能端CE和一個輸出端O。只有當BUFGCE的使能端CE有效(高電平)時,BUFGCE纔有輸出。

BUFGMUX:是全局時鐘選擇緩衝,它有I0和I1兩個輸入,一個控制端S,一個輸出端O。當S爲低電平時輸出時鐘爲I0,反之爲I1。需要指出的是BUFGMUX的應用十分靈活,I0和I1兩個輸入時鐘甚至可以爲異步關係。

BUFGP:相當於IBUG加上BUFG。

BUFGDLL:是全局緩衝延遲鎖相環,相當於BUFG與DLL的結合。BUFGDLL在早期設計中經常使用,用以完成全局時鐘的同步和驅動等功能。隨着數字時鐘管理單元(DCM)的日益完善,目前BUFGDLL的應用已經逐漸被DCM所取代。

DCM:即數字時鐘管理單元,主要完成時鐘的同步、移相、分頻、倍頻和去抖動等。DCM與全局時鐘有着密不可分的聯繫,爲了達到最小的延遲和 抖動,幾乎所有的DCM應用都要使用全局緩衝資源。DCM可以用XilinxISE軟件中的ArchitectureWizard直接生成。

以上爲常用的時鐘資源,對於一般的全局時鐘系統設計,有這些資源就足夠了。

 

2、全局時鐘資源的使用方法

要組建一個全局時鐘系統,首先要從全局時鐘管腳輸入一個時鐘。有了這個時鐘,就可以組建各種類型的全局時鐘系統了。一般來說,常用的全局時鐘系統有兩種:IBUFG+BUFG 系統、IBUFG+DCM(PLL)+BUFG

2.1、IBUFG+BUFG

IBUFG+BUFG方案如下圖所示,這也是最基本的全局時鐘系統。將時鐘管腳輸入的時鐘作爲IBUFG的輸入,然後將IBUFG的輸出再作爲BUFG的輸入,則BUFG的輸出即爲得到的全局時鐘。IBUFG+BUFG的方案相當於BUFGP。

 

2.2、IBUFG+DCM(PLL)+BUFG

平時用得最多的還是IBUFG+DCM(PLL)+BUFG方案,如下圖所示。將時鐘管腳輸入的時鐘作爲IBUFG的輸入,然後將IBUFG的輸出作爲DCM(PLL)的輸入,將經DCM(PLL)頻率變換後的輸出再作爲BUFG的輸入這種方案使用方法最爲靈活,對全局時鐘的控制更加有效。通過 DCM(PLL)模塊不僅能對時鐘進行同步、移相、分頻、倍頻等變換,而且可以使全局時鐘的輸出達到無抖動延遲(“0”  skew

使用全局時鐘資源可以直接用原語例化,也可以使用IP核。仔細觀察了一下IP核產生的源文件,發現 IP核生成的就是3個原語的
組合;

 

3、全局時鐘系統使用的問題與注意事項

1、全局時鐘的時鐘源必須從全局時鐘管腳輸入,並且要先經過IBUFG。

2、如果全局時鐘涉及到邏輯運算,可以將BUFG換成BUFGCE(與)、BUFGMUX(二選一)等,事實上,BUFG、BUFGCE 等資源均是由 BUFGMUX 生成。

3、從BUFG輸出的時鐘,是不能直接連接普通I/O管腳輸出的,會報錯,若要將全局時鐘輸出,有兩種方法:一是直接將BUFG的輸入連接普通I/O管腳輸出,或者將BUFG的輸出經由ODDR2後再連接I/O管腳輸出。需要注意的是,將CLOCK_DEDICATED_ROUTE屬性設爲FALSE雖然會將ERROR降爲WARNING,但是這樣時鐘系統將不再是全局時鐘系統,不建議這樣做。

4、DCM(PLL)資源中有時鐘反饋輸入和時鐘反饋輸出管腳,一般的處理方法是將時鐘反饋輸出管腳經由BUFG後輸入到時鐘反饋輸入管腳。

 

4、全局時鐘系統使用舉例

下面將舉出實例,來看一下如何組建一個全局時鐘系統。

某FPGA從全局時鐘管腳引入頻率爲26M的晶振源,FPGA內部需要22MHz、22MHz反向、171.6MHz、36MHz,其中22MHz、22MHz反向、171.6MHz爲FPGA內部使用,22MHz、36MHz經由普通I/O管腳輸出,而且22MHz反向還要與信號t_rn作邏輯與運算,試給出該需求的全局時鐘系統解決方案。

在ISE中組建時鐘系統有兩種方法:

1、用IP核生成器配置生成相應IP,再用線連接起來。

2、在文件中直接用語言配置生成各類資源(DCM、PLL、IBUFG、BUFG等),再用線連接。

第一種方法較爲簡單但靈活性差,而第二種方法稍微複雜但靈活性較強,可以隨時修改,使用哪種方法取決於個人喜好。

4.1、生成 IP Core 方式

生成 IP Core 的方式,可以參考《Xilinx Spartan-6 使用 PLL IP 核》,在生成 Clock IP Core 後,我們打開 ipcore_dir 文件中的 pll_controller.v 文件,可以直觀的看到:

1、全局時鐘 CLK_IN1(來源於外部晶振) 作爲 IBUGF 的輸入,輸出爲 clkin1;

2、clkin1 作爲 DCM 的輸入,並根據配置進行分頻、倍頻、移相等操作;

3、在以 DCM 的輸出爲 BUFG 的輸入,最後由 BUFG 輸出指定的時鐘;(如果輸入時鐘分頻爲2個不同時鐘,那麼這裏用到 2 個 BUFG)

其實就和 2.2 節的過程一致;

4.2、原語調用方式

這裏用第二種方法來生成上文需求的全局時鐘系統,下圖爲最終效果圖。

1、clk26爲從全局時鐘管腳輸入的時鐘源,從管腳輸入後先經過一個IBUFG。

2、因爲22MHz、171.6MHz和36MHz不能由一個PLL產生,故將IBUFG的輸出時鐘信號輸入到兩個PLL。

3、PLL0有三個輸出:CLKOUT0、CLKOUT1、CLKOUT2,分別爲22MHz、171.6MHz和22MHz反向。clk22_out爲22MHz時鐘的I/O輸出信號,故不經BUFG直接輸出;clk22爲22MHz經過BUFG後的信號,爲全局時鐘信號;clk171p6爲171.6MHz經過BUFG後的信號,爲全局時鐘信號;clk22_inv爲22MHz反向經過BUFGCE(與t_rn作邏輯與運算)後的信號,爲全局時鐘信號

4、PLL1有一個輸出:CLKOUT0,爲36MHz,clk36_out爲36MHz的I/O輸出信號,故不經BUFG直接輸出。

具體的原語調用的方式可以參考:

https://blog.csdn.net/Reborn_Lee/article/details/80393095

https://blog.csdn.net/phenixyf/article/details/14128875  等等文章;

 

相關參考文檔:

https://blog.csdn.net/lg2lh/article/details/45220283

https://blog.csdn.net/phenixyf/article/details/14128875

https://blog.csdn.net/lg2lh/article/details/44997937

https://blog.csdn.net/github_33678609/article/details/53789063

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