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 * ?? ?? ?? ?? ?? ?? * Global Buffer MUX * ?? ?? ?? ?? ?? ?? * DCM * | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | * DCM * ?? ?? ?? ?? ?? ?? * Global Buffer MUX * ?? ?? ?? ?? ?? ?? * DCM * ? DCM是全局時鐘網絡可選的一部分一般,時鐘通過一個“全局輸入buffer”和“全局時鐘buffer” 進入全局時鐘網絡。如下所示
GCLK --->( IBUFG ---> BUFG) ---> low skew global clock network
在需要的時候,DCM也成為全局時鐘網絡的一環。
GCLK --->( IBUFG ---> DCM ---> BUFG) ---------> low skew global clock network ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ^ ?? ?? ?? ?? ?? ?? ?? ?? ?? ??? | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? | CLKFB ?? ?? ?? ?? ?? | ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? |________________| ? 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的狀態。 ? Spartan-3 DCM的兼容性S3 的DCM和 Virtex-II 以及pro的DCM 功能基本相同。但是S3 DCM的技術屬于3代技術,因此在抗噪性能、相移能力方面有進一步提高。(客觀的說,對我們的普通應用,不是特別重要。)
但是和Spartan-2系列相比,有很大改進。S2系列不叫DCM叫DLL,可見DFS和PS等功能完全是新加入的,所以S2系列其實除了二倍頻幾乎沒有倍頻和分頻能力。從這點來講,S3真的是用起來很爽了。 ? DCM 輸入時鐘的限制和所有物理器件一樣,DCM的工作范圍也是受限的。由于DLL和DFS的要求各不相同,因此DCM的輸入頻率的限制也視乎是否同時使用DLL和DFS還是單獨使用其中之一。如果同時使用,則取限制較嚴格者作為整個DCM系統的限制。我們來看兩者的獨立限制。
Function ?? ?? ?? ??? Min Freq. ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??? Max Freq. DFS ?? ?? ?? ?? ?? ?? CLKIN_FREQ_FX_MIN~ 1.00 MHz* ?? ?? ?? ?? ?? CLKIN_FREQ_FX_MAX~280 MHz* DLL low mode ?? CLKIN_FREQ_DLL_LF_MIN~ 18 MHz* ?? ?? ?? CLKIN_FREQ_DLL_LF_MAX~ 180 MHz* DLL high mode CLKIN_FREQ_DLL_HF_MIN~ 48 MHz* ?? ?? ?? CLKIN_FREQ_DLL_HF_MIN~280 MHz*
呵呵,這部分內容不用記哦,需要的時候查一下軟件或者手冊就可以了。只要明白“CLKIN輸入頻率有限制,而且DLL、DFS同時使用時取其嚴格者” 這些道理就可以了。
除了時鐘限制之外,對于時鐘的質量也有一定限制,主要有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. 所有其他用戶設置都保存到XAW(Xilinx 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種文件。 |