競爭(Race):一個門的輸入有兩個及以上的變量發生變化時,由於各個輸入的組合路徑的延時不同,使得在門級輸入的狀態改變非同時。
冒險或險象(Hazard):競爭的結果,如毛刺Glitch。
相鄰信號間的串擾也可能產生毛刺Glitch。
組合邏輯的冒險是過渡性的,它不會使得穩態值偏離正常值。根據嚴格的metal delay和gate delay可以計算出Glitch的出現時間和寬度。
組合邏輯很容易帶來毛刺,當信號作用在FF的reset,clear,clock,gate端時,會造成嚴重的后果。
措施:使用Gray編碼,保證一個時刻只有一個bit發生變化;
采用寄存器采樣;(將異步電路轉換為同步電路);
改變電路結構,加入冗余的電路來消除險象;如(加入delay cell進行濾波,再相與輸出)
后端加入濾波電容;
寄存器的輸入端對毛刺並不敏感,只有當毛刺出現在時鍾沿並且影響到數據的建立時間和保持時間,才會導致寄存器輸出出錯。
glitch的危害,在組合邏輯中大面積傳播。
(由於毛刺一般時間很短,多為皮秒級,發生錯誤的機會不大)
在clock switch中如何保證Glitch-Free
由於select信號與clock0和clock1可能完全無關,clock0與clock1也可能完全無關,所以在下圖的電路中很容易出現Glitch
一種Glitch-free的設計電路:(必須是加入clock,之后再進行Latch互鎖)
加入兩個negative_edge的FF來相互互鎖,在FF0和FF1的下降沿都還沒到來,select已經改變時,FF輸出信號與select信號相與
必然都為0,在第一個FF觸發后,FF0或FF1中的某一個工作一拍。
1)由兩級FF,且后一級是negative FF,保證拉長的clock段是clock=0的段,同時最終切換的clock一定是一個完整的clock 高電平部分。
2)由互鎖,保證只有在當前clock,已經接受到enable之后,另一個clock才能開始准備切換,保證當前clock,有完整沿。
3)一個上升沿,一個下降沿,保證切換時間最小。
總之,正確的切換到另一clock的時間會被拉長,拉長的部分是低電平。
在clock0和clock1完全異步的情況下,做兩級寄存器同步處理。
亞穩態:在時序邏輯不滿足setup/hold/revovery/removal時。
觸發器輸出端從一個不確定的狀態到一個隨機值的過程,可能會經過震盪,這段時間叫做決斷時間(resolution time)
兩個異步信號之間出現亞穩態的概率由MTBF(Mean Time Between Failures)來表示,一級的register以年為單位。二級的register以萬年為單位。
亞穩態造成的危害:
1)時序邏輯存在一個時間tMET來保證亞穩態不能傳播到下一級的寄存器。
2)在不同的寄存器load中,造成值不同。原因是不同寄存器的MTBF可能不同。
怎么處理亞穩態:
1)通過同步寄存器鏈,來進行同步。不能同步頻率很高的信號(輸入保持至少三個時鍾,來保證第二級寄存器能輸出正確的值),
且可能帶來一個clock的錯的值,需要依靠協議來保證電路的正確性。
2)異步FIFO