Hi,根據(jù)之前大家的反饋,這一章就來簡單介紹一下CDC也就是跨時鐘域可能存在的一些問題以及基本的跨時鐘域處理方法。
跨時鐘域的問題主要存在于異步時鐘信號之間。首先同步時鐘和異步時鐘的主要區(qū)別在于同步時鐘是同源的,有一個確定的相位關(guān)系,在綜合約束的保證下同步時鐘路徑可以盡可能的去滿足setup/hold的要求。同步時鐘在CDC中屬于同一個時鐘域。
而異步時鐘來自不同的晶振源,他們之間沒有一個確定的相位關(guān)系,也就是說如果一個條路徑的起點和終點寄存器由異步時鐘驅(qū)動,沒有任何辦法來保證信號在何時會到達(dá)終點寄存器,這樣可能引發(fā)一系列的問題,比如亞穩(wěn)態(tài)。我們知道對于同步時鐘信號,在綜合工具以及后端工具中有時鐘約束,可以解決同步時鐘路徑的setup/hold,而對于異步信號,在綜合以及后端中都設(shè)為false path,也就是說沒有辦法從工具的角度進(jìn)行解決。在這種情況下,就需要從設(shè)計層面來解決這個問題,避免這些路徑的違例對電路功能造成影響。
Synopsys提供的Spyglass工具可以用于檢測系統(tǒng)中存在的CDC路徑,并且分析其可能產(chǎn)生的問題,在綜合之前進(jìn)行CDC的檢測以及相關(guān)設(shè)計的修改,可以最大程度地避免這些問題。下面我們來看下幾種CDC可能造成的問題以及相應(yīng)的檢測和簡單的解決方案。
1.metastability
亞穩(wěn)態(tài)是跨時鐘域中最主要的一個問題,因為在一條時鐘路徑中我們無法預(yù)知信號會在何時到達(dá)終點寄存器,那么有可能信號就會造成setup/hold的違例

上圖所示的例子是一個很典型的metastability 問題。由于A信號在F2寄存器的setup違例,造成的亞穩(wěn)態(tài)會在F2的下接負(fù)載中進(jìn)行傳播。
對于亞穩(wěn)態(tài)問題,針對具體信號的功能,一般有不同的處理。
對于多bit的data信號,我們可以使用使能技術(shù),也就是通過一個使能信號來判斷data信號是否已經(jīng)穩(wěn)定,當(dāng)使能信號有效的時候說明data處于穩(wěn)定狀態(tài),在這種情況下終點寄存器才對信號進(jìn)行采樣,可以保證沒有setup/hold違例。而使能信號一般使用double FF的方法來進(jìn)行同步。下面是一些簡單的data同步電路的例子:

在該電路中Cntrl信號通過兩級寄存器同步,通過mux來控制data的采樣,注意到這里使用的是recirculate的mux

當(dāng)然也可以不適用recirculate的mux,mux的另一個輸入同樣來自終點時鐘域。

此外還可以通過long-delay,也就是給信號長的延時來保證信號能在指定的時間到達(dá)。
如果是控制信號,我們可以直接使用double FF的方法,也就是多級寄存器同步的方法來進(jìn)行同步。這是因為控制信號位數(shù)較少,不需要額外使用使能信號資源。

上圖是個最基本的兩級flop的同步器,原理很簡單,我們默認(rèn)亞穩(wěn)態(tài)會在一個時鐘周期之內(nèi)解決,因此從第一級flop輸入的亞穩(wěn)態(tài)到第二級flop就穩(wěn)定了。因為這是一個1-bit的信號,所以如果第一個時鐘亞穩(wěn)態(tài)穩(wěn)定的值不是我們預(yù)估的值,比如1->0的跳變,亞穩(wěn)態(tài)最后結(jié)果是1,那么0的穩(wěn)定值也會在下一個周期到達(dá)第二級flop。
以上是一些最基本的信號同步器,根據(jù)具體design的不同,可以設(shè)置不同的同步邏輯,但同步邏輯的基本思路都類似,通過控制信號來保證來自時鐘源A的信號在穩(wěn)定的情況下才被來自時鐘源B的終點寄存器采樣,而控制信號因為多為單bit,一般都使用兩級寄存器來采樣。
2. fast-slow CDC
除了亞穩(wěn)態(tài)之外,如果信號起始時鐘源頻率比終點時鐘源高很多,那么可能就會導(dǎo)致信號的丟失。

在上圖的例子中,雖然A信號到B信號之間使用了同步器,但是如果時鐘域A的頻率過高,很容易造成信號的丟失。對此,我們需要使用額外的結(jié)構(gòu)來保證A信號不丟失。
常用的方法有兩種,一是使用定制化的電路,使A->B之間有至少一個B周期的延時。
另一個是使用控制信號,控制信號的信息來自B時鐘域的反饋信號,當(dāng)B成功完成一次有效采樣之后,才讓A讀取下一個信號。針對不同的具體電路有不同的設(shè)計方案,這里就不一一列出。
3. multi-bit data correlation
對于多bit的data信號,如果采用每個bit分別同步的方法,由于每個bit到達(dá)同步器的延時不同,可能造成采樣時刻多bit的信號corelation有問題。

在上圖所示例子中,由于每個bit到達(dá)2-FFs同步器的時間不同,如果這幾位bit同時跳變,可能在第一拍采樣的時候采到的不是我們想要的結(jié)果。
對此,我們可以使用格雷碼,來確保對于多bit信號每次只有一位bit發(fā)生了跳變。另外可以使用使能信號,在所有bit的信號都穩(wěn)定之后,才進(jìn)行同步采樣。
4. FIFO
我們可以使用FIFO來完成跨時鐘域的信號轉(zhuǎn)換,下圖是一個簡單的FIFO例子

FIFO會占用比較多的資源,但對于跨時鐘域問題能夠有很好的保證。對于FIFO,我們可以使用DesignWare中已經(jīng)搭建好的標(biāo)準(zhǔn)單元,這是經(jīng)過驗證的可綜合的FIFO。在Spyglass中,我們也可以對FIFO的正確性進(jìn)行驗證。
5.reset synchronization
復(fù)位信號是一個系統(tǒng)中最重要的幾種信號。復(fù)位信號的同步也是系統(tǒng)中很關(guān)鍵的一個環(huán)節(jié)。對于復(fù)位信號的同步,我們有一個經(jīng)典的標(biāo)準(zhǔn)設(shè)計方案

從上圖中我們可以看到,我們采用了異步復(fù)位同步釋放地方法。這里并不是直接將復(fù)位信號進(jìn)行兩級同步。
以上就是CDC的一些基本問題和經(jīng)典的解決方案,針對不同設(shè)計我們可以有不同的解決方法,而通過Spyglass,我們可以在綜合之前對CDC的問題進(jìn)行一個完整的檢測。希望以上對大家的設(shè)計有所幫助。
-
CDC
+關(guān)注
關(guān)注
0文章
58瀏覽量
18569
原文標(biāo)題:關(guān)于跨時鐘域的分析和簡單的解決方案
文章出處:【微信號:ic_frontend,微信公眾號:數(shù)字前端ic芯片設(shè)計】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
CDC2351:高性能時鐘驅(qū)動器的卓越之選
德州儀器CDC2536:高性能時鐘驅(qū)動器的技術(shù)剖析
CDC391時鐘驅(qū)動器:特性、參數(shù)與應(yīng)用解析
CDC337時鐘驅(qū)動器:高性能時鐘分配與生成的理想選擇
CDC328A:高性能時鐘驅(qū)動器的技術(shù)剖析
CDC339 時鐘驅(qū)動器:高性價比解決方案
CDC341:高性能1線轉(zhuǎn)8線時鐘驅(qū)動器的設(shè)計與應(yīng)用
Texas Instruments CDC351/CDC351I 時鐘驅(qū)動器:特性、參數(shù)與應(yīng)用詳解
CDC2516:高性能鎖相環(huán)時鐘驅(qū)動器的深度解析
CDC319:高性能1線轉(zhuǎn)10線時鐘驅(qū)動器
高性能時鐘緩沖器 CDC318A:特性、參數(shù)與應(yīng)用解析
探索CDC1104:1至4可配置時鐘緩沖器的卓越性能
黑芝麻智能跨域時間同步技術(shù):消除多域計算單元的時鐘信任鴻溝
跨異步時鐘域處理方法大全
cdc路徑方案幫您解決跨時鐘域難題
評論