0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FIFO的深度應(yīng)該怎么計(jì)算

FPGA開(kāi)源工坊 ? 來(lái)源:FPGA開(kāi)源工坊 ? 2024-10-25 15:20 ? 次閱讀

本文首發(fā)于公眾號(hào) FPGA開(kāi)源工坊

FIFO是FPGA/IC設(shè)計(jì)中經(jīng)常使用到的模塊,它經(jīng)常被用在兩個(gè)模塊之間進(jìn)行數(shù)據(jù)的緩存,以避免數(shù)據(jù)在傳輸過(guò)程中丟失。同時(shí)FIFO也經(jīng)常被用在跨時(shí)鐘域處理中。

FIFO深度的計(jì)算是FPGA和IC筆面試中經(jīng)常被問(wèn)到的一個(gè)問(wèn)題,在這篇文章里面我們就來(lái)討論一下FIFO的深度應(yīng)該怎么計(jì)算。

FIFO的深度如果設(shè)置的小了就會(huì)有丟數(shù)的風(fēng)險(xiǎn),設(shè)置的大了會(huì)有資源的浪費(fèi)。

在討論如何計(jì)算FIFO的深度之前,應(yīng)該先明白一個(gè)概念,那就是突發(fā)傳輸 ,也就是burst。

突發(fā)傳輸

為什么要明確突發(fā)傳輸?shù)母拍钅兀课覀兗僭O(shè)有以下幾種開(kāi)發(fā)場(chǎng)景。

場(chǎng)景一:讀比寫快

假如說(shuō)一個(gè)FIFO在不間斷的向里面寫入數(shù)據(jù)和讀出數(shù)據(jù),并且向FIFO里面寫數(shù)據(jù)的速度比從FIFO里面讀數(shù)據(jù)的速度要慢,那么是不是這個(gè)FIFO永遠(yuǎn)都不會(huì)被寫滿了。

場(chǎng)景二:寫比讀快

假如說(shuō)一個(gè)FIFO在不間斷的向里面寫入數(shù)據(jù)和讀出數(shù)據(jù),并且寫入的速度比讀出的速度快,那么是不是意味著這個(gè)FIFO的深度無(wú)論設(shè)置多少都終將會(huì)被寫滿。

所以不間斷在對(duì)FIFO不間斷的進(jìn)行讀寫的情形中討論FIFO深度是沒(méi)有意義的。

而我們要討論的FIFO深度其實(shí)是在突發(fā)傳輸中才是有意義的。

突發(fā)傳輸:就是說(shuō)一個(gè)又一個(gè)的數(shù)據(jù)包,每一個(gè)數(shù)據(jù)包之間是有間隙的。

每一個(gè)數(shù)據(jù)包的長(zhǎng)度叫做burst length 突發(fā)長(zhǎng)度

FIFO的最小深度就與突發(fā)長(zhǎng)度,讀寫速率有關(guān)系。

計(jì)算出來(lái)FIFO的深度關(guān)鍵就在于計(jì)算出來(lái)在讀寫突發(fā)的這段時(shí)間內(nèi),有多少數(shù)據(jù)沒(méi)有被讀走,這個(gè)數(shù)據(jù)的多少就是FIFO的最小深度。

計(jì)算公式

FIFO的深度可以用下面的公式計(jì)算出來(lái)

可以看到在上述公式里面的關(guān)鍵就是確定burst length。

下面就通過(guò)幾個(gè)例子來(lái)說(shuō)明burst length的計(jì)算。

例子

例一

某大廠的筆試題:

設(shè)計(jì)同步FIFO,每100個(gè)cycle可以寫入80個(gè)數(shù)據(jù),每10個(gè)cycle可以讀出8個(gè)數(shù)據(jù),F(xiàn)IFO的深度至少為:

A: 16

B: 32

C: 64

D: 72

首先從題目中知道同步FIFO,所以rd_clk和wr_clk是一樣的。

第二每10個(gè)cycle中可以讀出8個(gè)數(shù)據(jù),那么rd_rate就是8/10也就是0.8

現(xiàn)在關(guān)鍵就是burst length的計(jì)算了。

每100個(gè)cycle可以寫入80個(gè)數(shù)據(jù),那么是不是意味著這80個(gè)數(shù)據(jù)可以在100個(gè)cycle的周期的任意時(shí)間寫進(jìn)FIFO里面。那么什么時(shí)候是連續(xù)寫入數(shù)據(jù)最多的極端情況呢,這個(gè)極端情況就是burst length最大的時(shí)候。

這個(gè)極端情況就是在連續(xù)的200個(gè)cycle中,是不是可以寫入160個(gè)數(shù)據(jù),那么這160個(gè)數(shù)據(jù)背靠背的連續(xù)寫入就是極端情況了。

如下圖所示:

80d0dd66-9052-11ef-a511-92fbcf53809c.png

在連續(xù)兩百個(gè)周期內(nèi),前20個(gè)周期空閑,中間160個(gè)時(shí)鐘向FIFO寫入數(shù)據(jù),最后20個(gè)時(shí)鐘再次空閑。

所以burst length就是160

所以FIFO的最小深度為

例二

有一個(gè)FIFO設(shè)計(jì),輸入時(shí)鐘100MHz,輸出時(shí)鐘80MHz,輸入數(shù)據(jù)模式是固定的,其中1000個(gè)時(shí)鐘中有800個(gè)時(shí)鐘傳輸連續(xù)數(shù)據(jù),另外200個(gè)空閑,請(qǐng)問(wèn)為了避免FIFO下溢/上溢,最小深度是多少

A: 320

B: 80

C: 160

D: 200

根據(jù)題意wr_clk是100, rd_clk是800。

因?yàn)檩斎霐?shù)據(jù)的模式是固定的,所以不用考慮背靠背的情況,所以burst length是800

題目中沒(méi)有說(shuō)明在輸出的時(shí)候讀使能是否會(huì)拉低,所以我們認(rèn)為FIFO一直在輸出,也就是rd_rate是1

所以FIFO的深度為:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21636

    瀏覽量

    601308
  • IC設(shè)計(jì)
    +關(guān)注

    關(guān)注

    37

    文章

    1290

    瀏覽量

    103699
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    387

    瀏覽量

    43500
  • 時(shí)鐘域
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    9524

原文標(biāo)題:FPGA|IC筆面試--FIFO深度計(jì)算

文章出處:【微信號(hào):FPGA開(kāi)源工坊,微信公眾號(hào):FPGA開(kāi)源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA學(xué)習(xí)-總結(jié)fifo設(shè)計(jì)中深度H的計(jì)算

    對(duì)于fifo來(lái)說(shuō),H的設(shè)置至關(guān)重要。既要保證功能性,不溢出丟數(shù),也要保證性能流水。深度設(shè)置過(guò)小會(huì)影響功能,過(guò)大又浪費(fèi)資源。因此,總結(jié)下fifo設(shè)計(jì)中深度H的
    發(fā)表于 08-29 11:19 ?1448次閱讀

    談一談FIFO深度

    最近加的群里面有些萌新在進(jìn)行討論**FIFO深度**的時(shí)候,覺(jué)得 **FIFO深度計(jì)算比較難以理解** 。所
    的頭像 發(fā)表于 11-28 16:19 ?1219次閱讀
    談一談<b class='flag-5'>FIFO</b>的<b class='flag-5'>深度</b>

    求助,F(xiàn)PGA fifo深度不夠怎么辦?

    圖像壓縮之后的數(shù)據(jù)存入fifo,然后經(jīng)過(guò)nrf2401發(fā)送。。但是由于圖片尺寸比較大,導(dǎo)致fifo深度不夠,受限于FPGA芯片尺寸的限制,fifo
    發(fā)表于 05-22 14:34

    FIFO深度怎么設(shè)計(jì)

    FIFO先進(jìn)深度?我也想知道我的輸入是否改變?yōu)?個(gè)數(shù)據(jù)單元(每個(gè)16位)的突發(fā),應(yīng)該是什么深度?謝謝,阿倫以上來(lái)自于谷歌翻譯以下為原文Hi All, I have a design
    發(fā)表于 01-10 10:45

    如何計(jì)算異步FIFO深度和單獨(dú)的時(shí)鐘源

    fifo不為空時(shí),用rd clk = 50 MHz連續(xù)讀出數(shù)據(jù)。從模擬開(kāi)始,在5次寫入后,fifo空置為空。如何正確計(jì)算深度?最初,我的深度
    發(fā)表于 04-09 06:25

    如何計(jì)算Async Fifo Depth

    嗨,我想計(jì)算異步fifo深度,但我很困惑如何計(jì)算它。 fifo參數(shù)如下:寫Clk Freq = 60 MHz。讀取Clk Freq = 1
    發(fā)表于 04-17 08:25

    什么是fifo深度?

    - 恒定8 MB /秒(一旦開(kāi)始讀取,您將需要保持?jǐn)?shù)據(jù)速率,不允許上溢/下溢)什么應(yīng)該fifo深度?謝謝,以上來(lái)自于谷歌翻譯以下為原文Hi, I have a design problem where
    發(fā)表于 04-26 10:56

    談?wù)?b class='flag-5'>FIFO閾值的閾值設(shè)置及深度計(jì)算

    `立即學(xué)習(xí)—60天FPGA工程師入門就業(yè)項(xiàng)目實(shí)戰(zhàn)特訓(xùn)營(yíng)(3月16日開(kāi)班) 談?wù)?b class='flag-5'>FIFO閾值的閾值設(shè)置及深度計(jì)算1.什么是FIFO2.什么情況下使用FIFO3.什么
    發(fā)表于 02-19 21:09

    【教程】“最惡劣”的FIFO深度計(jì)算

    FIFO內(nèi)緩存數(shù)據(jù)最多。計(jì)算此時(shí)寫入數(shù)據(jù)-該階段讀出數(shù)據(jù)即為FIFO的最小深度?! ?Nwr = 120x = Nwr - Nrd = 120 - 96 = 24.二.為保證數(shù)據(jù)連續(xù)輸
    發(fā)表于 02-22 20:37

    LabVIEW FPGA模塊實(shí)現(xiàn)FIFO深度設(shè)定

    為了解決基于LabVIEWFPGA模塊的DMAFIFO深度設(shè)定不當(dāng)帶來(lái)的數(shù)據(jù)不連續(xù)問(wèn)題,結(jié)合LabVIEWFPGA的編程特點(diǎn)和DMA FIFO的工作原理,提出了一種設(shè)定 FIFO 深度
    發(fā)表于 09-26 13:45 ?7305次閱讀
    LabVIEW FPGA模塊實(shí)現(xiàn)<b class='flag-5'>FIFO</b><b class='flag-5'>深度</b>設(shè)定

    基于LabVIEW FPGA模塊程序設(shè)計(jì)特點(diǎn)的FIFO深度設(shè)定詳解

    為了解決基于LabVIEWFPGA模塊的DMAFIFO深度設(shè)定不當(dāng)帶來(lái)的數(shù)據(jù)不連續(xù)問(wèn)題,結(jié)合LabVIEWFPGA的編程特點(diǎn)和DMA FIFO的工作原理,提出了一種設(shè)定FIFO深度的方
    發(fā)表于 01-04 14:25 ?4662次閱讀
    基于LabVIEW FPGA模塊程序設(shè)計(jì)特點(diǎn)的<b class='flag-5'>FIFO</b><b class='flag-5'>深度</b>設(shè)定詳解

    FIFO最小深度計(jì)算所有情況

    由于平時(shí)我們工作中,FIFO都是直接調(diào)用IP核,對(duì)于FIFO深度選擇并沒(méi)有很在意,而在筆試面試過(guò)程中,經(jīng)常被問(wèn)及的問(wèn)題之一就是如何計(jì)算FIFO
    的頭像 發(fā)表于 05-11 14:37 ?2165次閱讀
    <b class='flag-5'>FIFO</b>最小<b class='flag-5'>深度計(jì)算</b>所有情況

    你們知道FIFO最小深度計(jì)算

    FIFO 最小深度計(jì)算 例子 - 1:f_wr 》 f_rd,連續(xù)讀寫 寫時(shí)鐘80MHz。 讀時(shí)鐘50MHz。 Burst_Len = 120,也就是要求至少安全寫入120個(gè)數(shù)據(jù)。 連續(xù)寫入和連續(xù)
    的頭像 發(fā)表于 09-10 09:23 ?1974次閱讀
    你們知道<b class='flag-5'>FIFO</b>最小<b class='flag-5'>深度計(jì)算</b>嗎

    如何簡(jiǎn)單快速地計(jì)算FIFO的最小深度

    的基礎(chǔ)上。連續(xù)無(wú)止境的突發(fā)不考慮。比如寫時(shí)鐘100M,讀時(shí)鐘50M,無(wú)限制的讀寫,那么FIFO深度只能是無(wú)窮大了,因?yàn)閷懕茸x快,FIFO一定永遠(yuǎn)都不夠用。所以在實(shí)際運(yùn)用中,不會(huì)存在無(wú)限制的對(duì)
    的頭像 發(fā)表于 02-26 17:41 ?3498次閱讀
    如何簡(jiǎn)單快速地<b class='flag-5'>計(jì)算</b><b class='flag-5'>FIFO</b>的最小<b class='flag-5'>深度</b>

    FIFO最小深度計(jì)算的方法

    由于平時(shí)我們工作中,FIFO都是直接調(diào)用IP核,對(duì)于FIFO深度選擇并沒(méi)有很在意,而在筆試面試過(guò)程中,經(jīng)常被問(wèn)及的問(wèn)題之一就是如何計(jì)算FIFO
    的頭像 發(fā)表于 07-03 17:25 ?2683次閱讀