來自:http://blog.csdn.net/times_poem/article/details/73046273 一般來講,如果設(shè)計(jì)中存在有多個時鐘域,那么就必然會存在跨時鐘域的timing path。如果對跨時鐘域的timing path處理不當(dāng),則容易導(dǎo)致亞穩(wěn)態(tài),glitch,多路扇出,重新聚合等等問題,導(dǎo)致設(shè)計(jì)不能穩(wěn)定工作或者就根本不能正常工作。 1. 亞穩(wěn)態(tài) 對時序邏輯電路來說,一個DFF的輸入信號必須在該DFF的時鐘沿前后一段時間內(nèi)都保持穩(wěn)定才能保證DFF能鎖存到正確的值。這既我們所說的setup time和hold time,其中信號在時鐘沿之前的保持時間為setup time,信號在時鐘沿之后的保持時間為hold time。正常情況下,如果DFF的輸入能滿足setup time和hold time的要求,那么在tCO(the clock to output delay)時間內(nèi)DFF的輸出就會達(dá)到一個有效的邏輯值(高電平或者低電平)。否則,DFF的輸出就需要遠(yuǎn)大于tCO的時間來達(dá)到有效的邏輯值,這段時間內(nèi),DFF的輸出信號是不穩(wěn)定的,被稱為不穩(wěn)定狀態(tài),或者叫亞穩(wěn)態(tài)。在下圖中,如果CLK B在DA變化的時候來對DA進(jìn)行采樣,那么DB就會出現(xiàn)亞穩(wěn)態(tài)。 對于同時鐘域的信號。無論是在ASIC設(shè)計(jì)還是在FPGA設(shè)計(jì)中,我們也可以方便的通過STA來保證同時鐘域的信號能滿足setup/hold time的要求,不會出現(xiàn)亞穩(wěn)態(tài)的問題。但對于異步信號,相位關(guān)系是完全不可控的,而且會隨時間發(fā)生變化,這就必然會存在亞穩(wěn)態(tài)的問題,而且STA工具也沒有辦法對不同時鐘域之間的timing path進(jìn)行分析。也就是說,我們是沒有辦法完全避免異步信號之間的亞穩(wěn)態(tài)問題的,但是可以通過在跨時鐘域的信號上加入一些特殊的電路來減少亞穩(wěn)態(tài)問題對電路功能所產(chǎn)生的負(fù)面影響。 2. Glitch 前面我們講過,STA工具室不會對跨時鐘域的信號做STA。跨時鐘域的信號很容易產(chǎn)生glitch并最終影響電路功能。如下圖中,CLKA domain中,DA1和DA2分別為兩個DFF的輸出,理想狀態(tài)下,DA1和DA2到達(dá)與門兩個輸入端的時間是一樣的,這樣設(shè)計(jì)就不會出問題。但由于后端布局,環(huán)境等等因素導(dǎo)致的傳播延遲Td會使A&B存在一個Glitch。而由于CLKB和CLKA為兩個clock domain,之間不存在固定的相位關(guān)系,假設(shè)這個Glitch恰好被CLKB鎖存住,那么就會在DB2生成一個有效的高電平信號,這個高電平信號不是我們的設(shè)計(jì)所期望的,那就會導(dǎo)致后繼的電路功能出現(xiàn)問題。 也有可能是下面的情況,因?yàn)門d的影響,導(dǎo)致本應(yīng)該傳遞到CLKB的高電平信號沒有被傳遞過去,從而導(dǎo)致后繼電路的功能出現(xiàn)問題。 在實(shí)際系統(tǒng)中,如果沒有處理好跨時鐘域的信號,那么由此導(dǎo)致的問題是很容易出現(xiàn)的。我在做silicon debug的時候,曾經(jīng)多次遇到過由CDC導(dǎo)致的問題。由CDC導(dǎo)致的問題,在實(shí)際系統(tǒng)上的表現(xiàn)并不是非常一致,但經(jīng)常表現(xiàn)出來的就是設(shè)計(jì)時而可以正常工作,時而出錯,而且出錯的概率不盡相同,這對問題的分析解決是非常不利的。我曾經(jīng)遇到過一個CDC導(dǎo)致問題,需要執(zhí)行數(shù)千次的操作,才可能復(fù)現(xiàn)出來,但問題一出現(xiàn)就是致命的,會導(dǎo)致系統(tǒng)出錯。由于非常難復(fù)現(xiàn)問題,分析解決起來就特別困難。所以我們在做設(shè)計(jì)的時候,要盡量從一開始就解決掉這些問題。 3 多路扇出 如果信號從一個時鐘域分多路進(jìn)入另外一個時鐘域,那么很有可能會導(dǎo)致功能上的錯誤。如下圖所示,由于Td的存在,DA1和DA2到達(dá)CLKB的時間不同,最終導(dǎo)致fsm1_en和fsm2_en這兩個本應(yīng)該同時有效的信號實(shí)際上相差一個CLKB的周期。這很可能會影響到后繼的電路功能。 l 重新聚合 如果多個信號從一個時鐘域進(jìn)入另外一個時鐘域,然后這些信號在目標(biāo)時鐘域中又聚合到一起,那么就有可能因?yàn)樾盘柕闹匦戮酆蠈?dǎo)致電路功能上的異常。如下圖所示,原本EN1和EN2轉(zhuǎn)換時鐘域后,期望得到的值是2’b00和2’b11,但由于EN1和EN2到達(dá)CLKB時鐘域的時間有差異,實(shí)際得到的值是2’b00,2’b10和2’b11,最終導(dǎo)致后繼電路功能出現(xiàn)問題。 |
|