新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > FPGA研發(fā)之道(11)-設(shè)計(jì)不是湊波形(一)FIFO(上)

FPGA研發(fā)之道(11)-設(shè)計(jì)不是湊波形(一)FIFO(上)

作者: 時(shí)間:2014-11-03 來(lái)源:網(wǎng)絡(luò) 收藏

  內(nèi)部一種常用的資源,可以通過(guò)廠家的的IP生成工具生成相應(yīng)的。可分為同步FIFO和異步FIFO,其區(qū)別主要是,讀寫(xiě)的時(shí)鐘是否為同一時(shí)鐘,如使用一個(gè)時(shí)鐘則為同步FIFO,讀寫(xiě)時(shí)鐘分開(kāi)則為異步FIFO。一般來(lái)說(shuō),較大的FIFO可以選擇使用內(nèi)部BLOCK 資源,而小的FIFO可以使用寄存器資源例化使用。

本文引用地址:http://m.butianyuan.cn/article/264818.htm

  一般來(lái)說(shuō),F(xiàn)IFO的主要信號(hào)包括:

  實(shí)際使用中,可編程滿的信號(hào)(XILINX 的FIFO)較為常用,ALTERA的FIFO中,可以通過(guò)寫(xiě)深度(即寫(xiě)入多少的數(shù)據(jù)值)來(lái)構(gòu)造其可編程滿信號(hào)。通過(guò)配置threshold(門(mén)限)的值可以設(shè)定可編程滿起效時(shí)的FIFO深度。

  

 

  上圖所示為FIFO的模型,可以看做一個(gè)漏桶模型,其中輸入、輸出、滿信號(hào)、空信號(hào)、可編程滿等信號(hào)如圖所示,一目了然。 其中threshold信號(hào)可以看做水位線,通過(guò)此信號(hào)可以設(shè)置可編程滿信號(hào)。FIFO的其他的信號(hào)也大都與其深度相關(guān),如有特殊需求,可通過(guò)廠商提供的IP生成工具的圖形界面進(jìn)行選擇使用。

  FIFO的使用場(chǎng)景有多種,其中主要如下所示:

  (1) 數(shù)據(jù)的緩沖,如模型圖所示,如果數(shù)據(jù)的寫(xiě)入速率高,但間隔大,且會(huì)有突發(fā);讀出速率小,但相對(duì)均勻。則通過(guò)設(shè)置相應(yīng)深度的FIFO,可以起到數(shù)據(jù)暫存的功能,且能夠使后續(xù)處理流程平滑,避免前級(jí)突發(fā)時(shí),后級(jí)來(lái)不及處理而丟棄數(shù)據(jù)。

  (2) 時(shí)鐘域的隔離。對(duì)于不同時(shí)鐘域的數(shù)據(jù)傳遞,則數(shù)據(jù)可以通過(guò)FIFO進(jìn)行隔離,避免跨時(shí)鐘域的數(shù)據(jù)傳輸帶來(lái)的設(shè)計(jì)與約束上的復(fù)雜度。

  FIFO設(shè)計(jì)中有兩個(gè)需要注意事項(xiàng),首先,不能溢出,即滿后還要寫(xiě)導(dǎo)致溢出,對(duì)于數(shù)據(jù)幀的操作來(lái)說(shuō),每次寫(xiě)入一個(gè)數(shù)據(jù)幀時(shí),如果每寫(xiě)一個(gè)寬度(FIFO的寬度)的數(shù)據(jù),都要檢查滿信號(hào),則處理較為復(fù)雜,如果在寫(xiě)之前沒(méi)滿,寫(xiě)過(guò)程不檢查,則就容易導(dǎo)致溢出。因此可編程滿的設(shè)定尤為必要,通過(guò)設(shè)置可編程滿的水位線,保證能夠存儲(chǔ)一個(gè)數(shù)據(jù)幀,這樣寫(xiě)之前檢查可編程滿即可。

  其次,另一更容易出錯(cuò)的問(wèn)題,就是空信號(hào)。對(duì)于FIFO來(lái)說(shuō),在讀過(guò)程中出現(xiàn)空信號(hào),則其沒(méi)有代表該值沒(méi)有被讀出,對(duì)于讀信號(hào)來(lái)說(shuō),如設(shè)定讀出一定長(zhǎng)度的值,只在一開(kāi)始檢測(cè)非空,如狀態(tài)機(jī)的觸發(fā)信號(hào),容易出現(xiàn)過(guò)程中間也為空的信號(hào),會(huì)導(dǎo)致某些數(shù)據(jù)未讀出,特別是寫(xiě)速滿而讀速快的場(chǎng)景下。 因此rden與!empty信號(hào)要一起有效才算將數(shù)據(jù)讀出。

  空信號(hào)處理相對(duì)容易出錯(cuò),懶人自有笨方法,下面介紹一種應(yīng)用于數(shù)據(jù)幀處理的FIFO使用方式,只需在讀開(kāi)始檢測(cè)空信號(hào)即可,可以簡(jiǎn)化其處理讀數(shù)據(jù)的流程:

  

 

  其處理結(jié)構(gòu)如上圖所示,數(shù)據(jù)緩存以大FIFO(BLOCK 實(shí)現(xiàn))為主,而每存儲(chǔ)完畢一個(gè)數(shù)據(jù)幀向小FIFO(寄存器實(shí)現(xiàn))內(nèi)寫(xiě)入值。當(dāng)小FIFO標(biāo)示非空時(shí),則標(biāo)示大FIFO中已存儲(chǔ)一個(gè)整幀。則下一級(jí)模塊可以只需檢測(cè)小FIFO非空時(shí),從而讀出一個(gè)整幀,過(guò)程中大FIFO一直未非空,可以不用處理非空信號(hào),從而簡(jiǎn)化設(shè)計(jì)和驗(yàn)證的流程。

  此外還有FIFO其他應(yīng)用方式,下節(jié)接著介紹。(未完待續(xù))

fpga相關(guān)文章:fpga是什么


水位傳感器相關(guān)文章:水位傳感器原理


關(guān)鍵詞: FPGA FIFO RAM

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉