這里我們先復(fù)習(xí)一下同步電路和異步電路的概念。在現(xiàn)代SoC設(shè)計中,絕大多數(shù)的電路都是同步電路。同步電路是由時鐘驅(qū)動存儲元件的電路,也就是說存儲元件的狀態(tài)只在時鐘沿到來的時候才能發(fā)生變化。因為組合邏輯電路在輸入變化時輸出可能出現(xiàn)毛刺(glitch),而存儲元件因為只會在時鐘沿到來時才會更新狀態(tài),那么在時鐘沿之間的時間狀態(tài)是穩(wěn)定的,這樣的同步電路可以消除組合電路中的毛刺,如下圖所示。
(資料圖)
相應(yīng)的,時鐘周期的大小取決于最長的傳輸延時(propagation delay)。同步電路的好處是時序很清晰,電路中的存儲元件例如觸發(fā)器都是依照一個固定的節(jié)拍來工作,便于EDA工具來進行延時的分析和計算,所以同步電路幾乎占據(jù)了當(dāng)前數(shù)字芯片的絕大多數(shù)部分。
而異步電路就沒有時鐘的概念了,存儲元件所存的狀態(tài)跟隨了輸入信號的變化立刻發(fā)生變化。信號之間的傳遞通常通過握手(handshake)來完成,因為沒有時鐘的約束,每一級存儲元件之間的邏輯電路都是各自獨立的,可以各自進行優(yōu)化,這樣可以達到很好的性能。但是這既是優(yōu)勢,也是劣勢。劣勢就在于EDA工具沒有滿足每一級都單獨優(yōu)化的計算能力,而且由于相鄰的級之間互相影響,使得計算總的時序時變得異常復(fù)雜,所以異步電路的規(guī)模通常無法做大,進而也限制了它的用途。目前更多的也只是在學(xué)術(shù)研究方面,并沒有成為當(dāng)今SoC設(shè)計的主流。下面這個例子實現(xiàn)了一個狀態(tài)存儲單元,next state Y會依據(jù)當(dāng)前狀態(tài)以及R,S的值立刻發(fā)生變化,顯然這樣的狀態(tài)變化更加快速,但是分析起來也更加復(fù)雜。
我們接下來的跨時鐘域分析,當(dāng)然都是基于同步電路的。同步電路的核心就是觸發(fā)器,觸發(fā)器的種類有很多種,最常用的就是D觸發(fā)器。在這里我們還是首先復(fù)習(xí)一下基本概念: 建立時間setup time和保持時間hold time, 以及亞穩(wěn)態(tài)metastability。
setup time:時鐘沿到來之前輸入信號D必須保持穩(wěn)定的最小時間
hold time:時鐘沿到來之后輸入信號D必須保持穩(wěn)定的最小時間
clk-to-q time:輸入D滿足setup/hold time要求,從時鐘沿到來時刻到輸出端Q變化至穩(wěn)定的時間
那么當(dāng)輸入信號D無法滿足setup time 或者hold time的要求,我們稱之為產(chǎn)生了setup time / hold time violation, Flop Q的輸出這個時候是0還是1是不確定的,需要一定的時間才能夠穩(wěn)定在0或者1。所以如果當(dāng)Q端在clk-to-q時間之后才變得穩(wěn)定的話,我們就說這個觸發(fā)器產(chǎn)生了亞穩(wěn)態(tài)metastability。
很多工程師在面試的時候都可以回答得上setup time和hold time的定義,但是回答不上為什么D觸發(fā)器有setup time和hold time的要求。這個問題其實大家在學(xué)校里學(xué)過,如果你在面試的時候被問到卻不知道,那么你應(yīng)該回去好好復(fù)習(xí)一下基礎(chǔ)知識。它們與D觸發(fā)器的內(nèi)部結(jié)構(gòu)有關(guān)系。D觸發(fā)器的內(nèi)部是一個主從鎖存器(master-slave latch),一個常見的D觸發(fā)器結(jié)構(gòu)如下圖所示
Latch能夠存儲住狀態(tài),靠的是上面的背靠背的反相器。而這個背靠背的反相器能夠鎖住狀態(tài)是需要時間的。由此,我們可以分析出
setup time: 在clk的上升沿到來之前,D要傳輸?shù)絑的時間。因為當(dāng)Z的值還沒有穩(wěn)定的時候,D如果變化,那么這個背靠背的反相器就無法鎖住值。
hold time: 第一個傳輸門關(guān)閉需要的時間,在傳輸門關(guān)閉期間,D->W要保持穩(wěn)定,這樣在傳輸門關(guān)閉之后,W穩(wěn)定才不會導(dǎo)致背靠背反相器鎖住的值發(fā)生變化。
所以我們可以看出,當(dāng)D在setup/hold time window內(nèi)發(fā)生變化,鎖存器可能無法鎖住一個穩(wěn)定的值,會發(fā)生的結(jié)果是
Q的值可能不是正確的D隨著D的變化越靠近時鐘沿,Q變穩(wěn)定的時間越長最后Q穩(wěn)定到的值可能是隨機的注意我們并不是說Q最后的值不是穩(wěn)定的1或者0, Q的值最后一定會穩(wěn)定下來,穩(wěn)定在高電平或者低電平,這是由于背靠背的反相器會產(chǎn)生正反饋,最終一定會穩(wěn)定下來。但是當(dāng)這個穩(wěn)定的時間超出了clk-to-q的限制,我們就說產(chǎn)生了亞穩(wěn)態(tài)。
接下來我們就可以正式進入跨時鐘域的討論了。當(dāng)只有一個時鐘存在時,life is simple,只要保證setup/hold time就好了,那么當(dāng)有多個時鐘存在的時候會發(fā)生什么呢?我們來看最簡單的情況,如下圖所示,aclk時鐘域的信號需要傳輸?shù)絙clk時鐘域去。在各自時鐘域內(nèi),EDA工具可以保證觸發(fā)器不會產(chǎn)生metastable,但是當(dāng)aclk和bclk異步的時候,我們是無法保證aclk和bclk之間的關(guān)系的,也就是說adata相對于bclk的沿來說,可能在任何時候發(fā)生變化,這樣bdata這個flop就可能產(chǎn)生亞穩(wěn)態(tài)。
當(dāng)bdata發(fā)生亞穩(wěn)態(tài)的時候,會造成什么影響呢?影響主要發(fā)生在bclk時鐘域的后級電路上,讓后級電路無法sample到一個確定的正確的值,進而導(dǎo)致運算邏輯錯誤。
在這里要澄清的一點是,亞穩(wěn)態(tài)的出現(xiàn)并導(dǎo)致邏輯錯誤并且芯片失效是一個概率事件,而不是一個100%會發(fā)生的確定性事件。這一點可能有點難以理解,舉例來說明,很有可能bdata這個flop的后面組合邏輯的delay很小,而這個flop在發(fā)生亞穩(wěn)態(tài)之后所需要穩(wěn)定的時間也很短,這樣即使flop發(fā)生了亞穩(wěn)態(tài),而后級的flop的setup time/hold time也可能可以得到滿足,這樣的話在實際芯片工作中,我們可能觀察不到產(chǎn)生錯誤輸出的情況。但也正是這樣的原因,很多看似正常工作的芯片內(nèi)部可能其實有跨時鐘域設(shè)計上的問題,卻從來沒有暴露出來。這種情況其實非常危險,因為這種問題一旦出現(xiàn),則會非常難以debug,因為出現(xiàn)的概率很低,看起來很隨機?;蛘吆芸赡芡瑯拥脑O(shè)計換一個工藝,以前可以工作在新的工藝上突然產(chǎn)生問題,造成很嚴(yán)重的后果。所以芯片在設(shè)計的時候需要盡量在流片前發(fā)現(xiàn)并解決所有的CDC問題,這一點大家要銘記在心。
芯片一旦出現(xiàn)CDC的問題,可能會導(dǎo)致以下后果
邏輯功能發(fā)生錯誤,比如控制信號,握手信號錯位數(shù)據(jù)發(fā)生錯誤,比如data bus的值,memory中存的值發(fā)生錯誤發(fā)生錯誤的時間可能隨機,很難以復(fù)現(xiàn)相同的錯誤很難以通過軟件修復(fù),即使能夠修復(fù),也可能需要犧牲性能和功耗那么我們能夠完全消除亞穩(wěn)態(tài)嗎?答案是否定的。其實我們關(guān)心的并不是亞穩(wěn)態(tài),而是說能否避免由于亞穩(wěn)態(tài)而造成的邏輯問題。在這里要引入一個MTBF的概念。MTBF-- mean time between failure. 意思是兩次失效之間的平均時間。簡單來說,就是這個芯片或者這個IP或者這個電路發(fā)生兩次發(fā)生錯誤之間的間隔。對于不同的系統(tǒng)和應(yīng)用場景,MTBF的要求也不同。比如說對于我們的手機,沒有人拿一個手機用二三十年吧?那么如果能夠保證MTBF大于30年,那么也等效于在整個手機的使用壽命中,這個邏輯錯誤不會發(fā)生2次,那么針對這個錯誤來說,這樣的MTBF是可以接受的。但是對于有些應(yīng)用場景,比如通訊衛(wèi)星,一個通訊衛(wèi)星的壽命可能超過二三十年,那么這種情況下MTBF 如果只有30年,那么就無法接受了。
關(guān)于MTBF,還有一個誤區(qū)需要澄清,就是MTBF只要大于產(chǎn)品的設(shè)計使用壽命就可以了,這其實是不嚴(yán)謹(jǐn)?shù)?。因為一個產(chǎn)品可能由多個系統(tǒng)組成,每個系統(tǒng)又是由多個子系統(tǒng)組成,每個子系統(tǒng)可能細分下去是由更小的單元組成。整個產(chǎn)品不發(fā)生失效的概率是所有部分不發(fā)生失效概率的乘積。所以越是小的單元,越要保證MTBF越高,這樣才能不會導(dǎo)致整個產(chǎn)品的MTBF 有顯著下降。
說回來觸發(fā)器的MTBF,MTBF的具體公式將在下一篇推送中呈現(xiàn)。這里大家只需要知道,MTBF反比于采樣時鐘頻率(destination clock frequency),反比于數(shù)據(jù)變化頻率(source data change frequency),還和工藝、電壓、溫度等因素相關(guān)即可。
標(biāo)簽: