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