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的參考電壓,通過反饋使得參考時鐘與反饋時鐘頻率相位相同。相關公式如下:
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值帶來的約束如下:
M和D值的確定:輸入時鐘的確定會產生一些可能的M和D值,下一步是確定最佳的M和D值。首先基於VCO目標頻率(VCO理想工作頻率)確定起始M值。
目的是使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的兩個輸入頻率必須相同,滿足以下公式:
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的輸出時鐘與輸入時鐘之間的相位關係是不確定的。如下圖:
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;