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;