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