基于VHDL的異步FIFO設計
仔細觀(guān)察表1并分析數據,一種新穎的判斷空滿(mǎn)標志的方法為:當讀/寫(xiě)指針的最高位(MSB)不相等且讀/寫(xiě)指針的次高位不相等,剩余的N-2位地址相等時(shí),此時(shí)寫(xiě)指針追上了讀指針,即寫(xiě)指針比讀指針多轉一圈,狀態(tài)模塊輸出滿(mǎn)標志;當讀/寫(xiě)指針N+1位都相等時(shí),狀態(tài)模塊輸出空標志。判斷滿(mǎn)標志部分的VHDL代碼:


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