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