關於非同步fifo為什麼用格雷碼

2021-08-08 12:11:25 字數 1678 閱讀 7931

那麼典型的判斷方法是怎樣進行的呢?以滿狀態判斷為例,先要對讀指標(屬於讀時鐘域)在寫時鐘域進行抽樣,然後才能與寫指標進行比較,如果寫指標趕上了讀指標,說明已經寫滿,寫操作必須暫停。

接下來說說為什麼2進製指標不適合做空滿判斷。事實上2進製讀指標在增減時,經常發生多位突變,比如6位位址111111會在下一時刻變成000000,在實際電路中,這個變化過程要持續很長一段時間,會由111111經歷6個狀態轉移到達000000。比如 111111 -> 101111 -> 100111 -> 100110 -> 100100 -> 000100 -> 000000。由於寫時鐘與讀時鐘不同步,非同步的寫時鐘很可能會在狀態不穩定的中間某個狀態抽樣,這樣就會得到錯誤的讀指標,進而做出錯誤的狀態判斷,導致系統異常。而且由於多位同時突變,憑藉概率論常識可知發生錯誤的可能性很大。

那麼怎樣才能避免這個問題的發生呢?顯然,在中間狀態抽樣,這個是不可避免的,這是非同步系統天生的缺陷。我們的目標是:即使在中間狀態抽樣,也要不影響空滿狀態的判斷。符合這個要求的編碼方法是每次只能有1個位元發生改變。為什麼這麼說呢?因為當只有乙個位元發生改變時,即使在中間狀態抽樣,其結果也不外乎兩種:遞增前原指標和遞增後新指標。顯然遞增後新指標是最新情況的反映,如果抽樣到這個指標,那麼和我們的設計預期是一致的,如果抽樣到遞增前的原指標,會有什麼結果呢?假設現在抽樣讀指標,那麼最壞的情況就是把「不滿」判斷成了「滿」,使得本來被允許的寫操作被禁止了,但是這並不會對邏輯產生影響,只是帶來了寫操作的延遲。同樣的,如果現在抽樣寫指標,那麼最壞的情況就是把「不空」判斷成了「空」,使得本來被允許的讀操作被禁止了,但是這也不會對邏輯產生影響,只是帶來了讀操作的延遲。

期待牛人能對低功耗設計的內容普及一下。在移動的智慧型終端上低功耗的問題已經越來越受重視了。

回答四: 主要是為了多位元同步,這個例子中功耗是次要的因素 回答五: 格雷碼有兩個作用,一是消除多個位元同時變化帶來的潛在競爭與冒險,二是降低功耗(翻轉次數減少)。在狀態機中通常為了簡單起見表示現態與次態的狀態引數並不使用格雷碼而是二進位製碼,因為乙個狀態的變化可能是發散的而非單向的,就是說不同的條件對應不同的次態,這個時候用格雷碼對狀態進行編碼達不到一次只變化一位的目的,除非在特殊情況下,即狀態機的變化是單向的,總是由s0到s1,再到s2,等等,這個時候用格雷碼就能達到原來的目的。 回答六: 十進位制計數容易產生毛刺,格雷碼則不會產生毛刺。 回答七: 格雷碼每次只有一位跳變,兩級寄存才安全。 回答八: 在非同步的fifo中,採用格雷碼進行計數,相鄰的資料僅僅只有1bit變化,這樣在兩個時鐘域同步的時候僅僅可能只有1bit產生亞穩態,通過同步以後,亞穩態可以消除,最壞的情況是這1bit採錯,但是即使是採錯位址也只是相差1個,這對判斷空滿標誌不會產生影響。

如果是採用10十進位制進行編碼,則相鄰的資料可能有很多位同時進行變化,那麼如果多位同時產生亞穩態而且同時採錯資料,會對暫存器的空滿標誌做出嚴重錯誤的判斷,會丟失資料或者讀出無用的資料,使系統出錯。 回答九: 樓上說的都很精彩!順便補充一點:

由於跳變減少,可減少功耗,多用於低功耗設計中。 回答十: 我在想這個問題,

如果單指gray的話確實如此

但是在實際應用中,往往是將二進位制的轉換成gray

就是說不管如何二進位制的數依然會存在

同時其轉換的外加邏輯必然會帶來損耗,

在多位元的情況,功耗是否會跟多呢

gray一般是用在不同時鐘域的連續數值的傳送,即資料必須是遞增或遞減的

這樣,其主要是在asynchronou fifo中使用

感覺功耗並不會下降

非同步FIFO中讀寫指標為什麼要用格雷碼

首先要了解的是非同步fifo 使用格雷碼的唯一目的就是 即使在亞穩態進行讀寫指標抽樣也能進行正確的空滿狀態判斷 那麼典型的判斷方法是怎樣進行的呢?以滿狀態判斷為例,先要對讀指標 屬於讀時鐘域 在寫時鐘域進行抽樣,然後才能與寫指標進行比較,如果寫指標趕上了讀指標,說明已經寫滿,寫操作必須暫停。接下來說...

非同步FIFO格雷碼與空滿

在傳遞讀寫時鐘域的指標使用格雷碼來傳遞,如何把二進位制轉換為格雷碼,格雷碼是如何判斷讀空寫滿呢?二進位製碼轉換成二進位制格雷碼,其法則是保留二進位製碼的最高位作為格雷碼的最高位,而次高位格雷碼為二進位製碼的高位與次高位相異或,而格雷碼其餘各位與次高位的求法相類似。這樣就可以實現二進位製到格雷碼的轉換...

python為什麼用flask 為什麼用flask

flask是python在web開發領域乙個輕量級的框架,為什麼選擇flask呢?此文可能會給你答案。選擇flask的原因 1.微框架 簡潔 只做它需要做的,給開發展提供了很大的擴充套件性。2.flask和相關的依賴 jinja2 werkzeug 設計得非常優秀,用著簡單。3.開發效率非常高,比如...