FIFO,先進(jìn)先出。在FPGA中使用的FIFO一般是指對數(shù)據(jù)的存儲具有先進(jìn)先出的緩沖器,F(xiàn)IFO與普通的存儲器的不同在于它沒有讀寫地址線。舉個(gè)例子,當(dāng)FPGA從外部傳感器讀取到一連串?dāng)?shù)據(jù)時(shí),首先被寫入FIFO中,然后FPGA再以UART串口通信依次將數(shù)據(jù)發(fā)送出去。因?yàn)閭鞲衅鞑杉瘮?shù)據(jù)的速度很快,比如當(dāng)傳感器使用SPI通信協(xié)議,以2M的SPI數(shù)據(jù)速率讀取時(shí),串口使用9600的波特率肯定跟不上,因此需要先將從傳感器處采集的數(shù)據(jù)使用FIFO緩存起來,然后再使用串口緩慢發(fā)送出去。
01 單時(shí)鐘FIFO
單時(shí)鐘FIFO具有一個(gè)獨(dú)立的時(shí)鐘端口,所有輸入信號的讀取都是在該時(shí)鐘端口信號的上升沿進(jìn)行的,所有輸出信號的變化也是在該時(shí)鐘信號的上升沿的控制下進(jìn)行的,單時(shí)鐘FIFO的所有輸入輸出信號基本都是和時(shí)鐘信號同步。
data為寫入的數(shù)據(jù),此處為8位。然后wrreq為請求寫操作,rdreq為請求讀操作,clock為時(shí)鐘信號。q為輸出端,8位數(shù)據(jù)的輸出端。full為滿標(biāo)志,當(dāng)fifo緩沖器存儲數(shù)據(jù)溢滿時(shí),full端將輸出高電平。almost_full為接近滿標(biāo)志信號,當(dāng)存儲的數(shù)據(jù)即將要滿時(shí),almost_full端將輸出高電平以阻止寫操作繼續(xù)向fifo中寫數(shù)據(jù)造成數(shù)據(jù)溢出。empty則為空標(biāo)志位,當(dāng)fifo中數(shù)據(jù)全部讀取完后,empty端便會輸出高電平用來標(biāo)記,almost_empty便是在fifo即將要空時(shí)便會發(fā)出高電平,以阻止fifo的讀操作繼續(xù)從fifo中讀取數(shù)據(jù)。usedw為fifo中的字?jǐn)?shù),sclr為異步清零端口。
02 IP核使用
首先創(chuàng)建一個(gè)FIFO的工程保持在prj下,并在prj下新建一個(gè)ip的文件夾。點(diǎn)擊Tools -> MegaWizard Plug-In Manager。
選擇創(chuàng)建一個(gè)新的,然后如下圖,在左邊搜索框輸入FIFO,然后選擇第一項(xiàng),選擇后在右邊的路徑中輸入地址ip并以fifo.v保持。
接下來如下圖,首先設(shè)置數(shù)據(jù)的位寬及深度,此處設(shè)置數(shù)據(jù)位寬為8位,數(shù)據(jù)深度為256words(及多少個(gè)數(shù)據(jù))。
然后接下來設(shè)置需要的端口,根據(jù)01中的結(jié)構(gòu)圖,這里需要選擇full滿、empty空、以及接近滿almost_full、接近空almost_empty和異步清零端sclr。在接近滿與接近空處需要設(shè)置閾值,即到達(dá)多少時(shí)接近滿端口開始輸出標(biāo)志信號,這里設(shè)置數(shù)據(jù)寫操作達(dá)到254words時(shí)接近滿標(biāo)志開始標(biāo)記,數(shù)據(jù)讀操作在usedw為2時(shí)接近空端口開始標(biāo)記。
下圖便是讀操作請求確認(rèn)信號的兩種模式,一個(gè)是普通模式一個(gè)是前顯模式。
選擇器件優(yōu)化方式是面積優(yōu)先還是速度優(yōu)先,更換可以看到資源占用率是不一樣的,選擇速度優(yōu)先必然使用資源會上升。
然后便一直next后finish創(chuàng)建完成。
這時(shí)轉(zhuǎn)回界面便可看到生成ip的fifo.v文件,然后便開始書寫激勵(lì)仿真文件。
首先還是例化需要仿真的文件,然后仿真時(shí)鐘并在仿真文件中與例化程序進(jìn)行連線。
接下來便是定義常量i,寫一個(gè)for循環(huán),i自加寫請求wrreq置1將i的值寫入數(shù)據(jù)data中,usedw中數(shù)據(jù)深度開始依次增多,等256個(gè)words寫完之后,寫請求關(guān)閉,然后開始讀操作,同樣的i從零自加到255,然后將讀請求置1開啟,系統(tǒng)便開始從輸出端q中依次輸出data中的數(shù)據(jù),同時(shí)usedw中的數(shù)據(jù)深度也開始一次減少。
接下來看仿真波形圖:
此處是綜合仿真圖,前半部分是寫操作的波形圖,后半部分便是讀操作的波形圖。
上圖這部分為寫操作,圖中可以看到i每個(gè)周期自加1,i的值便賦給數(shù)據(jù)data,然后usedw便是統(tǒng)計(jì)此時(shí)data中的數(shù)據(jù)多少即深度,在usedw為2時(shí)可以看到almost_empty接近空出現(xiàn)一個(gè)下降沿,在data中開始寫入數(shù)據(jù)時(shí),寫請求wrreq產(chǎn)生高電平。
此處可以看出,在深度usedw自加至254時(shí),接近滿端almost_full便會產(chǎn)生上升沿用來標(biāo)記,計(jì)滿后full端產(chǎn)生上升沿,寫操作結(jié)束。
上圖為讀操作,這里隨著i的自加輸出端q開始依次輸出data中的數(shù)據(jù),然后usedw隨著data中的數(shù)據(jù)被讀取便開始自減。
后面可以看出,當(dāng)深度usedw為2時(shí),接近空端almost_empty產(chǎn)生上升沿,清空后empty也產(chǎn)生上升沿,讀操作結(jié)束。
-
傳感器
+關(guān)注
關(guān)注
2553文章
51390瀏覽量
756572 -
fifo
+關(guān)注
關(guān)注
3文章
389瀏覽量
43855 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1746瀏覽量
131799 -
uart
+關(guān)注
關(guān)注
22文章
1243瀏覽量
101767 -
IP核
+關(guān)注
關(guān)注
4文章
331瀏覽量
49635
發(fā)布評論請先 登錄
相關(guān)推薦
評論