前言
Xilinx系列、ISE環境中,設計復雜工程時全局時鍾系統的設計顯得尤為重要。
一、時鍾網絡與全局緩沖
在XilinxFPGA中,時鍾網絡分為兩類:全局時鍾網絡和I/O區域時鍾網絡。以全銅工藝實現的全局時鍾網絡,加上專用時鍾緩沖與驅動結構,從而可使全局時鍾到達芯片內部所有的邏輯可配置單元,且I/O單元以及塊RAM的時延和抖動最小,可滿足高速同步電路對時鍾觸發沿的苛刻需求。
在FPGA設計中,FPGA全局時鍾路徑需要專用的時鍾緩沖和驅動,具有最小偏移和最大扇出能力,因此最好的時鍾方案是由專用的全局時鍾輸入引腳驅動的單個主時鍾,去鍾控設計項目中的每一個觸發器。只要可能就應盡量在設計項目中采用全局時鍾,因為對於一個設計項目來說,全局時鍾是最簡單和最可預測的時鍾。
在ISE設計全局時鍾時,IBUFG、BUFG、BUFGMUX等概念經常會被提及,這些資源可以統稱為時鍾資源,它們分為四類:全局時鍾輸入端口、全局時鍾復用器、I/O時鍾緩沖、水平時鍾布線緩沖。下面挑選其中幾個常見的資源種類,簡單介紹下:
IBUFG:即輸入全局緩沖,是與專用全局時鍾輸入管腳相連接的首級全局緩沖。所有從全局時鍾管腳輸入的信號必須經過IBUFG,否則在布局布線時會報錯。IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和SSTL等多種格式的I/O標准。
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。
以上為常用的時鍾資源,對於一般的全局時鍾系統設計,有這些資源就足夠了。
二、常用全局時鍾系統
要組建一個全局時鍾系統,首先要從全局時鍾管腳輸入一個時鍾。有了這個時鍾,就可以組建各種類型的全局時鍾系統了。一般來說,常用的全局時鍾系統有兩種:IBUFG+BUFG系統、IBUFG+DCM(PLL)+BUFG。
1、 IBUFG+BUFG系統
IBUFG+BUFG方案如下圖所示,這也是最基本的全局時鍾系統。將時鍾管腳輸入的時鍾作為IBUFG的輸入,然后將IBUFG的輸出再作為BUFG的輸入,則BUFG的輸出即為得到的全局時鍾。IBUFG+BUFG的方案相當於BUFGP。
2、 IBUFG+DCM(PLL)+BUFG
平時用得最多的還是IBUFG+DCM(PLL)+BUFG方案,如下圖所示。將時鍾管腳輸入的時鍾作為IBUFG的輸入,然后將IBUFG的輸出作為DCM(PLL)的輸入,將經DCM(PLL)頻率變換后的輸出再作為BUFG的輸入這種方案使用方法最為靈活,對全局時鍾的控制更加有效。通過DCM(PLL)模塊不僅能對時鍾進行同步、移相、分頻、倍頻等變換,而且可以使全局時鍾的輸出達到無抖動延遲(“0”skew)。
三、全局時鍾系統使用的問題與注意事項
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后輸入到時鍾反饋輸入管腳。
四、全局時鍾系統使用舉例
下面將舉出實例,來看一下如何組建一個全局時鍾系統。
某FPGA從全局時鍾管腳引入頻率為26M的晶振源,FPGA內部需要22MHz、22MHz反向、171.6MHz、36MHz,其中22MHz、22MHz反向、171.6MHz為FPGA內部使用,22MHz、36MHz經由普通I/O管腳輸出,而且22MHz反向還要與信號t_rn作邏輯與運算,試給出該需求的全局時鍾系統解決方案。
在ISE中組建時鍾系統有兩種方法:一是用IP核生成器配置生成相應IP,再用線連接起來, 二是在文件中直接用語言配置生成各類資源(DCM、PLL、IBUFG、BUFG等),再用線連接。第一種方法較為簡單但靈活性差,而第二種方法稍微復雜但靈活性較強,可以隨時修改,使用哪種方法取決於個人喜好。
這里用第二種方法來生成上文需求的全局時鍾系統,下圖為最終效果圖。
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直接輸出。
轉自:http://blog.csdn.net/lg2lh/article/details/44997937