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