一種異步FIFO的設計方法
3 保守的滿空判斷本文引用地址:http://m.butianyuan.cn/article/161677.htm
對于異步FIFO設計,無論是采用握手還是直接同步的方法來獲取對方時鐘域的指針,對滿空信號的判斷總是“保守”的。
(1)滿空信號的復位(滿信號復位表示FIFO非滿,空信號復位表示FIFO非空)和實際FIFO的情況相比有一定的延遲。例如,空信號是由讀者用讀指針與同步或握手后得到的寫指針進行比較產生的。由于同步或握手需要一定的時間,在這段時間,寫者可能向FIFO寫入新的數據,寫指針發(fā)生了變化,此時FIFO已經非空,但此刻空信號仍然沒有復位。對于寫者而言,滿信號的復位也會遇到相同的問題。不過,在通常情況下,FIFO只要確保不會向下溢出或向上溢出,復位的延遲就不會導致向下溢出或向上溢出,是可以接受的。
(2)滿空信號的置位(滿信號置位表示FIFO滿,空信號置位表示FIFO空)和FIFO的實際情況相比沒有延遲。例如,同樣考慮FIFO為空的情況,讀者使用讀指針和同步或握手后的寫指針進行比較,由于FIFO為空,寫動作不會發(fā)生,相應的寫指針也保持不變,因此讀者獲得的就是當時的寫指針值。這樣就能馬上對空信號置位。同樣地,在FIFO滿的情況下,由于讀指針不發(fā)生變化,寫者得到的是當前的讀指針值,能夠馬上判斷FIFO為滿。
從以上兩點的討論可以得出結論,FIFO滿空判斷是保守的,寫者可能在FIFO還有一定空間時停止寫數據,但不會在FIFO已經滿了的情況下繼續(xù)寫數據;讀者可能在FIFO還有一些有效的數據時停止讀數據,但是不會在FIFO已經空的情況下繼續(xù)讀數據。保守的滿空判斷能夠滿足FIFO的功能要求。
4 二進制指針和格雷碼指針的比較
二進制指針和格雷碼指針兩者各有優(yōu)缺點:
(1)由于通過握手同步,指針可以有多位同時變化,二進制指針每次移動可以跳躍過任意的長度,這樣給FIFO的某些功能的實現帶來了方便(例如,硬件直接控制FIFO從緩存的數據流中丟棄一個出錯的包);而格雷碼指針一般只能做遞增或遞減的移動。
(3) 與直接同步相比,通過握手同步需要多時鐘周期,因此二進制指針的滿空判斷比格雷碼指針的滿空判斷更“保守”;對于設計一個容量很大且由內存構成的FIFO來說,由于保守判斷而損失的空間可以忽略;但對于一個容量較小的FIFO而言,這種“保守”可能是無法接受的。例如,一個由8個寄存器組成的FIFO,對于格雷碼編碼的指針,最壞情況下,FIFO被寫者判斷為滿時,里面實際只存有五個數據(使用兩級同步器,可能需要三個周期同步,而在這三個周期內都有讀動作發(fā)生);而對與二進制編碼的指針,FIFO被判為滿時,FIFO里可能只有三個數據或更少(使用兩級同步器,最好的情況下,需要五個周期握手,而在這五個周期里都有讀動作發(fā)生)。
本文介紹的異步FIFO的設計方法的兩種不同盡路都能夠實現功能正確的異步FIFO。對這兩種方法設計的FIFO的優(yōu)缺點所做的簡要分析,對FIFO的設計具有指導意義。
評論