FPGA研發(fā)之道(12)-設(shè)計不是湊波形(二)FIFO(下)
FIFO在FPGA設(shè)計中除了上篇所介紹的功能之外, 還有以下作為以下功能使用:
本文引用地址:http://m.butianyuan.cn/article/264819.htm(1) 內(nèi)存申請
在軟件設(shè)計中,使用malloc()和free()等函數(shù)可以用于內(nèi)存的申請和釋放。特別是在有操作系統(tǒng)的環(huán)境下,可以保證系統(tǒng)的內(nèi)存空間被動態(tài)的分配和使用,非常的方便。如果在FPGA內(nèi)部實現(xiàn)此動態(tài)的內(nèi)存分配和申請,相對來說較為復(fù)雜,例如某些需要外部數(shù)據(jù)存儲且需動態(tài)改變的應(yīng)用需求下,需要對FPGA外部DDR(或SRAM等)的存儲空間,進行動態(tài)的分配和釋放。通過使用FIFO作為內(nèi)存分配器,雖然比不上軟件的靈活和方便,但是使用也較為簡便。
舉例說明假設(shè)外部存儲空間為8Mbyte,可將其劃分為8192個1Kbyte空間。并將數(shù)值0-8191存儲FIFO中,F(xiàn)IFO內(nèi)部存儲所標(biāo)示可用的內(nèi)存空間。如下圖所示。
首先,進行內(nèi)存的初始化,即將0-8191寫入FIFO中。
如需申請內(nèi)存后,從FIFO中讀取值A(chǔ),然后根據(jù)A的標(biāo)示,寫入A所指示的外部存儲區(qū)(DDR)中相應(yīng)的位置,即申請{A,10’h0_00} ->{A,10’h3_FF}的空間區(qū)域。
如釋放內(nèi)存后,即可向FIFO中寫入相應(yīng)的值。即可保證下次該空間能夠被設(shè)計使用。
在此種設(shè)計中,F(xiàn)IFO承擔(dān)了內(nèi)存分配和釋放器的角色。此時只能申請或釋放最小單元倍數(shù)的內(nèi)存空間,如本例所示:為1Kbit。如FIFO讀空,則代表申請內(nèi)存失敗,需要等待其他塊內(nèi)存釋放后再寫入FIFO中,才能再次申請。
(2) 串并轉(zhuǎn)換
對于串并轉(zhuǎn)換,可能對于FPGA工程師來說,非常常見,但是如果有專門的IP實現(xiàn)此功能,可簡化設(shè)計,減少出錯及驗證的工作量。例如:對于外部輸入的需要進行串并轉(zhuǎn)換的信號,并進行存儲的信號,如設(shè)計進行串并轉(zhuǎn)換在存儲等操作,設(shè)計,可以直接通過例化讀寫位寬不一致的FIFO,例如1入8出的FIFO,可直接將外部輸入信號直接轉(zhuǎn)換成8BIT信號并進行存儲后,供后續(xù)處理使用(其他的)。
(3) 業(yè)務(wù)優(yōu)先級劃分
通過FIFO設(shè)置不同水位線,可以劃分不同的業(yè)務(wù)優(yōu)先級,保證高業(yè)務(wù)優(yōu)先級數(shù)據(jù)流在帶寬受限時,優(yōu)先通過,而低業(yè)務(wù)優(yōu)先級只能在滿足高優(yōu)先級需求后有多余的帶寬時才能通過。并且可以劃分多個優(yōu)先級,滿足多種業(yè)務(wù)的需求。設(shè)計將在以后篇幅中詳述。
(4)固定帶寬設(shè)定
通過對FIFO接口的讀出使能,能夠保證實現(xiàn)固定帶寬的輸出,例如FIFO讀接口為32bit,而讀時鐘為50Mhz,則輸出為1.6Gbit/S。如實現(xiàn)固定帶寬的輸出(如1Gbit/S),有兩種方式,一種可以通過降低時鐘頻率到31.25Mhz。另一種方式,可通過讀信號中間插入等待周期,如果讀出長度為N的數(shù)據(jù)所需時鐘周期為M,則需等待(3M/5)的周期,從而降低至1Gbit/S的處理能力,這在某些需要進行流量限制的業(yè)務(wù)方式中使用。
對于FIFO來說,作為FPGA內(nèi)部資源的一個常用器件,最常見應(yīng)用于異步時鐘域劃分和緩沖數(shù)據(jù),但不僅限于此,簡化設(shè)計、減少耦合、輸入輸出接口固定,便于仿真和驗證,都是使用FIFO帶來的設(shè)計上的益處。
fpga相關(guān)文章:fpga是什么
評論