1. 程式人生 > >【FPGA】Spartan-6的時鐘管理器(CMT)

【FPGA】Spartan-6的時鐘管理器(CMT)

目錄

DCM

DCM原語

PLL

組成

工作原理

PLL作用

應用模型

時鐘管理器(CMT)

Spartan-6 CMT是一個靈活、高效能的時鐘管理模組。它位於晶片中央、垂直的全域性時鐘網路旁。如圖2-17所示,它包含一個PLL和兩個DCM。

Spartan-6 FPGA CMT片內佈局圖

圖2-17 Spartan-6 FPGA CMT片內佈局圖

DCM

Spartan-6中的DCM與Spartan-3中的類似,如圖2-18所示,同樣由4部分組成。

DCM 功能結構圖

圖2-18 DCM 功能結構圖

(1) 延時鎖相環(DLL)。

DLL 延時鎖相環可以根據輸入時鐘去除DCM 的輸出時鐘歪斜,以完全消除時鐘分佈延遲。其原理是將時鐘輸入(CLKIN)與一個反饋輸入(CLKFB)進行比較,然後控制延遲線選擇器,通過在DLL 路徑中加入合適的延遲直到CLKIN 與CLKFB 重合。

DLL 輸入時鐘是CLKIN 和CLKFB,輸出時鐘訊號是CLK0、CLK90、CLK180、CLK270、CLK2X、CLK2X180 和CLKDV。

(2) 數字頻率綜合器(DFS)。

DFS有兩個使用者暫存器,用來設定相對於輸入時鐘(CLKIN)倍頻(CLKFX_MULTIPLY)和分頻(CLKFX_DIVID)係數。DFS可以單獨使用,還可以和DLL一起配合使用;如果DFS不和DLL一起使用,CLKIN和DFS輸出之間沒有對應的相位關係。DFS的輸出為CLKFX和CLKFX180。

(3) 相移單元(PS)。

相移單元PS的輸入訊號有PSINCDEC、PSEN和PSCLK,輸出訊號為PSDONE和STATUS[0]。相移模式包括固定相移和可變相移。

固定相移是指DCM的9個時鐘的相位輸出,通常是輸入時鐘週期的若干分之一,固定相移值在設計中設定並在FPGA配置時載入FPGA。

除了固定相移,PS還支援可變相移,根據系統要求,通過數字介面(PSINCDEC、PSEN和PSCLK)動態改變相移。每次動態改變的相移值為DCM_DELAY_STEP,DCM_DELAY_STEP對應的範圍可參考《Spartan-6資料手冊》。

(4) 狀態邏輯。

狀態邏輯反映DCM的狀態,對應兩個輸出訊號LOCKED和STATUS[0]。

DCM原語

如圖2-19所示,主要有2個DCM的原語呼叫,DCM_SP和DCM_CLKGEN。

DCM原語

圖2-19 DCM原語

DCM_SP提供DCM的傳統特性:時鐘DESKEW、頻率綜合和固定及可變相移。

DCM_SP所有的屬性都是在設計時確定,上電配置的時候程式設計到FPGA,除了動態相移功能外,所有的屬性在執行時是不可以更改的。

DCM_CLKGEN提供瞭如下更多的DFS效能。

低抖動的CLKFX和CLKFX180輸出。提高了輸入時鐘CLKIN的抖動容限。支援M和D的動態程式設計,動態設定CLKFX_MULTIPLY和CLKFX_DIVIDE。CLKFX_MULTIPLY和CLKFX_DIVIDE屬性值範圍更大。當輸入時鐘丟失時,自激振盪器工作。具有擴頻功能。

在設計中特別要注意DCM_SP和DCM_CLKGEN的特性和引數,請參考《Spartan-6 時鐘資源使用者手冊》。

PLL

Spartan-6 器件最多包含6 個CMT,12 個PLL。PLL 的主要用途是作為頻率合成器,產生更寬範圍的頻率輸出,在與CMT 中的DCM 連線時,具有良好的濾波功能。

圖2-20 所示為PLL 的功能框圖。

Spartan-6 PLL功能框圖

圖2-20 Spartan-6 PLL功能框圖

組成

其中包括可程式設計計數器D、相位/頻率檢測器(Phase-Frequency Detector,PFD)、電荷泵(Charge Pump ,CP ) 、環路濾波器(Loop Filter , LF) 、壓控震盪器(Voltage Controlled Oscillator,VCO)、O0~O5 為6 個可程式設計計數器。

工作原理

PFD將輸入時鐘與反饋時鐘的相位和頻率進行比較,產生的訊號驅動CP 和LF,CP和LF 為VCO產生一個參考電壓,這個參考電壓將影響VCO的輸出頻率。那麼VCO的頻率是如何變化的呢?PFD完成2個時鐘的比較後,產生CP和LF 的驅動訊號,這個訊號確定了VCO 應該工作在較高頻率還是較低頻率。當VCO工作頻率過高時,PFD觸發一個下降訊號,致使控制電壓下降,從而降低VCO的工作頻率。當VCO工作頻率過低時,PFD觸發一個上升訊號,致使電壓上升。VCO 共產生8個輸出相位,每個輸出相位都可選作輸出計數器的參考時鐘,如圖2-20所示。另外PLL 還提供了一個專用計數器M,用來控制PLL的反饋時鐘,以實現大範圍頻率合成。6個“O”計數器可以獨立程式設計,例如,O0可以程式設計為進行二分頻操作,而O1程式設計為進行三分頻操作。唯一的限制是VCO的工作頻率對所有輸出計數器來說必須相同,因為VCO驅動所有計數器。使用專用PLL 佈線資源,必須將CLK_FEEDBACK設定CLKOUT0,按照圖2-21所示使用BUFPLL和BUFIO2FB。

帶CLKOUT0反饋的PLL

圖2-21 帶CLKOUT0反饋的PLL

當使用CLKOUT0的專用反饋路徑時,輸出計數器CLKOUT0_DIVIDE將影響VCO頻率,fVCO=FIN×M×CLKOUT0_DIVIDE/D。

PLL的原語

圖2-22所示為PLL常用的兩個模組,PLL_BASE和PLL_ADV。PLL_BASE允許使用獨立的PLL 的最常用功能,包括時鐘去歪斜、頻率合成、粗粒度相移和佔空比程式設計等。

PLL_ADV具備所有PLL_BASE功能,它具有更多的時鐘輸出。

PLL的原語

圖2-22 PLL的原語

PLL作用

Spartan-6 PLL是為支援時鐘網路去歪斜SKEW、頻率合成和減少抖動而設計的混合訊號模組。接下來將詳細討論PLL 的這3種作用。

(1) PLL 對時鐘網路去歪斜SKEW。

在許多情況下,設計人員在其I/O時序預算中不希望有時鐘網路的延遲。其實,用PLL/DLL就可以解決這個問題,因為PLL/DLL具有補償時鐘網路的延遲的功能。當然,包括Spartan-6中的PLL。一個與參考時鐘CLKIN的頻率相匹配的時鐘(通常是CLKFBOUT或CLKOUT0)連線到BUFG,並且反饋到PLL的CLKFB引腳。其餘輸出仍可用來合成更多使用者所需頻率。這樣一來,所有的輸出時鐘就會與參考時鐘之間有一個指定的相位關係。為了精確地降低由於時鐘輸入佈線引起的歪斜,建議採用圖2-21 所示的方法,使用BUFIO2FB緩衝器。

(2) PLL 用於頻率合成。

PLL還可以用於頻率合成。在這種應用中,PLL不能用於時鐘網路去歪斜,而是用來為其他模組提供時鐘。在這種模式下,PLL反饋通路因為要將所有佈線保留為區域性佈線而應設定成internal反饋模式,以儘量減少抖動。圖2-23所示為將PLL配置成頻率合成器的示例。

僅用於頻率合成的PLL

圖2-23 僅用於頻率合成的PLL

在本例中,輸入為100MHz參考時鐘,設定M=5,D=1,可使VCO晶振的頻率為500MHz(100MHz×5),6個PLL輸出中的4個程式設計提供以下時鐘。

250MHz GTP收發器時鐘TXUSRCLK和RXUSRCLK。125MHz PCI Express PHY時鐘。62.5MHz PCI Express使用者介面和BRAM介面時鐘。50MHz邏輯時鐘。

在此示例中,參考時鐘和輸出時鐘之間沒有相位關係,但是各輸出時鐘之間要求有相位關係。

(3) PLL用作抖動濾波器。

PLL始終可以降低參考時鐘上固有的抖動。PLL可以被例化以濾掉外部時鐘在驅動另一個邏輯模組前(包括DCM)的抖動。作為抖動濾波器,PLL通常被簡單地視為一個緩衝器,在其輸出上重新生成輸入頻率(例如,FIN=100MHz,FOUT=100MHz)。通常,將PLL的BANDWIDTH屬性設定為Low,可以實現較強的抖動濾波,但要注意,將BANDWIDTH設定為Low會導致PLL的靜態偏差增大。

如何使用PLL呢?通常有如下幾種方法。

ISE軟體中的PLL嚮導可以幫助生成各種PLL引數。可以手動將PLL例化成一個元件。將PLL與IP核合併,IP核將包含並管理PLL。

應用模型

PLL有5種應用模型,下面分別介紹。

(1) 時鐘網路去歪斜。

PLL的主要用途之一是時鐘網路去歪斜。圖2-24所示為這種模式下的PLL。O計數器之一的時鐘輸出用來驅動片內邏輯或I/O。反饋計數器用來控制輸入時鐘與輸出時鐘之間的精確相位關係(例如,當需要90°相移時)。右側所示相關時鐘的波形是輸入時鐘與輸出時鐘需要相位對齊的情況。這種PLL的配置方式最靈活,但它需要兩個全域性時鐘網路。

PLL使用兩個BUFG的時鐘去歪斜

圖2-24 PLL使用兩個BUFG的時鐘去歪斜

這裡,對反饋時鐘有些限制,也就是PFD的2個輸入時鐘的頻率必須完全相同。因此,必須滿足下列關係式:

ƒIN/D=ƒFB=ƒVCO/M

例如,如果ƒIN是166MHz,D=1,M=3,O=1,則VCO的輸出時鐘頻率和PLL的時鐘(CLKBOUT)輸出的頻率都是498MHz。因為反饋通路中的M值是3,所以PFD上的兩個輸入時鐘頻率都是166MHz。

另一種更復雜的情況是輸入頻率為66.66MHz,D=2,M=15,O=2。在這種情況下,VCO的頻率是500MHz,而O的輸出頻率是250MHz。所以,PFD上的反饋頻率是500/15,即33.33MHz,與PFD上輸入時鐘頻率的66.66MHz/2相符。

如果PLL用作頻率合成器或抖動濾波器,並且PLL輸入時鐘與PLL輸出時鐘之間不要求有相位關係,那麼PLL反饋可以是PLL的內部反饋。因為反饋時鐘根本不通過核心電源供電,所以反饋時鐘不受核心電源噪聲干擾,因而PLL的效能會有所提升,如圖2-25所示。當然,CLKIN訊號和BUFG上引入的噪聲依然存在。

具有內部反饋的PLL

圖2-25 具有內部反饋的PLL

(2) 零延遲緩衝器。

如果系統中只有一個時鐘,而這個時鐘又需要驅動到所有的器件,為了保證時鐘到達各目的器件之間的歪斜儘可能小,該如何實現這個應用呢?這時,就需要用PLL的零延遲緩衝器的應用模式。如圖2-26 所示,其中,反饋訊號在片外傳遞,經過了一段PCB板的走線。使用這種配置,可以保證在FPGA的時鐘輸入引腳和外部器件的時鐘輸入引腳時鐘邊沿是對齊的。很顯然,在反饋路徑中,PCB走線的最大延遲是有限制的。

零延遲緩衝器

圖2-26 零延遲緩衝器

在某些情況下,由於外部器件輸入電容與FPGA反饋路徑上的輸入電容存在差異,很難實現精準對齊。例如,如果外部器件有1pF~4pF的輸入電容,而FPGA 的輸入電容是8pF,這樣一來,訊號斜率就會存在差異,這是基本的時鐘歪斜。為了確保時序,設計人員有必要了解這種問題的存在。

(3) DCM 驅動PLL。

DCM提供了一種生成精確相移時鐘的好方法,但是,DCM不能降低參考時鐘固有的抖動。PLL可用來降低DCM輸出時鐘抖動。如圖2-27所示,將PLL配置成不引入任何相移(通過PLL的零延遲)的模式,框圖右側所示為相關波形。當使用DCM的輸出直接驅動PLL時,DCM和PLL必須同處在一個CMT模組內。這種實現方案在區域性專用佈線上產生的噪聲量最小,因此是首選方案。不過,也可以把DCM輸出CLK90連線到BUFG,再去驅動PLL的CLKIN輸入。

DCM 驅動PLL 以降低抖動

圖2-27 DCM 驅動PLL 以降低抖動

(4) PLL 驅動DCM。

減少時鐘抖動的另一種可選方案是在輸入時鐘抖動傳入DCM之前用PLL將其清除。這樣可以改善所有DCM的輸出抖動,但DCM附加的任何抖動都仍會傳到時鐘輸出。PLL和DCM應處在同一個CMT模組中,因為PLL與DCM之間存在用來支援零延遲模式的專用資源。如果PLL和DCM不在同一個CMT中,那麼唯一的連線就是通過一個能抑制歪斜可能性的BUFG。只要參考頻率可以由一個PLL生成,則一個PLL即可驅動多個DCM。例如,如果將一個33MHz的參考時鐘送入PLL,而設計用一個DCM在200MHz頻率下工作,同時用另一個在100MHz頻率下工作,那麼VCO就可以在600MHz(M1=18)頻率下工作。可以對VCO的頻率進行三分頻以生成200MHz的時鐘,同時可以對另一個計數器進
行六分頻以生成100MHz的時鐘。對於圖2-28中的示例,一個PLL可以驅動兩個DCM。

PLL驅動一個DCM

圖2-28 PLL驅動一個DCM

(5) PLL 到PLL 的連線。

可以級聯PLL,以便生成更大範圍的時鐘頻率。公式2-1所示為最終輸出頻率與輸入頻率之間的關係。圖2-29所示為兩個PLL的級聯,第一個PLL的輸出連線到BUFG,再連線到第二個PLL的CLKIN引腳。此路徑具有最小的器件抖動。

公式2-1:

PLL驅動PLL

圖2-29 PLL驅動PLL