FPGA異步FIFO設(shè)計(jì)中的問題與解決辦法
隨著數(shù)字電子系統(tǒng)設(shè)計(jì)規(guī)模的擴(kuò)大,一些實(shí)際應(yīng)用系統(tǒng)中往往含有多個(gè)時(shí)鐘,數(shù)據(jù)不可避免地要在不同的時(shí)鐘域之間傳遞。如何在異步時(shí)鐘之間傳輸數(shù)據(jù),是數(shù)據(jù)傳輸中一個(gè)至關(guān)重要的問題,而采用FIFO正是解決這一問題的有效方法。異步FIFO是一種在電子系統(tǒng)中得到廣泛應(yīng)用的器件,多數(shù)情況下它都是以一個(gè)獨(dú)立芯片的方式在系統(tǒng)中應(yīng)用。本文介紹一種充分利用FPGA內(nèi)部的RAM資源,在FPGA內(nèi)部實(shí)現(xiàn)異步FIFO模塊的設(shè)計(jì)方法。這種異步FIFO比外部FIFO 芯片更能提高系統(tǒng)的穩(wěn)定性。
本文引用地址:http://m.butianyuan.cn/article/191924.htm1 FIFO的基本結(jié)構(gòu)和工作原理
FIFO(First In First Out)是一種采用環(huán)形存儲(chǔ)結(jié)構(gòu)的先進(jìn)先出存儲(chǔ)器。其使用一個(gè)雙端口存儲(chǔ)器存放數(shù)據(jù),數(shù)據(jù)發(fā)送方在一端寫入數(shù)據(jù),接收方在另一端讀出數(shù)據(jù),能夠協(xié)調(diào)好兩個(gè)時(shí)鐘域的工作,滿足高時(shí)鐘頻率的要求。FIFO在FPGA設(shè)計(jì)中主要用來緩沖數(shù)據(jù)和隔離時(shí)鐘或相位差異。訪問FIFO時(shí)不需要地址線,只需要數(shù)據(jù)線和讀寫控制信號(hào)線,且數(shù)據(jù)地址由內(nèi)部讀寫指針自動(dòng)加1完成,因此利用FIFO實(shí)現(xiàn)數(shù)據(jù)的緩存具有接口簡(jiǎn)單、讀寫方便的優(yōu)點(diǎn)。
根據(jù)FIFO的工作時(shí)鐘,可將FIFO分為同步FIFO和異步FIFO。同步FIFO是指讀時(shí)鐘和寫時(shí)鐘為同一個(gè)時(shí)鐘,在時(shí)鐘沿來臨時(shí)同時(shí)進(jìn)行讀寫操作;異步FIFO是指讀寫時(shí)鐘不是同一個(gè)時(shí)鐘,而是相互獨(dú)立的。實(shí)際上,工作在同一時(shí)鐘的FIFO很少用到,多數(shù)都是讀寫時(shí)鐘獨(dú)立的異步FIFO。本文設(shè)計(jì)的異步FIFO位寬為8,深度(即FIFO可以存儲(chǔ)8位數(shù)據(jù)的個(gè)數(shù))為1 024。異步FIFO的結(jié)構(gòu)如圖1所示。
雙端口RAM存儲(chǔ)器具有獨(dú)立的讀寫端口。如果用一個(gè)單端口RAM存儲(chǔ)器實(shí)現(xiàn)異步FIFO,還應(yīng)該包含一個(gè)仲裁器來保證同一時(shí)刻只能有一種操作(讀或?qū)懖僮?。本文選擇的雙端口RAM并不一定是真正的雙端口,只要有獨(dú)立的讀寫端口即可。讀寫控制邏輯由加法計(jì)數(shù)器構(gòu)成,實(shí)現(xiàn)讀寫地址的自動(dòng)加1功能。空/滿標(biāo)志位的產(chǎn)生邏輯給系統(tǒng)提供空(empty)和滿(full)信號(hào)。
2 異步FIFO設(shè)計(jì)中的問題與解決辦法
2.1 亞穩(wěn)態(tài)問題
在含有觸發(fā)器的電路中往往會(huì)出現(xiàn)亞穩(wěn)態(tài)問題。亞穩(wěn)態(tài)會(huì)使異步FIFO的讀寫地址發(fā)生錯(cuò)誤,產(chǎn)生誤讀或者誤寫。為此異步FIFO設(shè)計(jì)中亞穩(wěn)態(tài)問題也是一個(gè)比較重要的問題。亞穩(wěn)態(tài)不可能完全消除,只能使其出現(xiàn)的概率降到最低。主要有2種方法來降低亞穩(wěn)態(tài)出現(xiàn)的概率:
①采用觸發(fā)器冗余方式。即采用多個(gè)觸發(fā)器級(jí)聯(lián)的方式,使本來出現(xiàn)概率為P的亞穩(wěn)態(tài),其出現(xiàn)概率降低到P2,但這種方式會(huì)導(dǎo)致延時(shí)增加。
②使用格雷碼。格雷碼的相臨碼元之間只有一位發(fā)生變化,這就大大地降低了亞穩(wěn)態(tài)出現(xiàn)的概率。本文采用格雷碼方式。
評(píng)論