基于FPGA內(nèi)部的FIFO設(shè)計(jì)
在FPGA設(shè)計(jì)中,內(nèi)部的FIFO設(shè)計(jì)是 個(gè)不可或缺的內(nèi)容,其設(shè)計(jì)的質(zhì)師會(huì)直接影響FPGA的邏輯容量和時(shí)序。在Xilinx中的某些高端器件是內(nèi)置的FIFO控制器,在coregen中可以直接產(chǎn)生這的硬FIFO控制器, 強(qiáng)烈建議能夠使用硬的HFO控制器的場(chǎng)合,直接的好處足節(jié)省邏輯資源和提高邏輯速度,對(duì)于絕大部分的HFO設(shè)計(jì),推薦使用Xili coregm產(chǎn)生。這樣可以保證功能正確,對(duì)于需要定制FIFO控制器的場(chǎng)合請(qǐng)小心。
下面將結(jié)合coregn來(lái)說(shuō)明如何設(shè)計(jì)一個(gè)FIFO
產(chǎn)生FIFO時(shí)應(yīng)使用coregen的FIFO generator,打開(kāi)后顯示如圖1所示的對(duì)話框。
圖1 FIFO cenerator對(duì)話框
注意其中選項(xiàng)的意義在左邊的(Read/Wfik 0ock Donmm)中選擇同步FIFO或異步FIFO,即囪寫(xiě)時(shí)鐘是否是同-個(gè)。
在( Memory Type)中選擇是使用內(nèi)部的塊RAM或分布式RAM,或者移位寄存器或者內(nèi)置的FIFO(目前Virtex ̄4和Virtex-5的器件有內(nèi)置FIFO)。選擇時(shí)根據(jù)具體應(yīng)用決定,一般來(lái)說(shuō),當(dāng)需要的RAM較小時(shí)選擇分布式RAM;當(dāng)使用有內(nèi)置FIFO的器件時(shí)優(yōu)選內(nèi)置FIFO;較大的RAM且沒(méi)有內(nèi)置FIFO的器件時(shí)選擇塊RAM。
(Supported Features)列的第1個(gè)功能是對(duì)不對(duì)稱的位寬的支持,指FIFO的讀/寫(xiě)位寬可以不一致;第2個(gè)功能是First-Word Fall-Through,當(dāng)需要看見(jiàn)FIFO內(nèi)的第1個(gè)數(shù),而又不想進(jìn)行讀操作時(shí)使用,一般用做需要根據(jù)FIFO內(nèi)數(shù)據(jù)決定是否需要對(duì)FIFO進(jìn)行操作的場(chǎng)合;第3個(gè)功能是說(shuō)是否使用內(nèi)部的內(nèi)置FIFO控制器,當(dāng)選擇內(nèi)置FIFO的應(yīng)用時(shí)會(huì)有這個(gè)功能;第4個(gè)是ECO的支持,指內(nèi)置的Error Correcti。n Checking的功能,目前只有Virtex-5的塊RAM和內(nèi)置FIFO有此功能。
單擊【下一步】按鈕進(jìn)入(Fifo Generator)對(duì)話框2,如圖2所示。
圖2 (Fifo Generator)對(duì)話框2
在其中設(shè)置詳細(xì)的屬性,從上往下一是是否標(biāo)準(zhǔn)FIFO,還是需要支持First-WordFall-Through:二是對(duì)于內(nèi)置FIFO的應(yīng)用,還需要設(shè)置讀/寫(xiě)時(shí)鐘的頻率;三是設(shè)置讀/寫(xiě)位寬和深度;四是是否需要內(nèi)置的ECO;五是是否要使用塊RAM或FIFO內(nèi)的寄存器。注意選擇了使用內(nèi)部寄存器,下面顯示的Read Latency會(huì)增加。通常塊RAM或者FIFO是輸入寄存,鎖存器輸出,所以不選使用內(nèi)部寄存器。Read Latency是一個(gè)時(shí)鐘周期,選擇時(shí)會(huì)是兩個(gè)時(shí)鐘周期。在設(shè)計(jì)時(shí)需要根據(jù)時(shí)鐘頻率和時(shí)序要求決定是否選這個(gè)選項(xiàng),不選的話,RAM會(huì)有一個(gè)較大的Tco。當(dāng)然也可以不選擇這個(gè)選項(xiàng)而多增加一級(jí)寄存器在代碼中,這樣處理的優(yōu)點(diǎn)是可以抵消一些線延時(shí);缺點(diǎn)是無(wú)法使用RAM內(nèi)置的寄存器,從而浪費(fèi)了資源。
單擊【下一步】按鈕將出現(xiàn)如圖3所示的對(duì)話框3。
從上往下一是是否需要幾乎空滿標(biāo)志;二是是否需要產(chǎn)生讀/寫(xiě)響應(yīng)信號(hào);三是是否需要產(chǎn)生讀/寫(xiě)錯(cuò)誤標(biāo)志;四是是否需要產(chǎn)生復(fù)位及復(fù)位是同步的還是異步的;五是復(fù)位時(shí)滿標(biāo)志的值。上面的讀/寫(xiě)錯(cuò)誤就是overflow和underflow,是指當(dāng)FIFO滿時(shí)仍在寫(xiě),空時(shí)仍在讀的標(biāo)志,可以用來(lái)監(jiān)控FIFO是否出現(xiàn)了錯(cuò)誤操作。RAM的復(fù)位指復(fù)位RAM的輸入輸出寄存器,而不會(huì)復(fù)位RAM內(nèi)部的內(nèi)容。
圖3 Fifo Generator 對(duì)話框
單擊【下一步】按鈕打開(kāi)如圖4所示的對(duì)話框4。
圖4 Fifo Generator對(duì)話框4
在其中可以設(shè)置FIFO的空滿標(biāo)志的閾值。
單擊【下一步】按鈕打開(kāi)如圖5所示的對(duì)話框5。
在其中可以設(shè)置將FIFO內(nèi)部的數(shù)據(jù)的個(gè)數(shù)通過(guò)接口開(kāi)放給用戶邏輯可見(jiàn)。
單擊【下一步】按鈕打開(kāi)對(duì)話框如圖6所示的對(duì)話框6,可以看到所有的設(shè)置,并仔細(xì)檢查設(shè)置是否正確。
單擊(Finish)按鈕,會(huì)產(chǎn)生.V的原文件和.edn或。ngc的網(wǎng)表。綜合和仿真可以用。Ⅴ的源文件,布局布線時(shí)需要將.edn的文件放在mlcro search path的目錄或工程目錄中。另外,還會(huì)產(chǎn)生.xco的文件,這是產(chǎn)生的∏FO時(shí)的配置文件,下次可以在coregen中import這個(gè)文件產(chǎn)生一個(gè)和這次配置相同的FIFO。
如本節(jié)所示,在coregen中產(chǎn)生FIFO是一個(gè)較簡(jiǎn)單的操作,推薦能用coregen時(shí)盡量使用。手動(dòng)定制FIFO不屬于本節(jié)的內(nèi)容,在此不講述。
圖5 Fifo Generator對(duì)話框5
圖6 Fifo Generator對(duì)話框6
參考文獻(xiàn):
[1].Throughdatasheethttp://www.dzsc.com/datasheet/Through_1177452.html.
[2].ECOdatasheethttp://www.dzsc.com/datasheet/ECO_2043505.html.
[3].Virtex-5datasheethttp://www.dzsc.com/datasheet/Virtex-5_1706996.html.
來(lái)源:ks991次