1、FIFO定義
FIFO是英文First In First Out的縮寫,是一種先進先出的數據緩存器,他與普通存儲器的區(qū)別是沒有外部讀寫地址線,這樣使用起來非常簡單,但缺點就是只能順序寫入數據,順序的讀出數據,其數據地址由內部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或寫入某個指定的地址。
2、FIFO功能
FIFO存儲器是系統(tǒng)的緩沖環(huán)節(jié),如果沒有FIFO存儲器,整個系統(tǒng)就不可能正常工作,它主要有幾方面的功能:
1)對連續(xù)的數據流]進行緩存,防止在進機和存儲操作時丟失數據;
2)數據集中起來進行進棧和存儲,可避免頻繁的總線操作,減輕CPU的負擔;
3)允許系統(tǒng)進行DMA操作,提高數據的傳輸速度。這是至關重要的一點,如果不采用DMA操作,數據傳輸將達不到傳輸要求,而且大大增加CPU的負擔,無法同時完成數據的存儲工作。
3、FIFO分類
FIFO的分類根據FIFO工作的時鐘域,可以將FIFO分為同步FIFO和異步FIFO。同步FIFO是指讀時鐘和寫時鐘為同一個時鐘。在時鐘沿來臨時同時發(fā)生讀寫操作。異步FIFO是指讀寫時鐘不一致,讀寫時鐘是互相獨立的。同步FIFO和異步FIFO如圖所示,從圖中可以看到,同步FIFO 具有一個獨立的時鐘端口 clock,因此所有的輸入輸出信號都同步于 clock 信號。而在異步FIFO 結構中,寫端口和讀端口分別有獨立的時鐘,所有與寫相關的信號都是同步于寫時鐘 wrclk,所有與讀相關的信號都是同步于讀時鐘 rdclk。
同步 FIFO 常用于同步時鐘的數據緩存,異步 FIFO 常用于跨時鐘域的數據信號的傳遞,例如時鐘域 A 下的數據 data1 傳遞給異步時鐘域 B,當 data1 為連續(xù)變化信號時,如果直接傳遞給時鐘域 B 則可能會導致收非所送的情況,即在采集過程中會出現包括亞穩(wěn)態(tài)問題在內的一系列問題,使用異步 FIFO 能夠將不同時鐘域中的數據同步到所需的時鐘域中。
4、FIFO的幾個重要參數
FIFO 的寬度:FIFO 一次讀寫操作的數據位 N;
FIFO 的深度:FIFO 可以存儲多少個寬度為 N 位的數據。
空標志:對于雙時鐘 FIFO 又分為讀空標志 rdempty 和寫空標志 wrempty。FIFO 已空或將要空時由 FIFO
的狀態(tài)電路送出的一個信號,以阻止 FIFO 的讀操作繼續(xù)從 FIFO 中讀出數據而造成無效數據的讀出。
滿標志:對于雙時鐘 FIFO 又分為讀滿標志 rdfull 和寫滿標志 wrfull。FIFO 已滿或將要寫滿時由 FIFO
的狀態(tài)電路送出的一個信號,以阻止 FIFO 的寫操作繼續(xù)向 FIFO 中寫數據而造成溢出。
讀時鐘:讀 FIFO 時所遵循的時鐘,在每個時鐘的上升沿觸發(fā)。
寫時鐘:寫 FIFO 時所遵循的時鐘,在每個時鐘的上升沿觸發(fā)。