【轉】Spartan-3 DCM使用詳解

 DCM使用詳解

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

 

pdf

 

DCM主要功能

1. 分頻倍頻:DCM可以將輸入時鐘進行multiply或者divide,從而得到新的輸出時鐘。
2.
skewDCM還可以消除clockskew,所謂skew就是由於傳輸引起的同一時鐘到達不同地點的延遲差。
3.
相移:DCM還可以實現對輸入時鐘的相移輸出,這個相移一般是時鐘週期的一個分數。
4.
全局時鐘:DCMFPGA內部的全局時鐘分配網絡緊密結合,因此性能優異。
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,所以時鐘質量不會很好。

頻率綜合器輸出(CLKFXCLKFX180):是CLKINM/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。不過能支持半分頻,比用頻率綜合器方便。

倍頻輸出(CLK2XCLK2X180):CLKIN2倍頻

時鐘conditioning、佔空比調整:這個對所有時鐘輸出都施加,佔空比爲50%

1/4
週期相移輸出(CLK0/90/180/270):是CLKIN1/4週期相移輸出。

半週期相移輸出(CLK0/180CLK2X/180CLKFX/180):相差爲180度的成對時鐘輸出。

相移精度:最高精度爲時鐘週期的1/256

時鐘輸出:9
  
到全局時鐘網的時鐘輸出:最多9箇中的4
  
General purpose互聯:最多9
  
到輸出腳:最多9
--
可見9個時鐘輸出可以隨意鏈接內部信號或者外部輸出,但是進入全局時鐘網的路徑最多隻有4個。

DCM的位置在哪?

我們以Spartan3系列爲例。
FPGA
看上去就是一個四方形。最邊緣是IO pad了。
除去IO pad,內部還是一個四方形。
四個角上各趴着一個DCM
上邊緣和下邊緣中間則各趴着一個全局BufferMUX
這樣的好處是四個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合成新的頻率。
合成的參數是:Mmultiplier)和 Ddivisor)。通過MD的組合實現各種倍頻和分頻。
   
如果不使用DLL,則DFS的合成頻率和CLKIN就不具有相位關係,因爲沒有延遲補償,相位就不再同步。

3. PS
相位偏移

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

4.
狀態邏輯

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

 

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

DCM_BASE

DCM_BASE
是基本數字時鐘管理模塊的縮寫,是相位和頻率可配置的數字鎖相環電路,常用於FPGA系統中複雜的時鐘管理。如果需要頻率和相位動態重配置,則可以選用DCM_ADV原語;如果需要相位動態偏移,可使用DCM_PS原語。DCM系列原語的RTL結構如圖3-8所示。

模塊接口信號的說明如表3-8所列。 

點擊看大圖

 

DCM_BASE組件可以通過XilinxIP 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
信號的分頻比,可爲132之間的任意整數
.CLKFX_MULTIPLY(4),
// CLKFX
信號的倍頻比,可爲232之間的任意整數
.CLKIN_DIVIDE_BY_2("FALSE"),
//
輸入信號2分頻的使能信號,可設置爲TRUE/FALSE
.CLKIN_PERIOD(10.0),
//
指定輸入時鐘的週期,單位爲ns,數值範圍爲1.25~1000.00
.CLKOUT_PHASE_SHIFT("NONE"),
//
指定移相模式,可設置爲NONEFIXED
.CLK_FEEDBACK("1X"),
//
指定反饋時鐘的頻率,可設置爲NONE1X2X。相應的頻率關係都是針對CLK0而言的。
.DCM_PERFORMANCE_MODE("MAX_SPEED"),
// DCM
模塊性能模式,可設置爲 MAX_SPEED MAX_RANGE
.DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
//
抖動調整,可設置爲源同步、系統同步或0~15之間的任意整數
.DFS_FREQUENCY_MODE("LOW"),
//
數字頻率合成模式,可設置爲LOWHIGH 兩種頻率模式
.DLL_FREQUENCY_MODE("LOW"),
// DLL
的頻率模式,可設置爲LOWHIGHHIGH_SER
.DUTY_CYCLE_CORRECTION("TRUE"),
//
設置是否採用雙週期校正,可設爲TRUEFALSE
.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級結構示意圖

 

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

Spartan-3 DCM的兼容性

S3 DCM Virtex-II 以及proDCM 功能基本相同。但是S3 DCM的技術屬於3代技術,因此在抗噪性能、相移能力方面有進一步提高。(客觀的說,對我們的普通應用,不是特別重要。)

      
但是和Spartan-2系列相比,有很大改進。S2系列不叫DCMDLL,可見DFSPS等功能完全是新加入的,所以S2系列其實除了二倍頻幾乎沒有倍頻和分頻能力。從這點來講,S3真的是用起來很爽了。

 

DCM 輸入時鐘的限制

和所有物理器件一樣,DCM的工作範圍也是受限的。由於DLLDFS的要求各不相同,因此DCM的輸入頻率的限制也視乎是否同時使用DLLDFS還是單獨使用其中之一。如果同時使用,則取限制較嚴格者作爲整個DCM系統的限制。我們來看兩者的獨立限制。

點擊看大圖

 

點擊看大圖


   
呵呵,這部分內容不用記哦,需要的時候查一下軟件或者手冊就可以了。只要明白“CLKIN輸入頻率有限制,而且DLLDFS同時使用時取其嚴格者這些道理就可以了。

   
除了時鐘限制之外,對於時鐘的質量也有一定限制,主要有3個:
1. CLKIN cycle-to-cycle jitter
:約束了前後兩個CLKIN週期的差異;
2. CLKIN period jitter
:約束了100萬個cycle中最大週期和最小週期之間的差異;
3. CLKFB path delay variation
:約束了從外部進來的反饋迴路的延遲波動,這種延遲波動在概念上其實和jitter如出一轍。
具體數值請查手冊,知道有這麼回事就可以了。

 

LOCKED信號的行爲方式

LOCKED信號用於指示整個DCM系統已經和CLKIN同步,從LOCKED信號有效開始,輸出時鐘纔可以使用,在此之前,輸出時鐘可能會處於各種複雜的不穩定狀態。我們來看一下LOCKED信號的行爲狀態機。

FPGA
配置:
    if
CLKIN已經穩定) next_state = 判斷同步;
    else                         next_state = RST_DCM

判斷同步:
    if
(已經同步)          next_state = 判斷同步;
    else                         next_state =
同步失敗;
同步失敗:                    next_state = RST_DCM
RST_DCM
                  next_state = FPGA配置;

現在來看看各個狀態下的輸出。

case (state)
    FPGA
配置: LOCKED = 0
   
判斷同步:   LOCKED = 1
   
同步失敗:   LOCKED = 0
    RST_DCM
LOCKED = 0
endcase

 

RST 信號——重啓鎖定

RST信號用於在時鐘不穩定或者失去鎖定時,將DCM的相關功能重置,從而重新啓動鎖定追蹤。
   
作爲一個輸入信號,RST無法被DCM自身置位,因此需要我們的應用設計來控制這個RST信號,否則需將其接地。
   
置位RST會將延遲tap的位置置0,因此可能會產生glitch或者是duty cycle 發生變化,另外相位偏移也會重置回到默認值。

 

DCM 生成嚮導

安裝了ISE就能得到一系列accessories。利用其中的Architecture Wizard 我們可以生成DCM模塊。生成的DCM將產生3種輸出:

1.
一個例化了DCM的邏輯綜合文件(採用生產商特定格式的VHDL / Verilog
2.
一個UCF文件控制特定實現
3.
所有其他用戶設置都保存到XAWXilinx Architecture Wizard)文件中。

接下來描述一下向導使用步驟。

1.
ISE或者Arch wizard中啓動界面;
2.
第一個頁面做基本配置:路徑、XAW文件名、VHDL / Verilog選擇、綜合工具、FPGA型號;
3.
進行General setup,一看就明白,不細說,注意一下幾點:
    - CLKIN source
如果選 external DCM CLKIN 會自動連接到 IBUFG
    - Feedback
如果選 internal 則反饋來自 BUFG
4.
高級設置
    -
選擇FPGA的配置過程是否包含DCM的鎖定,如果是,則配置完成信號DONE將在LOCKED信號有效後方能有效。
    -
選擇CLKIN是否要除2。由於DCM的輸入頻率有限,對於過高的輸入時鐘通過除2使之可用。
    - Deskew
調整,這個選項建議在諮詢xilinx工程師後再使用。
5.
時鐘輸出口 Buffer 設置
    -
默認情況下所有輸出口都鏈接 BUFG 全局時鐘網絡入口
    -
由於全局時鐘網絡的入口有限,用戶可以定製時鐘輸出口連接到其他類型的Buffer
       - Global Buffer
:進入全局時鐘網絡的入口Buffer,共有4個,簡稱BUFG
       - Enabled Buffer
:還是上面的4個全局時鐘Buffer,但是配置爲有使能信號控制,簡稱BUFGCE
       - Clock MUX
:還是上面的4個全局時鐘Buffer,但是配置爲 2-to-1 MUX類型,由S信號控制選出,簡稱BUFGMUX
       - Low skew line
:沒有buffer了,只能使用 skew 比較小的連線
       - Local Routing
:連到本地,skew的要求不是很嚴格
       - None
:禁止輸出
    -
對於Enabled Buffer類型和Clock Mux類型,需要指定En口的名字
    -
需要爲輸出時鐘信號指定名字或者使用默認
6.
設置DFS
    -
設置目標輸出頻率,然後按calculate,自動生成 M/D 值和 Jitter
    -
或者手動設置 M/D 值,然後按calculate,自動生成頻率和 Jitter
7.
最後輸出所需的3種文件。

 

 

參考資料

1) 【翻譯】DCM大魔頭——今天一次把它搞定

http://www.socvista.com/bbs/viewthread.php?tid=1232&extra=&page=1

 

2) FPGA開發實用教程 4 Xilinx公司原語的使用方法1

http://openhw.eefocus.com/html/08-05/37457.shtml 

 

3) Using Digital Clock Managers (DCMs) in Spartan-3 FPGAs

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章