本文基于VC_SpyGlass_CDC_UserGuide整理了3種常見的cdc(Clock Domain Crossing)錯誤。需要注意的是:
?本文描述的跨時鐘錯誤在特定場景下,有些是允許的,甚至有些是正常設(shè)計。因此IC設(shè)計者想要確認(rèn)跨時鐘錯誤需要分析應(yīng)用場景。
?還有一些CDC錯誤是spyglass 工具無法發(fā)現(xiàn)的,因此不能全部依賴工具檢查。
?有些項目組為了避免新手對cdc理解不深刻造成bug,對跨時鐘設(shè)計做了更加嚴(yán)格的規(guī)范。例如,下文中的裸跨是不允許存在的。
1、CDC Unsynchronized(沒有跨時鐘)
沒有采用跨時鐘模塊,即咱們通常說的裸跨,不同時鐘域的數(shù)據(jù)直接互連,會存在亞穩(wěn)態(tài)問題。同步電路會進(jìn)行STA(靜態(tài)時序分析)保證setup-hold time滿足要求,因此寄存器能夠保證正確采樣。而不同時鐘域的信號之間沒有setup-hold time要求,無法保證正確采樣。
圖5-1 所示為亞穩(wěn)態(tài)的案例,F(xiàn)1是clk_A時鐘域的寄存器,F(xiàn)2是clk_B時鐘域的寄存器,clk_A和clk_B是異步時鐘,寄存器F1的輸出信號A發(fā)生跳變的時刻有可能與clk_B的上升沿發(fā)生重疊,此時對寄存器F2來說,在setup-hold time時間區(qū)間內(nèi),輸入A沒有保持穩(wěn)定,因此寄存器F2輸出的B是不確定狀態(tài),這就是亞穩(wěn)態(tài)。
解決方案:根據(jù)實際場景添加對應(yīng)的跨時鐘模塊,例如bit同步器,脈沖跨時鐘模塊,異步fifo,多比特跨時鐘等等。
鴿子解讀1
沒有跨時鐘,不一定就是錯誤;在一些場景中,為了節(jié)約資源不跨時鐘是允許的。
下圖所示案例:配置模塊csr模塊產(chǎn)生的配置信號cfg_*_mode是clk1時鐘域,直接用于clk2時鐘域的邏輯模塊。
在芯片使用過程中,復(fù)位和配置順序如下:hrst_n先釋放--->完成csr模塊寄存器配置--->釋放srst_n。
在srst_n復(fù)位釋放后,靜態(tài)配置cfg_*_mode不再發(fā)生改變。這種情況中,功能邏輯模塊處于復(fù)位狀態(tài)時,cfg_*_mode發(fā)生跳變,這種情況下即使發(fā)生了亞穩(wěn)態(tài)也沒有影響,因為功能邏輯模塊還沒允許。
鴿子解讀2:
在部分握手機(jī)制的模塊中,沒有跨時鐘,也能保證不會出現(xiàn)亞穩(wěn)態(tài)。
CDC無法識別是否實現(xiàn)握手機(jī)制,如果跨時鐘模塊實現(xiàn)握手機(jī)制,即能夠保證圖5-1中的F2準(zhǔn)備采樣時信號A已保持穩(wěn)定,雖然會報錯,但是不會出現(xiàn)亞穩(wěn)態(tài)。在多bit的配置信號跨時鐘模塊中就存在這樣的情況。
2、CDC Glitch (毛刺)
簡單來說,就是組合邏輯直接跨時鐘,組合邏輯會存在glitch,導(dǎo)致glitch被目的時鐘采樣到,導(dǎo)致出現(xiàn)不期望的信號
解決方案:增加源時鐘域寄存器打拍,寄存器輸出的信號才跨時鐘。
特殊場景:如果圖10中的D0或者I1是一個準(zhǔn)靜態(tài)信號(幾乎不會跳變的),那么不會產(chǎn)生glitch,也是可以接受的。
Glitches的產(chǎn)生有如下三種場景:
1)同一個bit信號的組合邏輯跨時鐘
2)多個源時鐘域的信號的組合邏輯跨時鐘
3)同一個時鐘域的多個源信號的組合邏輯跨時鐘
3、CDC-Convergence(跨時鐘重新匯聚)
CDC-Convergence會產(chǎn)生不期望的信號組合,從而導(dǎo)致功能異常。
如果多個信號從源時鐘域通過不同的跨時鐘路徑進(jìn)入目的時鐘域,然后這些信號在目的時鐘域中又聚合到一起,那么就有可能因為信號的重新聚合導(dǎo)致電路功能上的異常。例如下圖7-29和7-28中,x和y的組合(x,y)在同步前只有(1,1)和(0,0)的組合,在同步后出現(xiàn)了(1,0)的組合,還有可能出現(xiàn)(0,1)組合。
如下圖7-29和7-28所示,X、X1、Y和Y1 屬于clk_a時鐘域,delay A和delay B表示不同的延時(走線延時),X3,X4,Y3,Y4屬于clk_b時鐘域。clk_a和clk_b屬于異步時鐘。X4和Y4作為輸入進(jìn)行組合邏輯獲得O。
假設(shè)因為某些原因,x和y的組合(x,y)只會出現(xiàn)2'b00 或者2‘b11的情況。在正確設(shè)計過程中,我們期望x4和y4的組合(x4,y4)也只會出現(xiàn)2'b00 或者2‘b11的情況。但是由于不同的跨時鐘路徑會導(dǎo)致(x4,y4)出現(xiàn)錯誤組合。見圖7-28,由于delay A和delay B的延時不同,導(dǎo)致X2和Y2到達(dá)同步器D端口的時間有差異,因此采樣后的值X3和Y3可能會出現(xiàn)一個clk_b周期的差異,此時(x3,y3)出現(xiàn)了2‘b10的組合,此組合會傳遞到(x4,y4)。因此輸出的Q可能是不符合預(yù)取的值。此為Convergence導(dǎo)致的錯誤
圖8顯示了3種匯聚的情況:
case1:同一個源時鐘域的信號同步后立即匯聚在組合邏輯
case2:源時鐘域信號同步后在目的時鐘域打了若干拍后再匯聚。如果當(dāng)目的時鐘域打拍數(shù)量過大,例如20級,超過了spyglass 工具默認(rèn)配置值,此種情況spyglass工具就無法檢查出問題了。
case3: 不同源時鐘域的信號同步后立即匯聚在組合邏輯
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5429瀏覽量
123869 -
靜態(tài)時序分析
+關(guān)注
關(guān)注
0文章
29瀏覽量
9672 -
時鐘域
+關(guān)注
關(guān)注
0文章
53瀏覽量
9758 -
CDC技術(shù)
+關(guān)注
關(guān)注
0文章
9瀏覽量
6960
原文標(biāo)題:Spyglass:你一定要懂的CDC錯誤
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
請問為什么一定要調(diào)用一次任務(wù)切換?
學(xué)習(xí)編程一定要英語很好嗎?
這些LED知識你一定要知道
做嵌入式是不是一定要學(xué)習(xí)C語言
為什么高級助聽器一定要使用鋅空氣電池?
未來是物聯(lián)網(wǎng)的時代,你一定要懂的
手機(jī)充電一定要充滿嗎
電路設(shè)計降壓,一定要用變壓器嗎?

評論