基于VHDL的異步FIFO設(shè)計(jì)
仔細(xì)觀察表1并分析數(shù)據(jù),一種新穎的判斷空滿標(biāo)志的方法為:當(dāng)讀/寫指針的最高位(MSB)不相等且讀/寫指針的次高位不相等,剩余的N-2位地址相等時(shí),此時(shí)寫指針追上了讀指針,即寫指針比讀指針多轉(zhuǎn)一圈,狀態(tài)模塊輸出滿標(biāo)志;當(dāng)讀/寫指針N+1位都相等時(shí),狀態(tài)模塊輸出空標(biāo)志。判斷滿標(biāo)志部分的VHDL代碼:
3.4 異步FIFO總體設(shè)計(jì)
通過(guò)時(shí)針比較產(chǎn)生的異步FIFO框圖如圖5所示。WCLK和RCLK分別為讀時(shí)鐘和寫時(shí)鐘,wrst_n和rrst_n分別為讀/寫模塊的復(fù)位信號(hào)。 rdata為數(shù)據(jù)輸出端口,wdata為數(shù)據(jù)輸入端口。異步FIFO通過(guò)讀/寫指針來(lái)尋址一個(gè)雙口RAM來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的讀/寫,雙口RAM的大小為2nB。讀指針被二級(jí)同步鏈到寫時(shí)鐘域,然后與寫時(shí)針比較產(chǎn)生滿標(biāo)志,讀指針產(chǎn)生讀地址raddress;寫時(shí)針被二級(jí)同步鏈同步到讀時(shí)鐘域,然后與讀時(shí)鐘比較產(chǎn)生空標(biāo)志,寫指針產(chǎn)生寫地址waddress。需要注意的是此異步FIFO設(shè)計(jì)中,空滿標(biāo)志是保守的空滿標(biāo)志,比如滿標(biāo)志,當(dāng)讀時(shí)針通過(guò)二級(jí)同步鏈同步到寫時(shí)鐘域且滿足滿標(biāo)志的條件時(shí),寫指針停止加1操作,而同步讀指針的過(guò)程中,讀時(shí)針則移動(dòng)到了其他的地址,同樣的適合于空標(biāo)志,當(dāng)輸出空,滿時(shí),其實(shí)FIFO的真實(shí)狀態(tài)是還有空間沒(méi)被寫滿或者讀空,這就是保守的空和滿,而這正保證了FIFO不會(huì)向上會(huì)向下溢出,進(jìn)一步提高了FIFO工作的可靠性。本文引用地址:http://butianyuan.cn/article/178738.htm
表2為平均無(wú)故障工作時(shí)間的對(duì)比,C1和C2依賴于器件工藝。
4 結(jié)語(yǔ)
一個(gè)高的平均無(wú)故障工作時(shí)間表明一個(gè)設(shè)計(jì)是優(yōu)秀的,提高亞穩(wěn)態(tài)的平均無(wú)故障工作時(shí)間減少信號(hào)傳輸中導(dǎo)致亞穩(wěn)態(tài)問(wèn)題的風(fēng)險(xiǎn)。本文通過(guò)研究FIFO的基本結(jié)構(gòu)以及FPGA亞穩(wěn)態(tài)的產(chǎn)生機(jī)理,提出了利用二級(jí)同步鏈和格雷碼計(jì)數(shù)器指針解決了同步以及空滿狀態(tài)判斷的難題,給出了VHDL軟件代碼,且該設(shè)計(jì)已經(jīng)通過(guò)QuartusⅡ的時(shí)序仿真驗(yàn)證,作為獨(dú)立模塊可以應(yīng)用到需要異步時(shí)鐘域傳輸數(shù)據(jù)的電路中,大大提高異步數(shù)據(jù)傳輸效率及平均無(wú)故障工作時(shí)間。
評(píng)論