在FPGA的設(shè)計(jì)中的,內(nèi)部的FIFO和RAM是兩種非常常見的存儲單元。有的場景是只能使用RAM,比如存放表項(xiàng)的時候,有的場景是RAM和FIFO都可以使用,比如存放數(shù)據(jù)的時候,從功能的角度來講,F(xiàn)PGAer都知道這兩種存儲單元如何使用,但是從工程的角度,比如板上問題的定位、存儲單位讀寫邏輯的修改和維護(hù)等方面來看,用FIFO還是用RAM還是有點(diǎn)點(diǎn)講究了。
FIFO
關(guān)于FIFO的基本原理,可以參考FIFO的應(yīng)用,里面對FIFO有非常詳細(xì)的介紹。這里從優(yōu)缺點(diǎn)2個方面重新看到FIFO
FIFO的優(yōu)點(diǎn)
從使用FIFO的角度來看,F(xiàn)IFO優(yōu)點(diǎn)很明顯,使用簡單,問題定位也方便。
首先是時序簡單:FIFO通過讀寫使能控制,只要不滿,就可以寫入數(shù)據(jù);只要不空,就可以讀出數(shù)據(jù)。不需要關(guān)心數(shù)據(jù)在內(nèi)部的存儲位置。
定位問題簡單:在工程實(shí)踐中,對FIFO的問題定位比較簡單,常見的錯誤就是上下溢出、非空情況下不讀、長空長滿等。這些現(xiàn)象FIFO一般都給出了相應(yīng)的信號,所以非常好定位。
擴(kuò)展性好:FIFO不僅僅是一個緩存,同時也很好的邏輯隔離單元,寫邏輯部分的修改不影響讀邏輯;同理讀邏輯部分的修改不影響寫邏輯,減少了邏輯的耦合性。
FIFO的缺點(diǎn)
FIFO的缺點(diǎn),首先不能控制地址,也就不能控制數(shù)據(jù)寫入和讀出的位置,所以不能存放表項(xiàng);還有一個缺點(diǎn)就是從資源的角度來看,需要有額外的邏輯來控制讀寫,還要產(chǎn)生空、滿信號等;最后在一些特殊的應(yīng)用場景下,比如對數(shù)據(jù)從寫入到讀出有延時需求的場景,不同的FIFO設(shè)計(jì),有可能不滿足要求。
RAM
關(guān)于RAM的基礎(chǔ)原理,前面有也有過詳細(xì)的介紹,可以參考RAM的應(yīng)用。
RAM的優(yōu)點(diǎn)
存放表項(xiàng):由于RAM的讀寫地址可以由用戶自己控制,所以RAM是FPGA內(nèi)存放大表項(xiàng)的幾乎唯一的選擇。
覆蓋:在數(shù)據(jù)需要丟棄的場景中,可以通過重復(fù)寫的方式來覆蓋原來的數(shù)據(jù),從而實(shí)現(xiàn)丟棄的功能。
回讀:在有的場景中,同一個數(shù)據(jù)可能需要從緩存中多次讀出,這種場景下RAM也是唯一的選擇。
RAM的缺點(diǎn)
讀寫控制:相比FIFO的讀寫控制,增加了地址這個控制信號。從以往的經(jīng)驗(yàn)來看,地址信號是比較容易引起問題的,常見的就是地址錯誤導(dǎo)致數(shù)據(jù)寫入錯誤。
溢出:由于RAM沒有空滿狀態(tài),RAM作為緩存的時候,寫入和讀出的邏輯,需要從方案上保證不溢出,復(fù)雜度略有增加。
問題定位難:除了上述地址錯誤導(dǎo)致寫入的數(shù)據(jù)錯誤不好定位外,RAM沒有空滿狀態(tài),做緩存的時候,RAM的溢出同樣不好定位。
總結(jié)
經(jīng)過上面的分析,從功能、控制難易程度、問題定位難易程度考慮,我們可以總結(jié)出如下幾條原則:
1、表項(xiàng)的存儲采用RAM;
2、對數(shù)據(jù)有覆蓋和回讀需求的,使用RAM,使用的時候要做好讀寫長度的控制以及狀態(tài)的監(jiān)測;
3、除上述2種情況外,既可以用RAM又可以用FIFO的場景,一律用FIFO;
審核編輯:湯梓紅
-
存儲單元
+關(guān)注
關(guān)注
1文章
63瀏覽量
16194 -
RAM
+關(guān)注
關(guān)注
8文章
1369瀏覽量
115049 -
fifo
+關(guān)注
關(guān)注
3文章
390瀏覽量
43882
發(fā)布評論請先 登錄
相關(guān)推薦
vs1003中的指令RAM和代碼RAM是干什么用的?
Xilinx FPGA入門連載59:FPGA 片內(nèi)ROM FIFO RAM聯(lián)合實(shí)例之功能概述
請問TI的C6678UART外設(shè)到底是用的哪個時鐘作為源?
勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載90:FPGA片內(nèi)ROM FIFO RAM聯(lián)合實(shí)例
Xilinx FPGA片內(nèi)ROM FIFO RAM聯(lián)合實(shí)例之功能概述
哪個使用RAM或FIFO更好?
RAM接口控制器系列之FIFO
cortexM3和armv7m到底哪個是內(nèi)核哪個是架構(gòu)?
高速異步FIFO的設(shè)計(jì)與實(shí)現(xiàn)
異步FIFO的設(shè)計(jì)分析及詳細(xì)代碼
![異步<b class='flag-5'>FIFO</b>的設(shè)計(jì)分析及詳細(xì)代碼](https://file1.elecfans.com//web2/M00/A6/E5/wKgZomUMQR2Ad5ApAAA6R613b6c264.png)
如何使用FPGA內(nèi)部的RAM以及程序?qū)υ?b class='flag-5'>RAM的數(shù)據(jù)讀寫操作
![如何使用FPGA內(nèi)部的<b class='flag-5'>RAM</b>以及程序?qū)υ?b class='flag-5'>RAM</b>的數(shù)據(jù)讀寫操作](https://file.elecfans.com/web1/M00/DC/1C/pIYBAGAJnVSAeGXsAACSoVXg6Dw420.jpg)
FIFO的閾值如何設(shè)置
常見的流控機(jī)制之fifo與帶外流控
![常見的流控機(jī)制之<b class='flag-5'>fifo</b>與帶外流控](https://file1.elecfans.com/web2/M00/8D/D4/wKgZomTApCSAPZ-KAAATrK1b988744.png)
評論