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