FPGA廠商提供了豐富的IP核,基礎(chǔ)性IP核都是可以直接免費(fèi)調(diào)用的,比如FIFO、RAM等等。
本文主要介紹FIFO的一些基礎(chǔ)知識(shí),幫助大家能夠理解FIFO的基礎(chǔ)概念。
一、FIFO介紹
FIFO全稱是First In First Out,即先進(jìn)先出。
FIFO是一個(gè)數(shù)據(jù)緩存隊(duì)列,主要特點(diǎn)就是數(shù)據(jù)順序?qū)懭耄侔凑胀瑯拥捻樞蜉敵鰯?shù)據(jù),即先進(jìn)去的數(shù)據(jù)先被取出來。
1、FIFO的通俗理解
FIFO可以類比一個(gè)水池。
當(dāng)寫通道打開時(shí),就相當(dāng)于往水池里加水;而當(dāng)讀通道打開時(shí),就相當(dāng)于從水池中放水。
如果持續(xù)不斷地加水和放水,如果加水速度超過了放水速度,那么水池就會(huì)滿了,這時(shí)FIFO就會(huì)發(fā)生溢出,水會(huì)溢出水池。
相反,如果放水速度快于加水速度,那么水池就會(huì)變空,F(xiàn)IFO就會(huì)出現(xiàn)空的情況。
2、FIFO的分類
根據(jù)FIFO輸入時(shí)鐘的區(qū)別,可以分為同步FIFO和異步FIFO。
同步 FIFO 只有一個(gè)獨(dú)立的時(shí)鐘端口 clock,所有的輸入輸出信號(hào)都同步于 clock 信號(hào)。
異步FIFO有兩個(gè)時(shí)鐘,寫端口和讀端口分別有獨(dú)立的時(shí)鐘,所有寫相關(guān)的信號(hào)都是屬于寫時(shí)鐘,所有與讀相關(guān)的信號(hào)都屬于讀時(shí)鐘。
3、FIFO IP
FIFO一般不需要自己去寫代碼實(shí)現(xiàn),F(xiàn)PGA官方軟件都提供了FIFO IP,直接使用即可。
FPGA IP特性:
- 配置選項(xiàng)和控制手段廣泛:提供了豐富的配置選項(xiàng)和控制手段,可以根據(jù)用戶的需求進(jìn)行靈活配置。
- 靈活的接口和支持多種數(shù)據(jù)寬度:接口設(shè)計(jì)靈活,同時(shí)支持多種不同數(shù)據(jù)寬度的操作。
- 支持多種讀寫模式:支持單寫單讀、單寫多讀、多寫單讀、多寫多讀等讀寫模式,可以適應(yīng)不同的應(yīng)用場景。
- 多種存儲(chǔ)方式:支持異步、同步等不同的存儲(chǔ)方式,可以根據(jù)需求選擇合適的存儲(chǔ)方式。
- 可配置的參數(shù):可以配置深度、寬度、讀寫數(shù)據(jù)寬度等參數(shù),使得用戶可以按需定制FIFO的特性。
二、FIFO的應(yīng)用
FIFO的應(yīng)用非常廣泛,其中同步fifo主要用于處理數(shù)據(jù)緩存,異步fifo主要用于處理跨時(shí)鐘數(shù)據(jù)傳輸處理。
常用的應(yīng)用場景如下:
接口數(shù)據(jù)/消息緩沖:FIFO可以用于緩存數(shù)據(jù)或消息,以應(yīng)對(duì)數(shù)據(jù)流量突發(fā)情況,同時(shí)降低或消除背壓的頻率,減小上級(jí)模塊的復(fù)雜度。
接口協(xié)議隔離:在模塊與復(fù)雜的協(xié)議進(jìn)行對(duì)接時(shí),F(xiàn)IFO可以作為隔離后的用戶接口,降低模塊接口協(xié)議設(shè)計(jì)復(fù)雜度,并實(shí)現(xiàn)協(xié)議接口的IP化,提高系統(tǒng)的復(fù)用性。
跨時(shí)鐘域處理:FIFO可以用于處理異步時(shí)鐘域的數(shù)據(jù)、消息和總線。通過FIFO,可以實(shí)現(xiàn)簡單、快速、安全的跨時(shí)鐘域處理。
數(shù)據(jù)位寬轉(zhuǎn)換:FIFO可以用于實(shí)現(xiàn)數(shù)據(jù)的位寬轉(zhuǎn)換,例如從512位轉(zhuǎn)換為256位。
三、FIFO的重要概念
1、主要端口
讀寫時(shí)鐘:同步FIFO是指讀時(shí)鐘和寫時(shí)鐘為同一個(gè)時(shí)鐘。異步FIFO讀寫時(shí)鐘是獨(dú)立的兩個(gè)時(shí)鐘。
讀寫使能:讀寫控制的使能
滿信號(hào):FIFO里面的緩存數(shù)據(jù)數(shù)量達(dá)到了最大深度值
空信號(hào):FIFO里面的緩存全部被讀空
深度:FIFO所能容納的最大數(shù)據(jù)數(shù)量
2、FIFO的存儲(chǔ)結(jié)構(gòu)
FIFO通常采用循環(huán)存儲(chǔ)結(jié)構(gòu),即存儲(chǔ)空間是一個(gè)環(huán)形的緩沖區(qū)。
數(shù)據(jù)寫入時(shí),從第一個(gè)寫入地址開始,依次向后寫入;數(shù)據(jù)讀取時(shí),從第一個(gè)讀取地址開始,依次向后讀取。
當(dāng)寫入數(shù)據(jù)量達(dá)到FIFO的深度時(shí),將不能再寫入數(shù)據(jù),此時(shí)需要停止寫入操作,等待讀取操作將數(shù)據(jù)讀出,否則將發(fā)生溢出。
同樣,當(dāng)讀取數(shù)據(jù)量達(dá)到FIFO的深度時(shí),將不能再讀取數(shù)據(jù),此時(shí)需要停止讀取操作,等待寫入操作將數(shù)據(jù)寫入。
3、FIFO的空滿狀態(tài)
FIFO具有空標(biāo)志和滿標(biāo)志,用于指示FIFO的存儲(chǔ)狀態(tài)。
當(dāng)FIFO空時(shí),寫入操作將停止,直到FIFO非空;當(dāng)FIFO滿時(shí),讀取操作將停止,直到FIFO非滿。
空滿狀態(tài)的判斷通常采用比較讀寫指針的位置關(guān)系,例如當(dāng)寫入指針等于讀取指針時(shí),F(xiàn)IFO為空;當(dāng)寫入指針比讀取指針多一位(達(dá)到FIFO的深度)時(shí),F(xiàn)IFO為滿。
4、FIFO的讀寫操作
FIFO的讀寫操作遵循先進(jìn)先出的原則。
寫入數(shù)據(jù)時(shí),根據(jù)寫地址將數(shù)據(jù)寫入FIFO的空閑位置;讀取數(shù)據(jù)時(shí),根據(jù)讀地址從FIFO的存儲(chǔ)位置讀取數(shù)據(jù)。
在連續(xù)的讀寫操作中,讀寫指針會(huì)自動(dòng)遞增,以便在下次讀寫時(shí)正確指向FIFO的下一個(gè)位置。
5、FIFO的同步處理
由于FIFO通常涉及不同時(shí)鐘域之間的數(shù)據(jù)傳輸,因此需要進(jìn)行同步處理。
在異步FIFO中,寫入時(shí)鐘和讀取時(shí)鐘是不同的,需要使用握手協(xié)議進(jìn)行同步。
在同步FIFO中,讀寫時(shí)鐘是同一個(gè)時(shí)鐘,但仍然需要進(jìn)行時(shí)序分析,以保證數(shù)據(jù)的穩(wěn)定性和可靠性
-
FPGA
+關(guān)注
關(guān)注
1629文章
21744瀏覽量
603660 -
fifo
+關(guān)注
關(guān)注
3文章
388瀏覽量
43693 -
IP核
+關(guān)注
關(guān)注
4文章
327瀏覽量
49507 -
數(shù)據(jù)緩存
+關(guān)注
關(guān)注
0文章
23瀏覽量
7065
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論