在 Xilinx 系列 FPGA 產品中,全局時鐘網絡是一種全局布線資源,它可以保證時鐘信號到達各個目標邏輯單元的時延基本相同。其時鐘分配樹結構如圖1所示。
針對不同類型的器件,Xilinx公司提供的全局時鐘網絡在數量、性能等方面略有區(qū)別,下面以Virtex-4系列芯片為例,簡單介紹FPGA全局時鐘網絡結構。
Virtex- 4系列FPGA利用1.2V、90nm三柵極氧化層技術制造而成,與前一代器件相比,具備靈活的時鐘解決方案,多達80個獨立時鐘與20個數字時鐘管理器,差分全局時鐘控制技術將歪斜與抖動降至最低。以全銅工藝實現的全局時鐘網絡,加上專用時鐘緩沖與驅動結構,從而可使全局時鐘到達芯片內部所有的邏輯可配置單元,且I/O單元以及塊RAM的時延和抖動最小,可滿足高速同步電路對時鐘觸發(fā)沿的苛刻需求。
在FPGA設計中,FPGA全局時鐘路徑需要專用的時鐘緩沖和驅動,具有最小偏移和最大扇出能力,因此最好的時鐘方案是由專用的全局時鐘輸入引腳驅動的單個主時鐘,去鐘控設計項目中的每一個觸發(fā)器。只要可能就應盡量在設計項目中采用全局時鐘,因為對于一個設計項目來說,全局時鐘是最簡單和最可預測的時鐘。
在軟件代碼中,可通過調用原語IBUFGP來使用全局時鐘。IBUFGP的基本用法是:
IBUFGP U1(.I(clk_in), .O(clk_out));
全局時鐘網絡對FPGA設計性能的影響很大,所以本書在第11章還會更深入、更全面地介紹全局時鐘網絡以及相關使用方法。
DCM模塊的使用
1.DCM模塊的組成和功能介紹
數字時鐘管理模塊(Digital Clock Manager,DCM)是基于Xilinx的其他系列器件所采用的數字延遲鎖相環(huán)(DLL,Delay Locked Loop)模塊。在時鐘的管理與控制方面,DCM與DLL相比,功能更強大,使用更靈活。DCM的功能包括消除時鐘的延時、頻率的合成、時鐘相位的調整等系統(tǒng)方面的需求。DCM的主要優(yōu)點在于:
?。?)實現零時鐘偏移(Skew),消除時鐘分配延遲,并實現時鐘閉環(huán)控制;
?。?)時鐘可以映射到PCB上用于同步外部芯片,這樣就減少了對外部芯片的要求,將芯片內外的時鐘控制一體化,以利于系統(tǒng)設計。對于DCM模塊來說,其關鍵參數為輸入時鐘頻率范圍、輸出時鐘頻率范圍、輸入/輸出時鐘允許抖動范圍等。
DCM 共由四部分組成,如圖2所示。其中最底層仍采用成熟的DLL模塊;其次分別為數字頻率合成器(DFS,Digital Frequency Synthesizer)、數字移相器(DPS,Digital Phase Shifter)和數字頻譜擴展器(DSS,Digital Spread Spectrum)。不同的芯片模塊的DCM輸入頻率范圍是不同的,例如:
1)DLL模塊
DLL 主要由一個延時線和控制邏輯組成。延時線對時鐘輸入端CLKIN產生一個延時,時鐘分布網線將該時鐘分配到器件內的各個寄存器和時鐘反饋端CLKFB;控制邏輯在反饋時鐘到達時采樣輸入時鐘以調整二者之間的偏差,實現輸入和輸出的零延時,如圖3所示。具體工作原理是:控制邏輯在比較輸入時鐘和反饋時鐘的偏差后,調整延時線參數,在輸入時鐘后不停地插入延時,直到輸入時鐘和反饋時鐘的上升沿同步,鎖定環(huán)路進入“鎖定”狀態(tài),只要輸入時鐘不發(fā)生變化,輸入時鐘和反饋時鐘就保持同步。DLL可以被用來實現一些電路以完善和簡化系統(tǒng)級設計,如提供零傳播延遲,低時鐘相位差和高級時鐘區(qū)域控制等。
在Xilinx芯片中,典型的DLL標準原型如圖4所示,其管腳分別說明如下:
CLKIN(源時鐘輸入):DLL輸入時鐘信號,通常來自IBUFG或BUFG。
CLKFB(反饋時鐘輸入):DLL時鐘反饋信號,該反饋信號必須源自CLK0或CLK2X,并通過IBUFG或BUFG相連。
RST(復位):控制DLL的初始化,通常接地。
CLK0(同頻信號輸出):與CLKIN無相位偏移;CLK90與CLKIN 有90度相位偏移;CLK180與CLKIN 有180度相位偏移;CLK270與CL KIN有270度相位偏移。
CLKDV(分頻輸出):DLL輸出時鐘信號,是CLKIN的分頻時鐘信號。DLL支持的分頻系數為1.5,2,2.5,3,4,5,8 和16。
CLK2X(兩倍信號輸出):CLKIN的2倍頻時鐘信號。
LOCKED(輸出鎖存):為了完成鎖存,DLL可能要檢測上千個時鐘周期。當DLL完成鎖存之后,LOCKED有效。
在FPGA 設計中,消除時鐘的傳輸延遲,實現高扇出最簡單的方法就是用DLL,把CLK0 與CLKFB相連即可。利用一個DLL可以實現2倍頻輸出,如圖5所示。利用兩個DLL 就可以實現4倍頻輸出,如圖6所示。
2)數字頻率合成器
DFS 可以為系統(tǒng)產生豐富的頻率合成時鐘信號,輸出信號為CLKFB和CLKFX180,可提供輸入時鐘頻率分數倍或整數倍的時鐘輸出頻率方案,輸出頻率范圍為 1.5~320 MHz(不同芯片的輸出頻率范圍是不同的)。這些頻率基于用戶自定義的兩個整數比值,一個是乘因子(CLKFX_ MULTIPLY),另外一個是除因子(CLKFX_ DIVIDE),輸入頻率和輸出頻率之間的關系為:
比如取CLKFX_MULTIPLY = 3,CLKFX_DIVIDE = 1,PCB上源時鐘為100 MHz,通過DCM 3倍頻后,就能驅動時鐘頻率在300 MHz的FPGA,從而減少了板上的時鐘路徑,簡化板子的設計,提供更好的信號完整性。
3) 數字移相器
DCM 具有移動時鐘信號相位的能力,因此能夠調整I/O信號的建立和保持時間,能支持對其輸出時鐘進行0度、90度、180度、270度的相移粗調和相移細調。其中,相移細調對相位的控制可以達到1%輸入時鐘周期的精度(或者50 ps),并且具有補償電壓和溫度漂移的動態(tài)相位調節(jié)能力。對DCM輸出時鐘的相位調整需要通過屬性控制PHASE_SHIFT來設置。PS設置范圍為 -255到 255,比如輸入時鐘為200 MHz,需要將輸出時鐘調整 0.9 ns的話,PS =(0.9ns/ 5ns)?56 = 46。如果PHASE_ SHIFT值是一個負數,則表示時鐘輸出應該相對于CLKIN向后進行相位移動;如果PHASE_SHIFT是一個正值,則表示時鐘輸出應該相對于 CLKIN向前進行相位移動。
移相用法的原理圖與倍頻用法的原理圖很類似,只用把CLK2X輸出端的輸出緩存移到CLK90、CLK180或者CLK270端即可。利用原時鐘和移相時鐘與計數器相配合也可以產生相應的倍頻。
4) 數字頻譜合成器
Xilinx 公司第一個提出利用創(chuàng)新的擴頻時鐘技術來減少電磁干擾(EMI)噪聲輻射的可編程解決方案。最先在FPGA中實現電磁兼容的EMIControl技術,是利用數字擴頻技術(DSS)通過擴展輸出時鐘頻率的頻譜來降低電磁干擾,減少用戶在電磁屏蔽上的投資。數字擴頻(DSS)技術通過展寬輸出時鐘的頻譜,來減少EMI和達到FCC要求。這一特點使設計者可極大地降低系統(tǒng)成本,使電路板重新設計的可能性降到最小,并不再需要昂貴的屏蔽,從而縮短了設計周期。
2.DCM模塊IP Core的使用
例:在ISE中調用DCM模塊,完成50MHz時鐘信號到75MHz時鐘信號的轉換。
1)在源文件進程中,雙擊“Create New Source”;然后在源文件窗口,選擇“IP (CoreGen & Architecture Wizard)”,輸入文件名“my_dcm”;再點擊“Next”,在選擇類型窗口中,“FPGA Features and Design –
《2》 點擊“Next”,“Finish”進入Xilinx 時鐘向導的建立窗口,如圖8所示。ISE默認選中CLK0和 LOCKED這兩個信號,用戶根據自己需求添加輸出時鐘。在“Input Clock Frequency”輸入欄中敲入輸入時鐘的頻率或周期,單位分別是MHz和ns,其余配置保留默認值。為了演示,這里添加了CLKFX 信號,并設定輸入時鐘為單端信號,頻率為50MHz,其余選項保持默認值。
《3》 點擊“Next”,進入時鐘緩存窗口,如圖9所示。默認配置為DCM輸出添加全局時鐘緩存以保證良好的時鐘特性。如果設計全局時鐘資源,用戶亦可選擇“Customize buffers”自行編輯輸出緩存。一般選擇默認配置即可。
《4》 點擊“Next”,進入時鐘頻率配置窗口,如圖10所示。鍵入輸出頻率的數值,或者將手動計算的分頻比輸入。最后點擊 “Next”,“Finish”即可完成DCM模塊IP Core的全部配置。本例直接鍵入輸出頻率為75MHz即可。
《5》 經過上述步驟,即可在源文件進程中看到“my_dcm.xaw”文件。剩余的工作就是在設計中調用該DCM IP Core,其例化代碼如下:
module dcm_top(
CLKIN_IN,
RST_IN,
CLKFX_OUT,
CLKIN_IBUFG_OUT,
CLK0_OUT,
LOCKED_OUT);
input CLKIN_IN;
input RST_IN;
output CLKFX_OUT;
output CLKIN_IBUFG_OUT;
output CLK0_OUT;
output LOCKED_OUT;
mydcm dcm1(
.CLKIN_IN(CLKIN_IN),
.RST_IN(RST_IN),
.CLKFX_OUT(CLKFX_OUT),
.CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT),
.CLK0_OUT(CLK0_OUT),
.LOCKED_OUT(LOCKED_OUT)
?。?
endmodule
《6/》 上述代碼經過綜合Synplify Pro綜合后,得到的RTL級結構圖如圖11所示。
上述代碼經過ModelSim仿真后,其局部仿真結果如圖12所示。從中可以看出,當LOCKED_OUT信號變高時,DCM模塊穩(wěn)定工作,輸出時鐘頻率 CLKFX_OUT為輸入時鐘CLK_IN頻率的1.5倍,完成了預定功能。需要注意的是,復位信號RST_IN是高有效。
在實際中,如果在一片FPGA內使用兩個DCM,那么時鐘從一個clk輸入,再引到兩個DCM的clk_in。這里,在DCM模塊操作時,需要注意兩點:首先,用CoreGen生成DCM模塊的時候,clk_in源是內部的,不能直接連接到管腳,需要添加緩沖器;其次,手動例化一個IBUFG,然后把 IBUFG的輸入連接到兩個DCM的clk_in。通常,如果沒有設置clk_in 源為內部的,而是完全按照單個DCM的使用流程,就會造成clk_in信號有多個驅動。此時,ISE不能做到兩個DCM模塊輸出信號的相位對齊,只能做到一個DCM的輸出是相位對齊的。而時鐘管腳到兩個DCM的路徑和DCM輸出的路徑都有不同的延時,因此如果用戶對相位還有要求,就需要自己手動調整DCM 模塊在芯片中的位置。
評論
查看更多