1. 程式人生 > >Xilinx PLL(Virtex-5)

Xilinx PLL(Virtex-5)

1. 概述

1.1 CMT

Xilinx Virtex-5 FPGA根據不同型號分別有1、2、6個時鐘管理片(Clock Management Tile,CMT),每個CMT由一個PLL和兩個DCM組成。CMT包含專有路由來連線同一個CMT中的DCM和PLL,使用專有路由可以改進時鐘路徑。CMT如下圖:

 1.2 PLL

PLL框圖如下圖:

PLL時鐘輸入來源為:IBUFG、BUFG、IBUF、PLL outputs、DCM outputs。PFD(Phase-Frequency Detector)為相位頻率檢測器,CP(Charge Pump)為驅動電荷泵,LF(Loop Filter)環路濾波器,VCO為壓控振盪器。D、M、O0~O5為可程式設計計數器,用於分頻。PFD比較參考時鐘與反饋時鐘的相位和頻率,產生與兩個時鐘相位頻率成比例的訊號來驅動CP和LF產生VCO的參考電壓,通過反饋使得參考時鐘與反饋時鐘頻率相位相同。相關公式如下:

                                                                    F_{VCO}=F_{CLKIN}\times \frac{M}{D}

                                                                    F_{OUT}=F_{CLKIN}\times \frac{M}{DO}

2. 一般用法說明

2.1 PLL原語

PLL_BASE原語:PLL_BASE提供時鐘偏移校正(Clock deskew)、頻率合成(frequency synthesis)、粗略相移(coarse phase shifting)、佔空比(duty cycle programming)等功能。

PLL_ADV原語:PLL_ADV提供PLL_BASE的所有功能,還提供輸入時鐘切換、與同CMT的DCM連線、動態重配置的功能。

接下來討論時鐘網路偏移校正(clock network deskew)、頻率合成(frequency synthesis)、降低抑制(jitter reduction)三種模式。

2.2 時鐘網路偏移校正(clock network deskew)

PLL和DLL能夠補償時鐘網路延遲。將與參考時鐘CLKIN頻率匹配的時鐘輸出(通常是CLKFBIN)連線到BUFG並反饋到反饋輸入埠CLKFBIN,在這種情況下,所有時鐘都與參考時鐘具有確定的相位關係。

2.3 獨立的頻率合成(frequency synthesis only)

此模式下,PLL不用於校正時鐘網路,而用於為其他模組生成時鐘。此模式下,將PLL的反饋路徑設為INTERNAL,這樣能將所有路由保持在本地,並能減少抖動。此模式下,參考時鐘與輸出時鐘之間沒有相應的相位關係,但輸出時鐘之間具有相應的時鐘關係。如下圖:

2.4 抖動濾波器(jitter filter)

PLL能減少參考時鐘的固有抖動,PLL能夠單獨作為抖動濾波器例項化,在外部時鐘驅動另一個模組之前濾除抖動。作為抖動濾波器,通常假設PLL為緩衝器,並在時鐘輸出埠上再生輸入頻率。通常將BANDWIDTH屬性設為Low能實現更大的抖動濾波,但會導致PLL的靜態偏移增大。

2.5 限制

PLL在VCO工作範圍、最小和最大輸入頻率、佔空比、相移等方面有一些限制。

VCO工作範圍:詳見DS202.Table 74.PLL Specification。

最小和最大輸入頻率:詳見DS202.Table 74.PLL Specification。

佔空比:在給定工作頻率之後,只能實現部分離散值的佔空比。

相移:相移解析度(Phase Shift)PS=1/(8FVCO)或PS=D/(8MFIN)。由於VCO能提供8個相移(每個45°),因而VCO頻率越高,相移解析度越小。相移解析度範圍1/(8FVCO_MIN)~1/(8FVCO_MAX)。

2.6 PLL設計

兩種方法產生PLL:GUI介面(PLL Wizard)、PLL原語。

需要如下資訊:1、參考時鐘週期

                         2、輸出時鐘頻率(最多可以有六個)

                         3、輸出時鐘佔空比(預設為50%)

                         4、輸出時鐘相移(相對於最快輸出時鐘的週期數)

                         5、PLL所需頻寬(預設為OPTIMIZED)

                         6、補償模式

                         7、參考時鐘抖動

輸入時鐘確定:第一步確定輸入時鐘。輸入頻率給D和M值帶來的約束如下:

                                                      D_{MIN}=roundup\frac{f_{IN}}{f_{PFDMAX}}

                                                   D_{MAX}=rounddown\frac{f_{IN}}{f_{PFDMIN}}

                                              M_{MIN}=(roundup\frac{f_{VCOMIN}}{f_{IN}})\times D_{MIN}

                                          M_{MAX}=rounddown\frac{D_{max}\times f_{VCOMAX}}{f_{IN}}

M和D值的確定:輸入時鐘的確定會產生一些可能的M和D值,下一步是確定最佳的M和D值。首先基於VCO目標頻率(VCO理想工作頻率)確定起始M值。

                                                 M_{IDEAL}=\frac{D_{MIN}\times f_{VCOMAX}}{f_{IN}}

目的是使D和M的值儘可能小,同時保持VCO值儘可能高。

2.7 PLL埠

CLKIN1(Input):通用時鐘輸入。

CLKIN2(Input):輔助時鐘輸入,用於動態切換PLL參考時鐘。

CLKFBIN(Input):反饋時鐘輸入。

CLKINSEL(Input):控制輸入選擇器狀態,High=CLKIN1,Low=CLKIN2。

RST(Input):非同步復位訊號,輸入條件改變時,需要復位。

DADDR[4:0](Input):動態重配置地址輸入匯流排,為動態重配置提供重配置地址。 不使用時,必須為所有位分配零。

DI[15:0](Input):動態重配置資料輸入匯流排,提供重配置資料。 不使用時,所有位必須設定為零。

DWE(Input):動態重配置寫使能輸入埠,提供寫使能控制訊號以將DI資料寫入DADDR地址。 不使用時,必須綁低。

DEN(Input):動態重配置使能,提供使能控制訊號以訪問動態重配置功能。 不使用時,必須綁低。

DCLK(Input):動態重配置埠參考時鐘。

REL(Input):在PLL模式下,保持未連線或低電平。

CLKOUT[0:5](Output):使用者可配置時鐘輸出。輸入時鐘和輸出時鐘是相位對齊的。

CLKFBOUT(Output):PLL專用反饋輸出。

CLKOUTDCM[0:5](Ouput):使用者可配置時鐘輸出,只能連線到與PLL相同的CMT內的DCM。

CLKFBDCM(Output):應該是用於連線到DCM反饋時鐘輸入埠。

LOCKED(Output):指示PLL實現相位對齊和頻率匹配。若輸入時鐘停止或違反了相位對齊,則LOCKED置為無效,LOCKED置為無效後必須復位PLL。

DO[15:0](Ouput):動態重配置輸出匯流排,在使用動態重配置時提供PLL資料輸出。

DRDY(Output):動態重配置就緒輸出,為PLL動態重配置功能提供對DEN訊號的響應。

2.8 PLL屬性

COMPENSATION(String):SYSTEM_SYNCHRONOUS(Default)、SOURCE_SYNCHRONOUS、INTERNAL、EXTERNAL、DCM2PLL、PLL2DCM

指定輸入時鐘的PLL相位補償。

BANDWIDTH(String):HIGH、LOW、OPTIMIZED(Default)

指定影響PLL的抖動、相位裕度和其他特性的PLL程式設計演算法。

CLKOUT[0:5]_DIVIDE(Integer):1(Default) ~ 128

與CLKFBOUT_MULT和DIVCLK_DIVIDE值組合將決定輸出頻率。

CLKOUT[0:5]_PHASE(Real):-360.0 ~ 360.0  0.0(Default)

以度數偏移量指定相移。

CLKOUT[0:5]_DUTY_CYCLE(Real):0.01 ~ 0.99  0.50(Default)

以百分比形式指定佔空比。

CLKFBOUT_MULT(Integer):1(Default) ~ 64

與CLKOUT#_DIVIDE值和DIVCLK_DIVIDE值一起確定輸出頻率。

DIVCLK_DIVIDE(Integer):1(Default) ~ 52

輸入頻率分頻。

CLKFBOUT_PHASE(Real):0.0(Default) ~ 360.0

指定反饋時鐘輸出的相位偏移,反饋時鐘相移會導致所有輸出時鐘的負相移。

REF_JITTER(Real):0.000 ~ 0.999  0.100(Default)

允許指定參考時鐘上的預期抖動,以便更好地優化PLL效能。如果未知,BANDWIDTH值為OPTIMIZED將會為輸入時鐘選擇最佳引數。如果已知,則應根據輸入時鐘上預期抖動的UI百分比(最大峰值到峰值)來指定提供的值。

CLKIN1_PERIOD(Real):1.408 ~ 52.630  0.000(Default)

指定PLL CLKIN1輸入的輸入週期(ns)。 解析度降至ps。 此資訊是強制性的,必須提供。預設值0.000為了強制使用者輸入正確的值。

CLKIN2_PERIOD(Real):1.408 ~ 52.630  0.000(Default)

指定PLL CLKIN2輸入的輸入週期(ns)。 解析度降至ps。 此資訊是強制性的,必須提供。預設值0.000為了強制使用者輸入正確的值。

CLKOUT[0:5]_DESKEW_ADJUST(String):PPC 、NONE(Default)

在PPC440系統中使用PLL時使用的固定延遲。

RESET_ON_LOSS_OF_LOCK(String):FALSE(Default)

必須設定為FALSE。

2.9 PLL CLKIN1和CLKIN2的使用

CLKIN1是PLL的通用輸入。 CLKIN2埠用於在工作期間在CLKIN1和CLKIN2之間動態切換,由CLKINSEL埠選擇。 如果同時使用CLKIN1和CLKIN2,並且PLL輸入時鐘由全域性時鐘引腳驅動,則兩個時鐘訊號引腳的放置有幾個限制。 CLKIN1只能來自IBUFG [4-0]。 CLKIN2只能來自IBUFG [9-5]。 此外,CLKIN2必須根據CLKIN1的值對映到特定位置。 這些規則如下:

當PLL輸入時鐘由全域性時鐘樹(BUFGs)驅動時,兩個時鐘輸入必須連線到相同的時鐘輸入型別。 用IBUFG驅動一個PLL時鐘輸入,用BUFG驅動另一個PLL時鐘輸入是不可能的。

下表列出了Virtex-5 FPGA全域性時鐘IBUFG引腳與CLKIN1和CLKIN2的關係。

2.10 PLL時鐘輸入訊號

PLL時鐘源可以來自多個來源,包括:

IBUFG: 全域性時鐘輸入緩衝器,PLL將補償此路徑的延遲。
BUFGCTRL:內部全域性時鐘緩衝器,PLL不會補償此路徑的延遲。
IBUF:不建議使用,因為PLL無法補償一般路由的延遲。 IBUF時鐘輸入必須在路由到PLL之前路由到BUFG。
DCMOUT:PLL的任何DCM輸出都將補償此路徑的延遲。

2.11 計數器控制

PLL輸出計數器使用DIVIDE,DUTY_CYCLE和PHASE的組合提供各種合成時鐘。下圖說明了計數器設定如何影響計數器輸出。

2.12 時鐘移位

通過在參考或反饋路徑中選擇八個相位之一來插入延遲,可以移位PLL輸出時鐘。下圖比較了無延遲、延遲插入反饋路徑、延遲插入參考路徑的情況下的時鐘邊沿。

3. 詳細的VCO和輸出計數器波形

下圖顯示了8個VCO相位輸出和4個不同的計數器輸出。

4. 參考時鐘切換

PLL參考時鐘的動態切換可以使用CLKINSEL引腳,切換是非同步完成的。在使用CLKINSEL來切換時鐘時,PLL應保持在復位狀態,以免出現窄脈衝。如下圖:

當輸入時鐘或反饋時鐘丟失時,PLL將輸出更低或更高頻率的時鐘, 頻率增加/減少會導致輸出時鐘頻率變為原始配置的六倍。

5. PLL使用模型

這裡介紹幾種PLL的使用模型。

5.1 時鐘網路偏移校正(Clock Network Deskew)

PLL的主要用途之一是用於時鐘網路偏移校正。下圖顯示了此模式下的PLL,相關的時鐘波形顯示在右側。其中1、4、6對齊,2、3、5對齊,它們之間延遲了一個BUFG延遲的時間。

反饋的實現有一個限制,即PFD的兩個輸入頻率必須相同,滿足以下公式:

                                                                  \frac{f_{IN}}{D}=f_{FB}=\frac{f_{VCO}}{M}

5.2 帶內部反饋的PLL(PLL with Internal Feedback)

當PLL用作頻率合成器或抖動濾波器且PLL輸入時鐘和PLL輸出時鐘之間不需要相位關係時,PLL反饋可以在PLL內部。此時PLL的效能將會增加。如下圖:

5.3 零延遲緩衝(Zero Delay Buffer)

PLL還可用於生成零延遲緩衝時鐘。如下圖:

5.4 DCM驅動PLL

DCM能夠生成精確的相移時鐘,但是DCM無法降低參考時鐘的抖動,PLL可以降低一個DCM輸出時鐘的抖動。當DCM輸出用於直接驅動PLL時,DCM和PLL必須位於同一個CMT塊內,這是首選實現,因為它在本地專用路由上產生最小量的噪聲。也可以通過將DCM連線到BUFG然後連線到PLL的CLKIN輸入來建立連線。如下圖,相關波形在右側。

5.5 PLL驅動DCM

減少時鐘抖動的第二個選擇是使用PLL驅動DCM,在輸入時鐘抖動進入DCM之前清除,這將改善所有DCM輸出的抖動,但DCM自身產生的抖動仍將傳遞到時鐘輸出。PLL和DCM應位於同一CMT塊中,因為PLL和DCM之間存在專用資源以支援零延遲模式。當PLL和DCM不在同一個CMT塊中時,需通過BUFG來阻止歪斜的可能。一個PLL可以驅動多個DCM。

5.6 PLL和PLL連線

PLL可以級聯,以產生更大範圍的時鐘頻率。級聯PLL需將第一個PLL的輸出連線到BUFG,再連線到第二個PLL的CLKIN引腳。 此路徑提供最低的裝置抖動。第二PLL的輸出時鐘與輸入時鐘之間的相位關係是不確定的。如下圖:

                                         f_{OUTPLL2}=f_{OUTPLL1}\frac{M_{PLL2}}{D_{PLL2}\times O_{PLL2}}=f_{IN}\frac{M_{PLL1}}{D_{PLL1}\times O_{PLL1}}\times \frac{M_{PLL2}}{D_{PLL2}\times O_{PLL2}}

6. 應用指南

PLL可以在很大的範圍內產生可配置輸出集,而DCM只具有基於參考時鐘的固定數量的預定輸出,但當應用需要精細相移或動態可變相移時,DCM可能是更好的解決方案。

PLL應用示例:

CLKOUT0_PHASE = 0; CLKOUT0_DUTY_CYCLE = 0.5; CLKOUT0_DIVIDE = 2;

CLKOUT1_PHASE = 90; CLKOUT1_DUTY_CYCLE = 0.5; CLKOUT1_DIVIDE = 2;

CLKOUT2_PHASE = 0; CLKOUT2_DUTY_CYCLE = 0.25; CLKOUT2_DIVIDE = 4;

CLKOUT3_PHASE = 90; CLKOUT3_DUTY_CYCLE = 0.5; CLKOUT3_DIVIDE = 8;

CLKOUT4_PHASE = 0; CLKOUT4_DUTY_CYCLE = 0.5; CLKOUT4_DIVIDE = 8;

CLKOUT5_PHASE = 135; CLKOUT5_DUTY_CYCLE = 0.5; CLKOUT5_DIVIDE = 8;

CLKFBOUT_PHASE = 0; CLKFBOUT_MULT = 8;

DIVCLK_DIVIDE = 1;

CLKIN1_PERIOD = 10.0;