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

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

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

如何FPGA內(nèi)部的RAM進(jìn)行讀改寫操作

CHANBAEK ? 來源:FPGA的現(xiàn)今未 ? 作者:FPGA的現(xiàn)今未 ? 2023-09-28 16:53 ? 次閱讀

存儲器是FPGA設(shè)計中的常用單元,對存儲器的操作,最基礎(chǔ)的就是讀寫操作,還有一種就是讀改寫操作,即先讀出存儲器中的數(shù)據(jù),對其進(jìn)行修改后,再寫入存儲器。這樣的操作其實在大多數(shù)情況下都是非常簡單的,不值一提,但是在某些有性能要求的場景下,就需要一些考慮。

比如輸入是一個8bit的數(shù)據(jù),取值為0-255,求每個數(shù)值出現(xiàn)的次數(shù),即同時0出現(xiàn)多少次,1出現(xiàn)多少次……

讀改寫的問題

我們先以最簡單的例子,對FPGA內(nèi)部的RAM進(jìn)行讀改寫操作,看看是什么情況,假定需要對RAM中的數(shù)據(jù)讀出來加1后再寫回原地址,如下圖所示:

圖片

通過讀地址A,在下一個cycle得到數(shù)據(jù)X,然后對X進(jìn)行加一操作后,再寫回地址A。我們可以看到,整個過程需要3個cycle的時間。如果再對地址A開啟讀操作,就需要在第四個cycle開始,否則就讀不到最新的數(shù)據(jù)。換句話說,上述操作無法進(jìn)行流水操作,每次讀改寫操作至少需要3個cycle的時間(對于其他更加復(fù)雜的“改”操作,可能需要消耗更多的時間)。對于性能要求較高的場景,必須要流水操作的時候,如何處理呢?

解決方案

我們知道不能流水的原因是因為最新的數(shù)據(jù)可能沒有寫回RAM,還在數(shù)據(jù)總線上,因此判斷最新的數(shù)據(jù)在哪里就是解決這個問題的關(guān)鍵。這里還需要用到一個“cache”,用reg來實現(xiàn),主要是記錄即將要寫入RAM的地址和數(shù)據(jù),即記錄寫總線上的地址和數(shù)據(jù)。其實現(xiàn)原理可以用一個時序圖來展示。

圖片

我們假定要讀的地址是AABA,但是為了區(qū)分,我們用A1、A2、B1、A3來表示(A1、A2、A3其實是同一個地址)。我們看看如何利用“cache”實現(xiàn)流水式的讀改寫操作。

第1個時鐘周期,讀A1的內(nèi)容,此時cache的內(nèi)容也為0;

第2個時鐘周期,A1的內(nèi)容在dout上,為x,我們同時拿A1這個地址去“cache”查詢,由于“cache”為空,不取“cache”中的值,直接取dout上的值作為改寫的對象;同時也開始讀A2的內(nèi)容;

第3個時鐘周期,主要做2個更新,一是根據(jù)第2個周期中出現(xiàn)的A1和dout的值,更新到“cache”中,二是將更新的數(shù)據(jù)和地址放在寫總線上,這2個更新的內(nèi)容其實是一致的,都是改和寫的過程;同時拿A2去查詢“cache”;

第4個時鐘周期,根據(jù)查詢的結(jié)果,例子中為“cache”命中,選擇“cache”中的內(nèi)容x+1為改寫對象,而不是dout上讀取的值,所以寫入的內(nèi)容為x+2。同時根據(jù)第三個時鐘周期中的A2來更新cache,將A2和對應(yīng)寫入的值x+2更新到“cache”中,此時“cache”中有2個內(nèi)容,一個是A1和值x+1,一個是A2和值x+2;

從第4個時鐘周期可以看到,讀A2這個地址得到的值,不是從dout上獲取的,而是從“cache”中獲取的,這就是利用“cache”來實現(xiàn)讀改寫的流水操作。

在第5個時鐘周期,用A3去查詢“cache”時,“cache”中有2個A,即A1和A2,這時我們?nèi)プ睢靶隆钡腁,即A2的值x+2作為改寫對象。

總結(jié)

在高性能的讀改寫場景下,利用“cache”可以實現(xiàn)讀改寫的流水操作,大大提高了處理性能。當(dāng)然如果輸入的數(shù)據(jù)并不是流水的,采用最簡單的方式實現(xiàn)讀改寫即可。

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

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598914
  • FPGA設(shè)計
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    26421
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7366

    瀏覽量

    163091
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1344

    瀏覽量

    114214
收藏 人收藏

    評論

    相關(guān)推薦

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第六章FPGA片內(nèi)RAM讀寫測試實驗

    RAMFPGA中常用的基礎(chǔ)模塊,可廣泛用于緩存數(shù)據(jù)的情況,同樣它也是ROM,F(xiàn)IFO的基礎(chǔ)。本實驗將為大家介紹如何使用FPGA內(nèi)部RAM
    的頭像 發(fā)表于 01-22 09:43 ?5090次閱讀
    【ZYNQ Ultrascale+ MPSOC <b class='flag-5'>FPGA</b>教程】第六章<b class='flag-5'>FPGA</b>片內(nèi)<b class='flag-5'>RAM</b>讀寫測試實驗

    勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載90:FPGA片內(nèi)ROM FIFO RAM聯(lián)合實例

    Simulation Tool à RTL Simulation”進(jìn)行仿真。接著,Modelsim中我們可以查看FIFO的波形。ROM、FIFO和RAM讀寫波形如圖9.92所示。圖9.92 ROM、FIFO和
    發(fā)表于 09-07 22:16

    介紹FPGA開發(fā)板內(nèi)部ram操作

    設(shè)計來增設(shè)全新的芯片功能,據(jù)此實現(xiàn)了芯片整體構(gòu)造的簡化與性能提升。下面英尚微電子介紹FPGA開發(fā)板內(nèi)部ram是如何操作的。 除邏輯外,所有新的FPG
    發(fā)表于 09-10 11:11

    如何使用FPGA內(nèi)部的ROM以及程序?qū)υ揜OM的數(shù)據(jù)操作

    RAM。本實驗將為大家介紹如何使用FPGA內(nèi)部的ROM以及程序?qū)υ揜OM的數(shù)據(jù)操作。1.實驗原理Xilinx在VIVADO里為我們已經(jīng)提
    發(fā)表于 01-07 15:48

    如何使用FPGA內(nèi)部RAM以及程序?qū)υ?b class='flag-5'>RAM的數(shù)據(jù)讀寫操作

    RAMFPGA中常用的基礎(chǔ)模塊,可廣泛用于緩存數(shù)據(jù)的情況,同樣它也是ROM,F(xiàn)IFO的基礎(chǔ)。本實驗將為大家介紹如何使用FPGA內(nèi)部RAM
    發(fā)表于 01-07 16:05

    如何對RAM進(jìn)行和寫的操作

    如何對RAM進(jìn)行和寫的操作?
    發(fā)表于 01-18 06:47

    _FPGA內(nèi)部RAM M9K

    FPGA內(nèi)部RAM M9K
    發(fā)表于 04-07 11:40 ?4次下載

    如何將外部SPI Flash加載到FPGA內(nèi)部ram然后復(fù)位MC8051

    本設(shè)計采用FPGA技術(shù),在FPGA中實現(xiàn)8051單片機(jī)的軟核,將外部SPI Flash中的代碼數(shù)據(jù)加載到FPGA內(nèi)部ram,然后復(fù)位 MC8
    發(fā)表于 06-11 17:47 ?3次下載
    如何將外部SPI Flash加載到<b class='flag-5'>FPGA</b><b class='flag-5'>內(nèi)部</b><b class='flag-5'>ram</b>然后復(fù)位MC8051

    詳細(xì)介紹關(guān)于FPGA開發(fā)板內(nèi)部ram是如何操作

    設(shè)計來增設(shè)全新的芯片功能,據(jù)此實現(xiàn)了芯片整體構(gòu)造的簡化與性能提升。下面英尚微電子介紹FPGA開發(fā)板內(nèi)部ram是如何操作的。 除邏輯外,所有新的FPG
    發(fā)表于 07-20 14:26 ?2117次閱讀
    詳細(xì)介紹關(guān)于<b class='flag-5'>FPGA</b>開發(fā)板<b class='flag-5'>內(nèi)部</b><b class='flag-5'>ram</b>是如何<b class='flag-5'>操作</b>的

    如何使用FPGA內(nèi)部的ROM以及程序?qū)υ揜OM的數(shù)據(jù)操作

    FPGA本身是SRAM架構(gòu)的,斷電之后,程序就消失,那么如何利用FPGA實現(xiàn)一個ROM呢,我們可以利用FPGA內(nèi)部RAM資源實現(xiàn)ROM,但
    的頭像 發(fā)表于 02-08 16:30 ?1.1w次閱讀
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>內(nèi)部</b>的ROM以及程序?qū)υ揜OM的數(shù)據(jù)<b class='flag-5'>讀</b><b class='flag-5'>操作</b>

    如何使用FPGA內(nèi)部RAM以及程序?qū)υ?b class='flag-5'>RAM的數(shù)據(jù)讀寫操作

    RAMFPGA中常用的基礎(chǔ)模塊,可廣泛用于緩存數(shù)據(jù)的情況,同樣它也是ROM,F(xiàn)IFO的基礎(chǔ)。本實驗將為大家介紹如何使用FPGA內(nèi)部RAM
    的頭像 發(fā)表于 02-08 15:50 ?1.3w次閱讀
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>內(nèi)部</b>的<b class='flag-5'>RAM</b>以及程序?qū)υ?b class='flag-5'>RAM</b>的數(shù)據(jù)讀寫<b class='flag-5'>操作</b>

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第七章 FPGA片內(nèi)ROM測試實驗

    FPGA本身是SRAM架構(gòu)的,斷電之后,程序就消失,那么如何利用FPGA實現(xiàn)一個ROM呢,我們可以利用FPGA內(nèi)部RAM資源實現(xiàn)ROM,但
    發(fā)表于 02-26 06:22 ?3次下載
    【ZYNQ Ultrascale+ MPSOC <b class='flag-5'>FPGA</b>教程】第七章 <b class='flag-5'>FPGA</b>片內(nèi)ROM測試實驗

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第六章 FPGA片內(nèi)RAM讀寫測試實驗

    RAMFPGA中常用的基礎(chǔ)模塊,可廣泛用于緩存數(shù)據(jù)的情況,同樣它也是ROM,F(xiàn)IFO的基礎(chǔ)。本實驗將為大家介紹如何使用FPGA內(nèi)部RAM
    發(fā)表于 03-15 06:09 ?14次下載
    【ZYNQ Ultrascale+ MPSOC <b class='flag-5'>FPGA</b>教程】第六章 <b class='flag-5'>FPGA</b>片內(nèi)<b class='flag-5'>RAM</b>讀寫測試實驗

    FLASH被異常改寫

    FLASH被異常改寫(嵌入式開發(fā)筆試題目)-某客戶反饋, 當(dāng)MCU 頻繁的正常通斷電的時候。FLASH 被異常改寫,出現(xiàn)各種各樣的異常(整片別擦除、中斷向量表被改寫為0、寫保護(hù)被清掉、被加上
    發(fā)表于 07-30 11:04 ?29次下載
    FLASH被異常<b class='flag-5'>改寫</b>

    fpga雙口ram的使用

    FPGA雙口RAM的使用主要涉及配置和使用雙端口RAM模塊。雙端口RAM的特點是有兩組獨立的端口,可以對同一存儲塊進(jìn)行讀寫
    的頭像 發(fā)表于 03-15 13:58 ?757次閱讀