最近在分析verilog代碼的時候,遇到了聽說過但是沒有明白它真正含義的名詞,亞穩態和異步FIFO的作用。
FPGA中的亞穩態是跨時鐘域設計師最基本也是最重要的一個問題。要明白亞穩態首先要知道在數字電路中最簡單的雙穩態電路就是兩個反相器首尾相連,加一些簡單的控制邏輯就變成了鎖存器或者觸發器,然而這種電路其實還有第三種半穩定態,就是當兩個反相器都處于中間值的情況,這就成為亞穩態。由于反相器在非邏輯值范圍的反饋系數是非常大的,一旦因為干擾或者噪音離開了這個中心點,就會很快的進入邏輯范圍。經數學分析,從亞穩態進入穩態,正如放射元素的衰變是一個指數的過程。當器件處于亞穩態是消耗的功率很大,但是亞穩態最大的危害不是功率的消耗,而是邏輯的混亂。,這是數字電路設計中最不好的。那么我們究竟如何避免亞穩態呢?由于它的變化規律是指數的,因此最好的辦法就是等待,等到足夠的時間,指導這個幾率變得小的幾乎不會發生。到底要等待多少時間呢?有的廠商有數據,但是有的沒有,按照最普通的做法,就是至少等待一個時鐘周期,這個就是所謂的異步數據要用兩個觸發器打一下,這樣就可以避免亞穩態的發生。 另外,異步FIFO也是跨時鐘域設計方法的集中體現,體現了很多方法,不過最重要的就是亞穩態和多控制/狀態信號的跨時鐘域傳遞。具體地說,就是把一組信號傳遞到另外一個時鐘域的時候,這組信號可能因為延時不同,得到的數據相差一個老的時鐘域時鐘周期,這和避免亞穩態的原理是一樣的。 在分析代碼時,覺得自己真的學會了許多東西。也許以前有些東西是自己碰到過的,可是并沒有真正理解,通過這種學習方式,我發現不僅可以學習新的知識,而且對自己寫代碼很有幫助,我會繼續努力的。
|