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