非同步FIFO設計注意事項

2021-09-26 12:04:12 字數 1007 閱讀 5018

近日學習用到非同步fifo,故寫下這篇部落格記錄學習心得。

在我看來,非同步fifo的設計注意事項大體分為兩點:

亞穩態的處理

空滿狀態的判斷

第一,來說一下亞穩態。亞穩態是指觸發器無法在某個規定時間內達到乙個可確認的狀態。在fifo的設計中,產生的原因主要由兩點:一是邏輯電平的誤判,也就是如果通過二進位製作為指標來判斷空滿狀態,因二進位制數值變化引起的位數變化大,對電路的危害也隨之增加,故在本設計中使用個格雷碼。二是訊號和時鐘之間不滿足要求,即建立時間和保持時間未滿足,在這裡通過打兩級暫存器來消除亞穩態使訊號穩定。

第二,關於空滿狀態的判斷,常使用的方法為附加位比較法。對於二進位制指標而言,fifo的滿狀態時寫指標比讀指標多迴圈了一次,而且兩個數只是最高位不同,其餘各位都相同。那麼我就可以這樣判斷,如果讀指標和寫指標的最高位不同,而其他位都相同時,此時的狀態為滿狀態。fifo的空狀態時寫指標和讀指標相同,那麼此時讀指標和寫指標相等。這樣讀指標和寫指標就變成了乙個n位指標,其中低n-1位時用來存放fifo儲存器的位址,可以用來對2^(n-1)個儲存單元定址,而最高位則用來辨別空滿狀態。

但是格雷碼在判斷空滿狀態時和二進位制有出入。當格雷碼由7到8時(0100到1100),可以看到指標的附加位改變,但是位址位並未變化,這是因為格雷碼是一種映象碼造成的。所以我們需要附加位和位址位分開循壞,此時就需要既能產生n位格雷碼又能產生n-1位格雷碼的計數器,這種計數器被稱為「兩重格雷碼計數器」。格雷碼指標的空狀態也是判斷讀指標和寫指標是否相等。但是判斷滿狀態和二進位制指標有很大不同。首先應該明白資料存入的順序並不是按照000遞增開始的,而是隨機的。例如一次寫入資料是從十進位制的位址6開始,連續寫入8個資料,位址指向14,這是儲存器存滿8個資料,應該產生滿狀態輸出。位址6的格雷碼0101,位址14的格雷碼1001。假如從十進位制的位址2開始,結束位址指向10,此時位址2的格雷碼為0011,位址10的格雷碼為1111,觀察兩次例子,起始位址和結束位址的格雷碼後兩位都相同,前兩位的異或值相等,並且起始位址和結束位址的首位是不同的。那麼4位格雷碼判斷滿狀態就可以分為3步:首先後兩位相同,然後前兩位的異或值相等,最後首位不同。

非同步FIFO設計的一些注意事項

非同步fifo的結構基本上是是按照下面的思路來設計 1.讀寫的指標分別用gray code sync到另外乙個clock domain,sync的時候至少打2拍。2.讀寫指標最高位各加乙個bit用來判斷空和慢,對於fifo來說,永遠是讀指標追寫指標,當指標相同的時候,用加的這個最高bit來 判斷是誰...

管道 FIFO注意事項

管道 1.其本質是乙個偽檔案 實為核心緩衝區 2.由兩個檔案描述符引用,乙個表示讀端,乙個表示寫端。3.規定資料從管道的寫端流入管道,從讀端流出。管道的原理 管道實為核心使用環形佇列機制,借助核心緩衝區 4k 實現。管道的侷限性 資料一旦被讀走,便不在管道中存在,不可反覆讀取。緩衝區是有限 由於管道...

PCB設計注意事項

在進行設計之前要將各種約束規則設定好。1 線和孔的間距要大一點。2 小訊號部分,注意保護。小訊號指的是小電流訊號 保護,通常是進行包地。晶振電路也屬於小訊號電路。晶振要緊靠晶元引腳放置,距離太遠容易出現干擾。對於四個引腳的電容,不要從中間穿插走線。避免短路。3電容的擺放應該起到應有的作用。例如,通訊...