亞穩態與多時鐘切換

2021-07-27 16:24:46 字數 4402 閱讀 4685

·亞穩態的產生與傳輸

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

·減小亞穩態的建議

·多時鐘切換電路

1、亞穩態的產生與傳輸

我們知道,交叉耦合反相器、sr鎖存器、

d鎖存器和

d觸發器等儲存元件有兩個穩定的狀態,即0和

1,也就是能儲存0和

1這兩個狀態。那麼亞穩態是什麼呢?從字面上看,亞穩態就是亞於穩態,既

0又不是

1的狀態。在時鐘有效沿到來的前後,觸發器的資料端的資料不穩定導致違反觸發器的建立時間或者保持時間,引起觸發器的輸出處於未知的狀態,這種未知的狀態稱為亞穩態。

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

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

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

對於輸入,假設0~1v的輸入是低電平,

1.5v

到2.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

時,反相器識別為高電平,於是反相輸出低電平。

當輸入資料不滿足暫存器的建立時間或者保持時間的時候,暫存器就很可能捕捉到輸入資料的電平在未定義的電平區間,輸出處於亞穩態(並不是所有未滿足建立時間或者保持時間都會產生亞穩態!),用乙個經典的圖表示如下所示:

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

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

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

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

紅色段就是處於亞穩態的輸出段。我們再來看看這幅圖,本來經過一定的延時值tco之後就會輸出正確的穩定的電平值;由於產生了亞穩態,亞穩態持續了

tmet

時長後,恢復到穩定的電平狀態(穩定,但不一定是正確的!),這段持續的時間叫做亞穩態的恢復時間,一般情況下這段時間不會超過乙個或者兩個時鐘週期(取決於觸發器的效能)。如果亞穩態持續時間過長(超過乙個或者兩個時鐘週期),就有可能被下一級的觸發器捕獲,導致下一級觸發器也處於亞穩態,這就是亞穩態的傳播現象,這是很嚴重的。

觸發器處於亞穩態可能會使系統產生故障,故障發生率的倒數叫做平均故障時間(mtbf,

mean time before failure

),平均故障時間越長,系統越穩定。在這裡,我們不討論平均故障時間怎麼來的,我們了解平均故障時間的公式是什麼,然後與哪些因素有關就

ok了:

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

其中:

·c2是乙個與器件有關的常數,器件的建立時間和保持時間越小,

c2越小。

·c1也是乙個與器件相關的常數。

·fclk1

是前級的時鐘,

fclk2

是後一級電路的時鐘(這裡涉及到時鐘域了),反正就知道與時鐘有關就可以了。

·tslack

是時序裕量,可以理解為觸發器喘息的時間。

由此可見,時鐘越快,越容易傳送故障。

3、減小亞穩態的建議

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

·使用同步器;同步器在跨時鐘域中會進行講解,使用同步器可以減少取樣非同步訊號導致的亞穩態。

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

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

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

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

4、多時鐘切換電路

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

在前面的一篇博文:數字設計中的時鐘與約束

, 提到了多時鐘切換的問題,如下所示:

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

首先,我們來看看毛刺產生的根源:在clk1的高電平的時候進行切換,如果此時

clk2

正好為高電平,這時候

clk2

和clk1

的高電平可能占空比變大也可能使占空比變小,總的來說有可能產生毛刺。在

clk1

的高電平的時候進行切換,如果此時

clk2

正好為低電平,那麼肯定產生毛刺,因此這不能這樣切換。從

clk2

切向clk1

也是這麼乙個原理。於是我們就有下面的結論:

電平相反的時候切換時鐘,肯定有毛刺;電平相同的時候,有可能產生毛刺。這裡我們關注低電平上產生的毛刺,同為高電平的時候切換,有可能產生毛刺,影響了上公升沿,因此我們就選擇在兩者都是低電平的時候進行切換。根據這個選擇方案,切換過程就是:a先是選擇訊號改變在,b然後

clk1

(或clk2

)為低時停掉

clk1

(或clk2

)的選擇

,c接著在

clk2

(或clk1

)為低時開啟

clk2

((或clk21

)的選擇端,

d最後進行正常工作,完成切換。

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

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

分析如下圖所示:

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

跨時鐘域(CDC)技術 亞穩態簡介

1.亞穩態以及其危害 對我們使用的邊沿觸發器而言 例如上公升沿觸發 由建立時間 setup time 和保持時間 hold time 在上公升沿定義了乙個時間視窗,如果在這個視窗內觸發器的輸入資料發生變化,就會產生時序違規。這會導致觸發器在這個視窗內採集的資料處於乙個不確定的狀態,也就是亞穩態。乙個...

FPGA亞穩態與同步設計

非同步復位 同步釋放採用如下 可能會更直觀一點 wire sys rst reg tmp rst1,tmp rst2 產生非同步復位 同步釋放訊號 always posedge clock,negedge reset n begin if reset n begin tmp rst1 1 b0 tm...

FPGA中亞穩態相關問題及跨時鐘域處理

前言 觸發器輸入埠的資料在時間視窗內發生變化,會導致時序違例。觸發器的輸出在一段時間內徘徊在乙個中間電平,既不是0也不是1。這段時間稱為決斷時間 resolution time 經過resolution time之後q端將穩定到0或1上,但是穩定到0或者1,是隨機的,與輸入沒有必然的關係。觸發器由於...