如何使用DCM,DCM使用說明
DCM 內(nèi)部構(gòu)成一覽
1. DLL 延遲鎖定環(huán)
說是延遲鎖定環(huán),但是我覺得叫做延遲補償環(huán)更加貼切。因為DLL的主要功能是消除輸入時鐘和輸出時鐘之間的延遲,使得輸入輸出在外部看來是透明連接。
實現(xiàn)這種功能的原理是:DLL通過輸出時鐘CLK0或者CLK2X觀察實際的線路延遲,然后在內(nèi)部進行補償。
一句話,DLL的核心功能是無延遲。
DLL的輸出是CLK0, CLK90, CLK180, CLK270, CLK2X, CLK2X180, 和 CLKDV。
2. DFS 數(shù)字頻率綜合
DFS的主要功能是利用CLKIN合成新的頻率。
合成的參數(shù)是:M(multiplier)和 D(divisor)。通過MD的組合實現(xiàn)各種倍頻和分頻。
如果不使用DLL,則DFS的合成頻率和CLKIN就不具有相位關(guān)系,因為沒有延遲補償,相位就不再同步。
3. PS 相位偏移
注意這個相位偏移不是DLL中輸出CLK90/180/270用的。這個PS可以令DCM的所有9個輸出信號都進行相位的偏移。偏移的單位是CLKIN的一個分?jǐn)?shù)。
也可以在運行中進行動態(tài)偏移調(diào)整,調(diào)整的單位是時鐘的1/256。
這個功能我們平時不常用。
4. 狀態(tài)邏輯
這個部分由 LOCKED 信號和 STATUS[2:0] 構(gòu)成。LOCKED信號指示輸出是否和CLKIN同步(同相)。STATUS則指示DLL和PS的狀態(tài)。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
DCM_BASE
DCM_BASE是基本數(shù)字時鐘管理模塊的縮寫,是相位和頻率可配置的數(shù)字鎖相環(huán)電路,常用于FPGA系統(tǒng)中復(fù)雜的時鐘管理。如果需要頻率和相位動態(tài)重配置,則可以選用DCM_ADV原語;如果需要相位動態(tài)偏移,可使用DCM_PS原語。DCM系列原語的RTL結(jié)構(gòu)如圖3-8所示。
模塊接口信號的說明如表3-8所列。
DCM_BASE組件可以通過Xilinx的IP Wizard向?qū)Мa(chǎn)生,也可以直接通過下面的例化代碼直接使用。其Verilog的例化代碼模板為:
// DCM_BASE: 基本數(shù)字時鐘管理電路(Base Digital Clock Manager Circuit)
// 適用芯片:Virtex-4/5
// Xilinx HDL庫向?qū)О姹?,ISE 9.1
DCM_BASE #(
.CLKDV_DIVIDE(2.0),
// CLKDV分頻比可以設(shè)置為: 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之間的任意整數(shù)
.CLKFX_MULTIPLY(4),
// CLKFX信號的倍頻比,可為2到32之間的任意整數(shù)
.CLKIN_DIVIDE_BY_2(FALSE),
// 輸入信號2分頻的使能信號,可設(shè)置為TRUE/FALSE
.CLKIN_PERIOD(10.0),
// 指定輸入時鐘的周期,單位為ns,數(shù)值范圍為1.25~1000.00。
.CLKOUT_PHASE_SHIFT(NONE),
// 指定移相模式,可設(shè)置為NONE或FIXED
.CLK_FEEDBACK(1X),
// 指定反饋時鐘的頻率,可設(shè)置為NONE、1X或2X。相應(yīng)的頻率關(guān)系都是針對CLK0而言的。
.DCM_PERFORMANCE_MODE(MAX_SPEED),
// DCM模塊性能模式,可設(shè)置為 MAX_SPEED 或 MAX_RANGE
.DESKEW_ADJUST(SYSTEM_SYNCHRONOUS),
// 抖動調(diào)整,可設(shè)置為源同步、系統(tǒng)同步或0~15之間的任意整數(shù)
.DFS_FREQUENCY_MODE(LOW),
// 數(shù)字頻率合成模式,可設(shè)置為LOW或HIGH 兩種頻率模式
.DLL_FREQUENCY_MODE(LOW),
// DLL的頻率模式,可設(shè)置為LOW、HIGH或HIGH_SER
.DUTY_CYCLE_CORRECTION(TRUE),
// 設(shè)置是否采用雙周期校正,可設(shè)為TRUE或FALSE
.FACTORY_JF(16'hf0f0),
// 16比特的JF因子參數(shù)
.PHASE_SHIFT(0),
// 固定相移的數(shù)值,可設(shè)置為 -255 ~ 1023之間的任意整數(shù)
.STARTUP_WAIT(FALSE)
// 等DCM鎖相后再延遲配置DONE管腳,可設(shè)置為TRUE/FALSE
) DCM_BASE_inst (
.CLK0(CLK0), // 0度移相的DCM時鐘輸出
.CLK180(CLK180), // 180度移相的DCM時鐘輸出
.CLK270(CLK270), // 270度移相的DCM時鐘輸出
.CLK2X(CLK2X), // DCM模塊的2倍頻輸出
.CLK2X180(CLK2X180), // 經(jīng)過180度相移的DCM模塊2倍頻輸出
.CLK90(CLK90), // 90度移相的DCM時鐘輸出
.CLKDV(CLKDV), // DCM模塊的分頻輸出,分頻比為CLKDV_DIVIDE
.CLKFX(CLKFX), // DCM合成時鐘輸出,分頻比為(M/D)
評論