歡迎您光臨本站 登入註冊首頁

DCM使用詳解

admin @ 2014-03-26 , reply:0

概述

本文翻譯自UsingDigitalClockManagers(DCMs)inSpartan-3FPGAs DCM主要功能1.分頻倍頻:DCM可以將輸入時鐘進行multiply或者divide……

本文翻譯自Using Digital Clock Managers (DCMs) in Spartan-3 FPGAs 

DCM主要功能
1. 分頻倍頻:DCM可以將輸入時鐘進行multiply或者divide,從而得到新的輸出時鐘。
2. 去skew:DCM還可以消除clock的skew,所謂skew就是由於傳輸引起的同一時鐘到達不同地點的延遲差。
3. 相移:DCM還可以實現對輸入時鐘的相移輸出,這個相移一般是時鐘周期的一個分數。
4. 全局時鐘:DCM和FPGA內部的全局時鐘分配網路緊密結合,因此性能優異。
5. 電平轉換:通過DCM,可以輸出不同電平標準的時鐘。 

DCM的特點與能力(Spartan-3系列為例)

  • 數量:4 DCM / FPGA(也有例外)
    -- 應該夠用了
  • 數字頻率綜合器輸入(CLKIN):1-280MHz
  • 延遲鎖相環輸入(CLKIN):18-280MHz
  • 時鐘輸入源(CLKIN):
      Global buffer input pad
      Global buffer output
      General-purpose I/O (no deskew)
      Internal logic (no deskew)
    -- 上面最後兩個分別是外部的普通IO口和內部的邏輯,沒有deskew,所以時鐘質量不會很好。
  • 頻率綜合器輸出(CLKFX、CLKFX180):是CLKIN的M/D倍,其中
     M=2..32
     D=1..32
    -- 這樣看來最大能倍頻32倍,最小能16分頻。
  • 時鐘dividor輸出(CLKDV):是CLKIN的下列分頻
      1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 9, 10, 11, 12, 13, 14, 15, or 16
    -- 發現沒有,最大的分頻也是16。不過能支持半分頻,比用頻率綜合器方便。
  • 倍頻輸出(CLK2X、CLK2X180):CLKIN的2倍頻
  • 時鐘conditioning、占空比調整:這個對所有時鐘輸出都施加,占空比為50%。
  • 1/4周期相移輸出(CLK0/90/180/270):是CLKIN的1/4周期相移輸出。
  • 半周期相移輸出(CLK0/180、CLK2X/180、CLKFX/180):相差為180度的成對時鐘輸出。
  • 相移精度:最高精度為時鐘周期的1/256。
  • 時鐘輸出:9個
      到全局時鐘網的時鐘輸出:最多9個中的4個
      到General purpose互聯:最多9個
      到輸出腳:最多9個
    -- 可見9個時鐘輸出可以隨意鏈接內部信號或者外部輸出,但是進入全局時鐘網的路徑最多只有4個。

DCM的位置在哪?
我們以Spartan3系列為例。
FPGA看上去就是一個四方形。最邊緣是IO pad了。
除去IO pad,內部還是一個四方形。
四個角上各趴著一個DCM。
上邊緣和下邊緣中間則各趴著一個全局Buffer的MUX。
這樣的好處是四個DCM的輸出可以直接連接到全局Buffer的入口。
下面是手繪簡圖,很醜是吧,呵呵。
 
 

DCM是全局時鐘網路可選的一部分
一般,時鐘通過一個“全局輸入buffer”和“全局時鐘buffer” 進入全局時鐘網路。如下所示
GCLK --->( IBUFG ---> BUFG) ---> low skew global clock network
在需要的時候,DCM也成為全局時鐘網路的一環。
 
 

DCM 內部構成一覽
1. DLL 延遲鎖定環
    說是延遲鎖定環,但是我覺得叫做延遲補償環更加貼切。因為DLL的主要功能是消除輸入時鐘和輸出時鐘之間的延遲,使得輸入輸出在外部看來是透明連接。
    實現這種功能的原理是:DLL通過輸出時鐘CLK0或者CLK2X觀察實際的線路延遲,然後在內部進行補償。
    一句話,DLL的核心功能是無延遲。
    DLL的輸出是CLK0, CLK90, CLK180, CLK270, CLK2X, CLK2X180, 和 CLKDV。

2. DFS 數字頻率綜合
    DFS的主要功能是利用CLKIN合成新的頻率。
    合成的參數是:M(multiplier)和 D(divisor)。通過MD的組合實現各種倍頻和分頻。
    如果不使用DLL,則DFS的合成頻率和CLKIN就不具有相位關係,因為沒有延遲補償,相位就不再同步。

3. PS 相位偏移
    注意這個相位偏移不是DLL中輸出CLK90/180/270用的。這個PS可以令DCM的所有9個輸出信號都進行相位的偏移。偏移的單位是CLKIN的一個分數。
    也可以在運行中進行動態偏移調整,調整的單位是時鐘的1/256。
這個功能我們平時不常用。

4. 狀態邏輯
    這個部分由 LOCKED 信號和 STATUS[2:0] 構成。LOCKED信號指示輸出是否和CLKIN同步(同相)。STATUS則指示DLL和PS的狀態。 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

DCM_BASE
DCM_BASE是基本數字時鐘管理模塊的縮寫,是相位和頻率可配置的數字鎖相環電路,常用於FPGA系統中複雜的時鐘管理。如果需要頻率和相位動態重配置,則可以選用DCM_ADV原語;如果需要相位動態偏移,可使用DCM_PS原語。DCM系列原語的RTL結構如圖3-8所示。
模塊介面信號的說明如表3-8所列。 
 
DCM_BASE組件可以通過Xilinx的IP Wizard嚮導產生,也可以直接通過下面的例化代碼直接使用。其Verilog的例化代碼模板為:

// DCM_BASE: 基本數字時鐘管理電路(Base Digital Clock Manager Circuit)
// 適用晶元:Virtex-4/5
// Xilinx HDL庫嚮導版本,ISE 9.1
DCM_BASE #(
.CLKDV_DIVIDE(2.0),
// CLKDV分頻比可以設置為: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
// 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
.CLKFX_DIVIDE(1), // Can be any integer from 1 to 32
// CLKFX信號的分頻比,可為1到32之間的任意整數
.CLKFX_MULTIPLY(4),
// CLKFX信號的倍頻比,可為2到32之間的任意整數
.CLKIN_DIVIDE_BY_2("FALSE"),
// 輸入信號2分頻的使能信號,可設置為TRUE/FALSE
.CLKIN_PERIOD(10.0),
// 指定輸入時鐘的周期,單位為ns,數值範圍為1.25~1000.00。
.CLKOUT_PHASE_SHIFT("NONE"),
// 指定移相模式,可設置為NONE或FIXED
.CLK_FEEDBACK("1X"),
// 指定反饋時鐘的頻率,可設置為NONE、1X或2X。相應的頻率關係都是針對CLK0而言的。
.DCM_PERFORMANCE_MODE("MAX_SPEED"),
// DCM模塊性能模式,可設置為 MAX_SPEED 或 MAX_RANGE
.DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
// 抖動調整,可設置為源同步、系統同步或0~15之間的任意整數
.DFS_FREQUENCY_MODE("LOW"),
// 數字頻率合成模式,可設置為LOW或HIGH 兩種頻率模式
.DLL_FREQUENCY_MODE("LOW"),
// DLL的頻率模式,可設置為LOW、HIGH或HIGH_SER
.DUTY_CYCLE_CORRECTION("TRUE"),
// 設置是否採用雙周期校正,可設為TRUE或FALSE
.FACTORY_JF(16'hf0f0),
// 16比特的JF因子參數
.PHASE_SHIFT(0),
// 固定相移的數值,可設置為 -255 ~ 1023之間的任意整數
.STARTUP_WAIT("FALSE")
// 等DCM鎖相后再延遲配置DONE管腳,可設置為TRUE/FALSE
) DCM_BASE_inst (
.CLK0(CLK0), // 0度移相的DCM時鐘輸出
.CLK180(CLK180), // 180度移相的DCM時鐘輸出
.CLK270(CLK270), // 270度移相的DCM時鐘輸出
.CLK2X(CLK2X), // DCM模塊的2倍頻輸出
.CLK2X180(CLK2X180), // 經過180度相移的DCM模塊2倍頻輸出
.CLK90(CLK90), // 90度移相的DCM時鐘輸出
.CLKDV(CLKDV), // DCM模塊的分頻輸出,分頻比為CLKDV_DIVIDE
.CLKFX(CLKFX), // DCM合成時鐘輸出,分頻比為(M/D)
.CLKFX180(CLKFX180), // 180度移相的DCM合成時鐘輸出
.LOCKED(LOCKED), // DCM鎖相狀態輸出信號
.CLKFB(CLKFB), // DCM模塊的反饋時鐘信號
.CLKIN(CLKIN), // DCM模塊的時鐘輸入信號
.RST(RST) // DCM 模塊的非同步複位信號
);
// 結束DCM_BASE模塊的例化過程
在綜合結果分析時,DCM系列原語的RTL結構如圖3-36所示。
 
圖3-36 DCM模塊的RTL級結構示意圖 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

[admin via 研發互助社區 ] DCM使用詳解已經有8809次圍觀

http://cocdig.com/docs/show-post-42957.html