FPGA異步FIFO設(shè)計(jì)中的問題與解決辦法
2.2 空/滿標(biāo)志位的判斷
為保證數(shù)據(jù)的正確寫入和讀出,不發(fā)生寫滿和讀空操作,怎樣判斷空/滿標(biāo)志位的產(chǎn)生就成為異步FIFO設(shè)計(jì)的核心問題。異步FIFO是環(huán)形存儲(chǔ)的,當(dāng)讀寫地址指針相等時(shí),意味著空標(biāo)志位或者滿標(biāo)志位的產(chǎn)生。但是卻不能確定是寫滿還是讀空狀態(tài)。為解決這一問題,本文將轉(zhuǎn)換為格雷碼后的讀寫地址指針分別經(jīng)過檢測(cè)和計(jì)數(shù)器。每當(dāng)讀寫指針遍歷一圈(當(dāng)讀寫地址指針指向雙端口RAM的最后一個(gè)地址)時(shí),寫計(jì)數(shù)i加1,讀計(jì)數(shù)j加1。這樣寫滿狀態(tài)和讀空狀態(tài)的判斷就需要同時(shí)滿足兩個(gè)條件。下面分別給出寫滿和讀空狀態(tài)的判斷。
①寫滿狀態(tài)的判別:當(dāng)讀地址指針等于寫地址指針,并且i>j時(shí),產(chǎn)生滿標(biāo)志。
②讀空狀態(tài)的判別:當(dāng)寫地址指針等于讀地址指針,并且i=j時(shí),產(chǎn)生空標(biāo)志。
由于空/滿標(biāo)志位產(chǎn)生的結(jié)構(gòu)圖對(duì)稱,故本文只給出滿標(biāo)志位產(chǎn)生的結(jié)構(gòu)圖,如圖2所示。其中,主數(shù)i為寫地址指針遍歷的圈數(shù),計(jì)數(shù)j為讀地址指針遍歷的圈數(shù)。本文引用地址:http://m.butianyuan.cn/article/191924.htm
從圖2中可看出,地址指針轉(zhuǎn)換為格雷碼后,經(jīng)過檢測(cè)和計(jì)數(shù)環(huán)節(jié),將讀寫地址和讀寫指針遍歷的圈數(shù)分別送入比較器進(jìn)行比較,從而準(zhǔn)確地產(chǎn)生滿標(biāo)志位。
3 FPGA內(nèi)部軟異步FIFO設(shè)計(jì)
本設(shè)計(jì)中FPGA采用的是Xilinx Spartan3系列中的XC3S400PQ208。內(nèi)部有56 Kb的分布式RAM和288 Kb的RAM,以及4個(gè)DCM(數(shù)字時(shí)鐘管理器)單元,為系統(tǒng)提供獨(dú)立的讀寫時(shí)鐘頻率??梢岳眠@些資源在FPGA內(nèi)部實(shí)現(xiàn)異步FIFO模塊。本文采用 VHDL語(yǔ)言對(duì)雙端口RAM的讀寫操作進(jìn)行編程,實(shí)現(xiàn)FPGA內(nèi)部軟FIFO的設(shè)計(jì)。部分讀寫雙端口RAM和空/滿標(biāo)志位的判斷源程序如下:
4 系統(tǒng)仿真
如果系統(tǒng)的讀時(shí)鐘頻率大于寫時(shí)鐘頻率,就有可能出現(xiàn)讀空的情況;如果系統(tǒng)的寫時(shí)鐘頻率大于讀時(shí)鐘頻率,就可能出現(xiàn)寫滿的情況。在實(shí)際系統(tǒng)中,一般都設(shè)置寫時(shí)鐘頻率大于讀時(shí)鐘頻率,故本文只考慮后一種情況。
評(píng)論