什么叫DCM(Digital Clock Management)?
DCM內(nèi)部是DLL(Delay Lock Loop(?)結(jié)構(gòu),對(duì)時(shí)鐘偏移量的調(diào)節(jié)是通過(guò)長(zhǎng)的延時(shí)線形成的。DCM的參數(shù)里有一個(gè)PHASESHIFT(相移),可以從0變到255。所以我們可以假設(shè)內(nèi)部結(jié)構(gòu)里從Clkin到Clk_1x之間應(yīng)該有256根延時(shí)線(實(shí)際上,由于對(duì)不同頻率的時(shí)鐘都可以從0變到255,延時(shí)線的真正數(shù)目應(yīng)該比這個(gè)大得多)。DCM總會(huì)把輸入時(shí)鐘Clkin和反饋時(shí)鐘Clkfb相比較,如果它們的延時(shí)差不等于所設(shè)置的PHASESHIFT,DCM就會(huì)改變?cè)贑lkin和Clk_1x之間的延時(shí)線數(shù)目,直到相等為止。這個(gè)從不等到相等所花的時(shí)間,就是輸出時(shí)鐘鎖定的時(shí)間,相等以后,Lock_flag標(biāo)識(shí)才會(huì)升高。
當(dāng)DCM發(fā)現(xiàn)Clkin和Clkfb位相差不等于PHASESHIFT的時(shí)候,卻去調(diào)節(jié)Clk_1x和Clkin之間延時(shí),所以如果Clk_1x和Clkfb不相關(guān)的話,那就永遠(yuǎn)也不能鎖定了。呵呵。
如何使用DCM
DCM一般和BUFG配合使用,要加上BUFG,應(yīng)該是為了增強(qiáng)時(shí)鐘的驅(qū)動(dòng)能力。DCM的一般使用方法是,將其輸出Clk_1x接在BUFG的輸入引腳上,BUFG的輸出引腳反饋回來(lái)接在DCM的反饋時(shí)鐘腳CLKFB上。另外,在FPGA里,只有BUFG的輸出引腳接在時(shí)鐘網(wǎng)絡(luò)上,所以一般來(lái)說(shuō)你可以不使用DCM,但你一定會(huì)使用BUFG。有些兄弟總喜歡直接將外部輸入的時(shí)鐘驅(qū)動(dòng)內(nèi)部的寄存器,其實(shí)這個(gè)時(shí)候雖然你沒(méi)有明顯地例化BUFG,但工具會(huì)自動(dòng)給你加上的。
使用DCM可以消除時(shí)鐘Skew
使用DCM可以消除時(shí)鐘Skew。這個(gè)東西一直是我以前所沒(méi)有想清楚的,時(shí)鐘從DCM輸出開(kāi)始走線到寄存器,這段Skew的時(shí)間總是存在的,為什么用DCM就可以消除呢?直到有一天忽然豁然開(kāi)朗,才明白其原委。對(duì)高手來(lái)說(shuō),也許是極為Easy的事情,但也許有些朋友并不一定了解,所以寫(xiě)出來(lái)和大家共享。
為說(shuō)明方便起見(jiàn),我們將BUFG的輸出引腳叫做Clk_o,從Clk_o走全局時(shí)鐘布線到寄存器時(shí)叫做Clk_o_reg,從Clk_o走線到DCM的反饋引腳CLKFB上時(shí)叫Clkfb,如圖所示。實(shí)際上Clk_o, Clk_o_reg, Clkfb全部是用導(dǎo)線連在一起的。所謂時(shí)鐘Skew,指的就是Clk_o到Clk_o_reg之間的延時(shí)。如果打開(kāi)FPGA_Editor看底層的結(jié)構(gòu),就可以發(fā)現(xiàn)雖然DCM和BUFG離得很近,但是從Clk_o到Clkfb卻繞了很長(zhǎng)一段才走回來(lái),從而導(dǎo)致從Clk_o到Clk_o_reg和Clkfb的延時(shí)大致相等。總之就是Clk_o_reg和Clkfb的相位應(yīng)該相等。所以當(dāng)DCM調(diào)節(jié)Clkin和Clkfb的相位相等時(shí),實(shí)際上就調(diào)節(jié)了Clkin和Clk_o_reg相等。而至于Clk_1x和Clk_o的相位必然是超前于Clkin, Clkfb, Clk_o_reg的,而Clk_1x和Clk_o之間的延時(shí)就很明顯,就是經(jīng)過(guò)那個(gè)BUFG的延遲時(shí)間。
對(duì)時(shí)鐘Skew的進(jìn)一步討論
最后,說(shuō)一說(shuō)時(shí)鐘Skew的概念。時(shí)鐘Skew實(shí)際上指的是時(shí)鐘驅(qū)動(dòng)不同的寄存器時(shí),由于寄存器之間可能會(huì)隔得比較遠(yuǎn),所以時(shí)鐘到達(dá)不同的寄存器的時(shí)間可能會(huì)不一樣,這個(gè)時(shí)間差稱為時(shí)鐘Skew。這種時(shí)鐘Skew可以通過(guò)時(shí)鐘樹(shù)來(lái)解決,也就是使時(shí)鐘布線形成一種樹(shù)狀結(jié)構(gòu),使得時(shí)鐘到每一個(gè)寄存器的距離是一樣的。很多FPGA芯片里就布了這樣的時(shí)鐘樹(shù)結(jié)構(gòu)。也就是說(shuō),在這種芯片里,時(shí)鐘Skew基本上是不存在的。
說(shuō)到這里,似乎有了一個(gè)矛盾,既然時(shí)鐘Skew的問(wèn)題用時(shí)鐘樹(shù)就解決了,那么為什么還需要DCM+BUFG來(lái)解決這個(gè)問(wèn)題?另外,既然時(shí)鐘Skew指的時(shí)時(shí)鐘驅(qū)動(dòng)不同寄存器之間的延時(shí),那么上面所說(shuō)的Clk_o到Clk_o_reg豈非不能稱為時(shí)鐘Skew?
先說(shuō)后一個(gè)問(wèn)題。在一塊FPGA內(nèi)部,時(shí)鐘Skew問(wèn)題確實(shí)已經(jīng)被FPGA的時(shí)鐘方案樹(shù)解決,在這個(gè)前提下Clk_o到Clk_o_reg充其量只能叫做時(shí)鐘延時(shí),而不能稱之為時(shí)鐘Skew。可惜的是FPGA的設(shè)計(jì)不可能永遠(yuǎn)只在內(nèi)部做事情,它必然和外部交換數(shù)據(jù)。例如從外部傳過(guò)來(lái)一個(gè)32位的數(shù)據(jù)以及隨路時(shí)鐘,數(shù)據(jù)和隨路時(shí)鐘之間滿足建立保持時(shí)間關(guān)系(Setup Hold Time),你如何將這32位的數(shù)據(jù)接收進(jìn)來(lái)?如果你不使用DCM,直接將Clkin接在BUFG的輸入引腳上,那么從你的Clk_o_reg就必然和Clkin之間有個(gè)延時(shí),那么你的Clk_o_reg還能保持和進(jìn)來(lái)的數(shù)據(jù)之間的建立保持關(guān)系嗎?顯然不能。相反,如果你采用了DCM,接上反饋時(shí)鐘,那么Clk_o_reg和Clkin同相,就可以利用它去鎖存進(jìn)來(lái)的數(shù)據(jù)。可見(jiàn),DCM+BUFG的方案就是為了解決這個(gè)問(wèn)題。而這個(gè)時(shí)候Clk_o到Clk_o_reg的延時(shí),我們可以看到做內(nèi)部寄存器和其他芯片傳過(guò)來(lái)的數(shù)據(jù)之間的時(shí)鐘Skew。
由此,我們可以得出一個(gè)推論,從晶振出來(lái)的時(shí)鐘作為FPGA的系統(tǒng)時(shí)鐘時(shí),我們可以不經(jīng)過(guò)DCM,而直接接到BUFG上就可以,因?yàn)槲覀儾⒉辉谝鈴腃lkin到Clk_o_reg的這段延時(shí)。
-
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1879瀏覽量
132840 -
DCM
+關(guān)注
關(guān)注
0文章
165瀏覽量
26930
發(fā)布評(píng)論請(qǐng)先 登錄
基于FPGA的DCM時(shí)鐘管理單元概述
哪些因此會(huì)導(dǎo)致時(shí)鐘skew過(guò)大呢?FPGA中降低時(shí)鐘skew的幾種方法

DCM產(chǎn)生時(shí)鐘的邊緣過(guò)沖~~
如何減小clock skew?
DCM在FPGA中指的是什么?
怎么消除5ns偏斜
DCM外部反饋路徑有什么問(wèn)題?
Spartan 6 DCM LOCKED沒(méi)有輸出時(shí)鐘
DCM輸出時(shí)鐘約束的示例
如何使用DCM減少時(shí)鐘偏差?如何使用DCM來(lái)增加時(shí)鐘?
如何使用DCM,DCM使用說(shuō)明

FPGA DCM時(shí)鐘管理單元簡(jiǎn)介及原理

賽靈思DCM概述和應(yīng)用技巧
FPGA的DCM時(shí)鐘管理單元概述

評(píng)論