亞穩態與多時鍾切換


  前面的博文聊到了觸發器的建立時間和保持時間:http://www.cnblogs.com/IClearner/p/6443539.html  那么今天我們來聊聊與觸發器有關的亞穩態已經多時鍾系統中的時鍾切換。與亞穩態有關的問題比如跨時鍾域的問題很快就會補充。今天的主要內容如下所示:

    ·亞穩態的產生與傳輸

    ·亞穩態的恢復時間與平均無故障時間

    ·減小亞穩態的建議

    ·多時鍾切換電路

 

1、亞穩態的產生與傳輸

  我們知道,交叉耦合反相器、SR鎖存器、D鎖存器和D觸發器等存儲元件有兩個穩定的狀態,即01,也就是能存儲01這兩個狀態。那么亞穩態是什么呢?從字面上看,亞穩態就是亞於穩態,既0又不是1的狀態。在時鍾有效沿到來的前后,觸發器的數據端的數據不穩定導致違反觸發器的建立時間或者保持時間,引起觸發器的輸出處於未知的狀態,這種未知的狀態稱為亞穩態。

  我們知道了亞穩態是產生是由於違反了觸發器的建立時間或者保持時間,那么為什么會有亞穩態呢?我們從底層的CMOS器件開始:

  CMOS反相器的電平傳輸特性曲線如下所示:

                

 


  在上面的圖里面。我們把Vout=Vin的點叫做反相器的閾值電壓。CMOS反相器的特性是,在閾值電壓附近輸出迅速完成了電平的切換,而在其他區域輸出電平幾乎不變。

  對於輸入,假設0~1V的輸入是低電平,1.5V2.5V是高電平;也就是說,反相器的輸入在正常情況下要么是高電平,要么是低電平,那么反相器靠什么來識別它是高還是低了,就是靠輸入電平的電壓了;當輸入信號在0~1V的時候,反相器識別為低,輸入在1.5V~2.5V時反相識別為高輸入。至於反相器的輸入在1~1.5V的時候,這是沒有定義的,也就是在閾值電壓附近,反相器可能將它認為是高電平也可能認為是低電平。

  對於輸出,假設輸出2.25~2.5V是高電平,0~0.25V是低電平。那么我們就從輸入由0增大到2.5v的情況看看輸出是怎么樣的。當輸入在0~1V時,反相器識別輸入為低電平,根據電平傳輸特性曲線,輸出基本大於2.25V,反相器輸出為高電平(可能大於2.25V)。當反相器的輸入從1過渡到1.5V的時候,反相器對這段的電壓沒有定義,比如輸入為1.25V的時候,曲線對應的輸出大概為1.25V,這是反相器就會迅速進行電平切換:可能進行高電平切換,認為這個輸入是低電平於是對應的輸出高電平;也有可能進行低電平切換,認為這個輸入是高電平,於是對應輸出低電平。因此在這段電壓內,輸出是高是低都有可能。當輸入大於1.5V時,反相器識別為高電平,於是反相輸出低電平。

  當輸入數據不滿足寄存器的建立時間或者保持時間的時候,寄存器就很可能捕捉到輸入數據的電平在未定義的電平區間,輸出處於亞穩態(並不是所有未滿足建立時間或者保持時間都會產生亞穩態!)。我們就拿上一篇博客中所描述的D觸發來說明一下,該觸發器電路結構(鏈接:https://www.cnblogs.com/IClearner/p/6443539.html)如下圖所:

                                                                  

當建立時間不滿足的時候,也就是數據端D的數據來得太晚了,使得   輸入電壓  或者   主D鎖存器內部的線路電壓 處於閾值電壓附近,就可能會使主D鎖存器不能正確輸出,之后的從鎖存器也不能正確輸出,即輸出Q處於亞穩態:輸出電壓可能處於閾值電壓附近,也可能處於高電平,也可能處於低電平,也可能是在高低電平之間震盪(因為反相器具有電平切換功能),總之我們無法預測輸出具體是哪一種穩定的電平狀態。

同理,當保持時間不滿足的時候也是一樣,也會使主鎖存器內部的線路電壓不足以使門器件/反相器進行翻轉/工作,也會導致亞穩態。

 

亞穩態用一個經典的圖表示如下所示:

                 

山頂就是亞穩態,這是數字邏輯中存在的一種狀態,在這個狀態下,觸發器/寄存器的輸出可能為毛刺或者某一未定義的電壓值(電壓值在高低電平之間波動),反正基本不是正確的輸入值。

    亞穩態是器件的固有屬性,不能消除,只能從概率上減少這一狀態的發生。

 

2、亞穩態的恢復時間與平均無故障時間

亞穩態除了可以用上面的那個圖表示外,還可以用下面的時序圖表示:

               

    紅色段就是處於亞穩態的輸出段。我們再來看看這幅圖,本來經過一定的延時值tco之后就會輸出正確的穩定的電平值;由於產生了亞穩態,亞穩態持續了tMET時長后,恢復到穩定的電平狀態(穩定,但不一定是正確的!),這段持續的時間叫做亞穩態的恢復時間,一般情況下這段時間不會超過一個或者兩個時鍾周期(取決於觸發器的性能)。如果亞穩態持續時間過長(超過一個或者兩個時鍾周期),就有可能被下一級的觸發器捕獲,導致下一級觸發器也處於亞穩態,這就是亞穩態的傳播現象,這是很嚴重的。

  觸發器處於亞穩態可能會使系統產生故障,故障發生率的倒數叫做平均故障時間(MTBFmean time before failure),平均故障時間越長,系統越穩定。在這里,我們不討論平均故障時間怎么來的,我們了解平均故障時間的公式是什么,然后與哪些因素有關就OK了:

                   

 

也就是說,故障發生的幾率為:

                 

 

其中:

    ·C2是一個與器件有關的常數,器件的建立時間和保持時間越小,C2越小。(--->使用更快的觸發器)

    ·C1也是一個與器件相關的常數。

    ·fclk1是前級的時鍾,fclk2是后一級電路的時鍾(這里涉及到時鍾域了),反正就知道與時鍾有關就可以了。(--->降低系統的工作頻率)

    ·tslack是時序裕量,可以理解為觸發器喘息的時間。(--->使用同步器)

由此可見,時鍾越快,越容易發送故障。

 

3、減小亞穩態的建議

  亞穩態是不可避免的,但是我們可以減少亞穩態的發生和傳播,從上面的內容中可以,我們有以下減少亞穩態的建議

    ·使用同步器;同步器在跨時鍾域中會進行講解,使用同步器可以減少采樣異步信號導致的亞穩態。

    ·在滿足要求的情況下,降低時鍾頻率。從上面的式子中可以知道,降低時鍾頻率,可以降低故障的發生率。

    ·采用反應更快的觸發器。上面的式子中的常數跟觸發器有關,如果有更快的觸發器,同樣可以減少亞穩態的產生。

    ·減少使用或者避免使用那種信號翻轉時間很長的輸入信號,如果翻轉時間長,那么進入器件未定義的電平的時間也很長,容易導致亞穩態的產生。

當然還有其他減少亞穩態產生的方法,這里只是列出了典型的、常見的集中方法而已。

 

4、多時鍾切換電路

  為了承上啟下,這里聊一下多時鍾切換電路,承接亞穩態的問題,也是為以后的跨時鍾域做一些鋪墊,反正就是兩邊沾唄...

  在前面的一篇博文:數字設計中的時鍾與約束,鏈接如下:http://www.cnblogs.com/IClearner/p/6440488.html 提到了多時鍾切換的問題,如下所示:

                 

 

  時鍾在切換的時候難免會產生毛刺,這里就來聊聊如何把這個時鍾切換產生的毛刺減少(甚至消滅)的典型電路,而不是要求時鍾切換的時候寄存器要處於復位的情況(當然寄存器復位也是雙重保險的措施)。

  首先,我們來看看毛刺產生的根源:在clk1的高電平的時候進行切換,如果此時clk2正好為高電平,這時候clk2clk1的高電平可能占空比變大也可能使占空比變小,總的來說有可能產生毛刺。在clk1的高電平的時候進行切換,如果此時clk2正好為低電平,那么肯定產生毛刺,因此這不能這樣切換。從Clk2切向clk1也是這么一個原理。於是我們就有下面的結論:

  電平相反的時候切換時鍾,肯定有毛刺;電平相同的時候,有可能產生毛刺。這里我們關注低電平上產生的毛刺,同為高電平的時候切換,有可能產生毛刺,影響了上升沿,因此我們就選擇在兩者都是低電平的時候進行切換。根據這個選擇方案,切換過程就是:A  先是選擇信號改變(即進行時鍾切換),B  然后clk1(或clk2)為低時停掉clk1(或clk2)的選擇 ,C  接着在clk2(或clk1)為低時打開clk2((或clk21)的選擇端,D  最后進行正常工作,完成切換。

至於這么設計這個電路呢?一個思路是使用狀態機,但是這似乎不太現實,要是使用狀態機,還得再要一個更高頻率時鍾最為狀態寄存器的驅動時鍾。除了狀態機之外,前輩們給我們設計了這樣的一個電路,使用負邊沿觸發的寄存器,設計的電路如下所示:

                 

 

如何構思這個電路,下面這個鏈接的博客講得挺好的了:

http://electron64.blog.163.com/blog/static/106033970201205103533471/ 

我就來分析這個電路是怎么工作的吧,反正我們大多數是用而已:

分析如下圖所示:

 

當然,這個是波形是沒有輸出延時和轉換延時的。從波形圖里面可以看出,這個時鍾切換電路理論上是沒有毛刺的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM