摘 要: 異步FIFO是一種先進先出電路,可以有效解決異步時鐘之間的數(shù)據(jù)傳遞。通過分析異步FIFO設(shè)計中的難點,以降低電路中亞穩(wěn)態(tài)出現(xiàn)的概率為主要目的,提出了一種格雷碼計數(shù)器的技術(shù),通過仿真驗證,有效地實現(xiàn)了異步FIFO控制器的設(shè)計。該設(shè)計將大大提高工作頻率和資源利用率。
關(guān)鍵詞: 異步FIFO;亞穩(wěn)態(tài);格雷碼計數(shù)器
隨著現(xiàn)代芯片設(shè)計規(guī)模的不斷擴大,集成電路越來越復(fù)雜,一個系統(tǒng)中往往包含多個時鐘,如何設(shè)計異步時鐘之間的接口電路是多時鐘領(lǐng)域的關(guān)鍵問題。異步FIFO(First In First Out)是一種先進先出電路,用來存儲、緩沖在兩個異步時鐘之間的數(shù)據(jù)傳輸,使用異步FIFO可以在兩個不同的時鐘系統(tǒng)之間快速準(zhǔn)確地傳輸實時數(shù)據(jù),是用來解決異步時鐘接口電路的一個有效方案。并且異步FIFO高速、可靠性好,在網(wǎng)絡(luò)接口、圖像處理等方面都得到了廣泛的應(yīng)用。
1異步FIFO控制器的設(shè)計
1.1 異步FIFO時鐘域結(jié)構(gòu)設(shè)計
FIFO主要由FIFO控制器和RAM兩個部分組成。FIFO控制器最重要的功能就是產(chǎn)生RAM的讀寫地址以及相應(yīng)的使能信號;產(chǎn)生FIFO的狀態(tài)標(biāo)志,包括空(Empty)、滿(Full)、溢出(Underflow,Overflow)以及其他根據(jù)設(shè)計需要產(chǎn)生的狀態(tài)標(biāo)志。異步FIFO由兩個時鐘域構(gòu)成:push clock domain(記為clk_push domain)和pop clock domain(記為clk_pop domain)。
所以異步FIFO可以劃分為下列時鐘域結(jié)構(gòu),如圖1所示。
1.2 簡單計數(shù)器實現(xiàn)讀寫地址輸出結(jié)構(gòu)設(shè)計
由時鐘域結(jié)構(gòu)可知,作為FIFO控制器,最基本的就是要根據(jù)外部的輸入信號push和pop,產(chǎn)生對RAM訪問的讀寫地址。FIFO控制器內(nèi)首先要實現(xiàn)對RAM的讀寫地址輸出,所以FIFO控制器內(nèi)有一組基于clk_push domain的邏輯產(chǎn)生寫地址:push_addr,和一組基于clk_pop domain的邏輯產(chǎn)生讀地址:pop_addr。然后對地址信息采用二進制編碼,每一次push操作,使push_addr增加1,即指向下一個push操作的RAM空間;每一次pop操作,使pop_addr增加1,即指向下一個pop操作的RAM空間。按照這種思路,異步FIFO控制器可進一步細化為如圖2所示結(jié)構(gòu)。