在使用quartusii設計altera的fpga時,對於時鐘的考慮一般很少。我們想得到乙個固定頻率的時鐘,無非就是將晶振從某個時鐘管腳輸入:若晶振頻率即為期望頻率,則可以直接使用;若與期望頻率不符,則調動ip核生成pll,配置pll的輸出為期望頻率即可。可是若將fpga換為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、lvd***t、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。
ibufg+bufg方案如下圖所示,這也是最基本的全域性時鐘系統。將時鐘管腳輸入的時鐘作為ibufg的輸入,然後將ibufg的輸出再作為bufg的輸入,則bufg的輸出即為得到的全域性時鐘。ibufg+bufg的方案相當於bufgp。
平時用得最多的還是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直接輸出。
FPGA 時鐘訊號幾種設計方法
最近找工作,課題組報告一堆事搞得不可開交,今天就再更一下時鐘訊號的幾種設計方法吧,哇好氣,今天發現這個破編輯器好煩,都快寫完了,都有給我搞丟了,還得重新寫!吐槽一下csdn的部落格編輯,希望不要再出現這種情況了!時鐘訊號是fpga時序邏輯設計中必不可少的條件,一般情況下在fpga始終資源充裕的情況下...
FPGA時鐘電路PCBlayout設計原則
1.時鐘晶振源應該盡可能放在與其連線的fpga時鐘專用引腳的臨近位置。2.時鐘線盡可能走直線,如果無法避免轉彎走線,則使用45度線,盡量避免t型走線和直角走線。3.不要同時在多個訊號層走時鐘線。4.時鐘走線不要使用過孔,因為過孔會導致阻抗變化及反射。5.靠近外層的地層能夠最小化雜訊。如果使用內層走時...
FPGA 時鐘設計 1 時鐘資源總結
關於一款晶元,最權威 最新的資料當然是廠家的官方檔案。很多大牛都推薦直接閱讀原廠的 datasheet 和 user guide。根據我的體驗,這確實是最好的途徑。原因有兩個 實驗室有的晶元是 xilinx 的 virtex 5 系列,virtex 5 的 user guide 是 ug190,以下...