CDC (Clock Domain Crossing) Metastable
亞穩(wěn)態(tài)(Metastable): 亞穩(wěn)態(tài)是由于電路setup/hold不滿足導(dǎo)致的不確定的一個(gè)狀態(tài),它會(huì)維持很長(zhǎng)一段時(shí)間,并且可以傳播。在亞穩(wěn)態(tài)狀態(tài)下,無(wú)法判斷電路的邏輯值是0還是1。

一旦產(chǎn)生了亞穩(wěn)態(tài),那么后面的組合邏輯就會(huì)把亞穩(wěn)態(tài)傳播下去,這是非常危險(xiǎn)的。

如圖中clkRx在采Tx信號(hào)時(shí),由于setup/hold不滿足要求,導(dǎo)致采樣到的Rx就處于亞穩(wěn)態(tài)。也即,采樣的寄存器不滿足setup/hold要求就會(huì)導(dǎo)致亞穩(wěn)態(tài)。
影響亞穩(wěn)態(tài)的持續(xù)時(shí)間的因素: ① process ② temperature ③ Voltage ④ Electromagnetic wave (工藝、溫度、電壓、電磁波干擾)
注意,不要把亞穩(wěn)態(tài)和競(jìng)爭(zhēng)冒險(xiǎn)概念混淆?。。?/strong>
競(jìng)爭(zhēng)冒險(xiǎn)是組合邏輯電路里的概念,亞穩(wěn)態(tài)是時(shí)序邏輯電路里的概念。
????????單比特跨時(shí)鐘域電路,消除Metastable的辦法就是在目的時(shí)鐘域用兩個(gè)寄存器做兩級(jí)同步,也即打兩拍,具體電路如圖:

采用兩級(jí)同步后,他的MTBF(mean time between failure)平均無(wú)故障工作時(shí)間會(huì)到10的幾十次方量級(jí)年,而一個(gè)電路的使用年限不可能到那么多年,所以我們認(rèn)為兩級(jí)同步基本可以消除亞穩(wěn)態(tài)。

????????Rx時(shí)鐘域的第一個(gè)寄存器,在第i個(gè)上升沿對(duì)Tx傳過(guò)來(lái)的數(shù)據(jù)進(jìn)行采樣,會(huì)出現(xiàn)亞穩(wěn)態(tài),然后第二個(gè)寄存器在下一個(gè)周期,再對(duì)數(shù)據(jù)進(jìn)行采樣,因此時(shí)亞穩(wěn)態(tài)數(shù)據(jù)因?yàn)檫^(guò)了一個(gè)周期,亞穩(wěn)態(tài)持續(xù)結(jié)束,信號(hào)保持已經(jīng)穩(wěn)定。(雖然亞穩(wěn)態(tài)會(huì)導(dǎo)致電路有一段長(zhǎng)時(shí)間的不穩(wěn)定狀態(tài),這長(zhǎng)時(shí)間是相對(duì)原來(lái)的ck_to_q而言的,我們說(shuō)亞穩(wěn)態(tài)持續(xù)時(shí)間長(zhǎng),也不會(huì)超過(guò)一個(gè)時(shí)鐘周期,所以打一拍之后亞穩(wěn)態(tài)數(shù)據(jù)就穩(wěn)定了。如果時(shí)鐘頻率很高很高的話,那可以打三拍。)
????????由于STA分析時(shí)序,只能分析同步電路的時(shí)序是否滿足要求,對(duì)異步的時(shí)序不好檢測(cè)(在STA筆記里談到,如果STA考慮所有異步時(shí)鐘,會(huì)去找異步時(shí)鐘setup/hold最容易違例的地方,而實(shí)際上電路設(shè)計(jì)可能這些違例是沒(méi)關(guān)系的,異步時(shí)鐘如果做STA分析非常容易不過(guò),所以通常我們都把跨時(shí)鐘域的時(shí)鐘設(shè)置false_path),所以在寫(xiě)完RTL codes的時(shí)候,通常再用CDC工具做跨時(shí)鐘域檢查,而不是去綜合然后做時(shí)序分析,因?yàn)槿绻憔C合完同步時(shí)序沒(méi)問(wèn)題,但是最后發(fā)現(xiàn)有跨時(shí)鐘域問(wèn)題,那還得重新綜合,所以寫(xiě)完RTL codes在綜合之前,下一步就是用CDC工具(Spyglass)做跨時(shí)鐘域檢查。
典型的跨時(shí)鐘域問(wèn)題:
① 亞穩(wěn)態(tài):跨時(shí)鐘域由于兩個(gè)時(shí)鐘域的發(fā)射時(shí)鐘和采樣時(shí)鐘之間關(guān)系不明確,如果采樣寄存器的建立保持時(shí)間違例,那么就會(huì)出現(xiàn)亞穩(wěn)態(tài)(Metastable)。


????????用兩個(gè)寄存器做兩級(jí)同步,來(lái)解決亞穩(wěn)態(tài)問(wèn)題。
② data hold 問(wèn)題:數(shù)據(jù)從一個(gè)快時(shí)鐘域到慢時(shí)鐘域,可能會(huì)出現(xiàn)數(shù)據(jù)維持時(shí)間不夠長(zhǎng),導(dǎo)致目的時(shí)鐘域沒(méi)法采樣到原時(shí)鐘域的信號(hào)。

?為了增加A信號(hào)持續(xù)的時(shí)間,給A信號(hào)打兩拍。

假如D輸入了一個(gè)脈沖,那么:
第一個(gè)寄存器在第一個(gè)時(shí)鐘周期輸出1,第二個(gè)周期輸出0
第二個(gè)寄存器在第一個(gè)時(shí)鐘周期輸出0,第二個(gè)周期輸出1
令A(yù)等于兩者取或就能把一個(gè)周期擴(kuò)展到兩個(gè)周期了(打兩拍)。
如果信號(hào)是下降沿有效,那么兩輸入或門(mén)應(yīng)該換成什么門(mén)?
如果clk_A是clk_B頻率的四倍,那需要打多少拍?幾個(gè)寄存器?(打四拍,用四個(gè)寄存器)
③ Reconvergence :多比特?cái)?shù)據(jù)經(jīng)過(guò)組合邏輯跨時(shí)鐘域的時(shí)候,由于組合邏輯延時(shí)不同,導(dǎo)致打兩拍后的數(shù)據(jù)結(jié)果不同,所以多比特?cái)?shù)據(jù)傳輸時(shí),變化不能超過(guò)1bit,這也是為什么在跨時(shí)鐘域傳輸?shù)臅r(shí)候要把地址用格雷碼編碼,就是為了解決reconergence問(wèn)題。

????????信號(hào)X和信號(hào)Y進(jìn)行跨時(shí)鐘域傳輸兩者同時(shí)從0變1,由于delay A和delayB的不同,可能在目的時(shí)鐘域的第一個(gè)寄存器采樣X(jué)為1,采樣Y為0,第二個(gè)周期時(shí),第一個(gè)寄存器采樣X(jué)為1,Y為1,那么打兩拍之后,X比Y提前一個(gè)周期為1的狀態(tài)就會(huì)一直傳遞下去(如圖),但實(shí)際上在原時(shí)鐘域X和Y是同時(shí)從0到1翻轉(zhuǎn)的。
????????所以在跨時(shí)鐘域傳輸多bit數(shù)據(jù)時(shí),一次我們只允許數(shù)據(jù)的1bit發(fā)生翻轉(zhuǎn)。不允許多bit發(fā)生翻轉(zhuǎn)。

④ 有大量數(shù)據(jù)需要跨時(shí)鐘域傳遞的時(shí)候怎么做?用握手信號(hào)handshake,或者異步FIFO傳輸。vld和vld_sync就是一對(duì)握手信號(hào)

提高跨時(shí)鐘域的數(shù)據(jù)傳輸效率,vld信號(hào)為交互信號(hào),打兩拍后送到目的時(shí)鐘域,然后用雙邊沿檢測(cè)電路(vld_sync1和cld_sync2)檢測(cè)到一個(gè)時(shí)鐘沿,產(chǎn)生一個(gè)pulse,然后抓取一次data數(shù)據(jù)。

用異步FIFO傳輸則效率更快。
⑤ 異步復(fù)位要考慮什么問(wèn)題?異步復(fù)位,打兩拍,同步釋放。(異步復(fù)位同步釋放的電路可以看我寫(xiě)的數(shù)字IC手撕代碼專欄)
下面為6種典型的犯錯(cuò)的跨時(shí)鐘域問(wèn)題:

① 打兩拍的寄存器不是同一個(gè)時(shí)鐘? ?。?
② 給兩級(jí)同步的寄存器加復(fù)位信號(hào)。
③ 沒(méi)有打兩拍再輸出,打一拍就輸出了。
④ 打兩拍的第二個(gè)寄存器的en端由clk1時(shí)鐘域的寄存器提供,這是不對(duì)的,應(yīng)該在同一個(gè)時(shí)鐘域。
⑤ 在打兩拍的寄存器中間插組合邏輯。
⑥ 原時(shí)鐘域的組合邏輯輸出沒(méi)有打一拍再輸出。
CDC的驗(yàn)證要等到布局布線知乎的后仿才能驗(yàn)證出來(lái)。
CDC自測(cè)題:
什么會(huì)造成Metastable?
如何解決Metastable問(wèn)題?
多比特?cái)?shù)據(jù)跨時(shí)鐘域數(shù)據(jù)怎么解決亞穩(wěn)態(tài)問(wèn)題?
跨時(shí)鐘域可能出現(xiàn)哪些問(wèn)題?
同步電路和異步電路有什么區(qū)別?
同步電路的時(shí)序就一定是安全的嗎??????
跨時(shí)鐘域數(shù)據(jù)傳輸是否和目的時(shí)鐘域的頻率有關(guān)?
STA分析能否檢測(cè)跨時(shí)鐘域問(wèn)題?(不行,STA只能分析同步時(shí)鐘問(wèn)題,不能分析異步時(shí)鐘問(wèn)題)
跨時(shí)鐘域問(wèn)題,能用時(shí)鐘樹(shù)綜合解決嗎(Clock Tree Synthesis,CTS)?(不行,解決問(wèn)題還是得用上面的方法,比如data hold 問(wèn)題,快時(shí)鐘域到慢時(shí)鐘域的數(shù)據(jù)傳輸,如果快時(shí)鐘域的失蹤頻率比慢時(shí)鐘域快很多,那怎么調(diào)時(shí)鐘樹(shù),快時(shí)鐘域一個(gè)周期的信號(hào),不可能永遠(yuǎn)能被慢時(shí)鐘域抓到,所以綜合時(shí)鐘樹(shù)不能解決問(wèn)題。)