0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何FPGA内部的RAM进行读改写操作

CHANBAEK 来源:FPGA的现今未 作者:FPGA的现今未 2023-09-28 16:53 次阅读

存储器是FPGA设计中的常用单元,对存储器的操作,最基础的就是读写操作,还有一种就是读改写操作,即先读出存储器中的数据,对其进行修改后,再写入存储器。这样的操作其实在大多数情况下都是非常简单的,不值一提,但是在某些有性能要求的场景下,就需要一些考虑。

比如输入是一个8bit的数据,取值为0-255,求每个数值出现的次数,即同时0出现多少次,1出现多少次……

读改写的问题

我们先以最简单的例子,对FPGA内部的RAM进行读改写操作,看看是什么情况,假定需要对RAM中的数据读出来加1后再写回原地址,如下图所示:

图片

通过读地址A,在下一个cycle得到数据X,然后对X进行加一操作后,再写回地址A。我们可以看到,整个过程需要3个cycle的时间。如果再对地址A开启读操作,就需要在第四个cycle开始,否则就读不到最新的数据。换句话说,上述操作无法进行流水操作,每次读改写操作至少需要3个cycle的时间(对于其他更加复杂的“改”操作,可能需要消耗更多的时间)。对于性能要求较高的场景,必须要流水操作的时候,如何处理呢?

解决方案

我们知道不能流水的原因是因为最新的数据可能没有写回RAM,还在数据总线上,因此判断最新的数据在哪里就是解决这个问题的关键。这里还需要用到一个“cache”,用reg来实现,主要是记录即将要写入RAM的地址和数据,即记录写总线上的地址和数据。其实现原理可以用一个时序图来展示。

图片

我们假定要读的地址是AABA,但是为了区分,我们用A1、A2、B1、A3来表示(A1、A2、A3其实是同一个地址)。我们看看如何利用“cache”实现流水式的读改写操作。

第1个时钟周期,读A1的内容,此时cache的内容也为0;

第2个时钟周期,A1的内容在dout上,为x,我们同时拿A1这个地址去“cache”查询,由于“cache”为空,不取“cache”中的值,直接取dout上的值作为改写的对象;同时也开始读A2的内容;

第3个时钟周期,主要做2个更新,一是根据第2个周期中出现的A1和dout的值,更新到“cache”中,二是将更新的数据和地址放在写总线上,这2个更新的内容其实是一致的,都是改和写的过程;同时拿A2去查询“cache”;

第4个时钟周期,根据查询的结果,例子中为“cache”命中,选择“cache”中的内容x+1为改写对象,而不是dout上读取的值,所以写入的内容为x+2。同时根据第三个时钟周期中的A2来更新cache,将A2和对应写入的值x+2更新到“cache”中,此时“cache”中有2个内容,一个是A1和值x+1,一个是A2和值x+2;

从第4个时钟周期可以看到,读A2这个地址得到的值,不是从dout上获取的,而是从“cache”中获取的,这就是利用“cache”来实现读改写的流水操作。

在第5个时钟周期,用A3去查询“cache”时,“cache”中有2个A,即A1和A2,这时我们去最“新”的A,即A2的值x+2作为改写对象。

总结

在高性能的读改写场景下,利用“cache”可以实现读改写的流水操作,大大提高了处理性能。当然如果输入的数据并不是流水的,采用最简单的方式实现读改写即可。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1611

    文章

    21394

    浏览量

    595657
  • FPGA设计
    +关注

    关注

    9

    文章

    427

    浏览量

    26352
  • 存储器
    +关注

    关注

    38

    文章

    7241

    浏览量

    162577
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1332

    浏览量

    113944
收藏 人收藏

    评论

    相关推荐

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第六章FPGA片内RAM读写测试实验

    RAMFPGA中常用的基础模块,可广泛用于缓存数据的情况,同样它也是ROM,FIFO的基础。本实验将为大家介绍如何使用FPGA内部RAM
    的头像 发表于 01-22 09:43 4957次阅读
    【ZYNQ Ultrascale+ MPSOC <b class='flag-5'>FPGA</b>教程】第六章<b class='flag-5'>FPGA</b>片内<b class='flag-5'>RAM</b>读写测试实验

    勇敢的芯伴你玩转Altera FPGA连载90:FPGA片内ROM FIFO RAM联合实例

    Simulation Tool à RTL Simulation”进行仿真。接着,Modelsim中我们可以查看FIFO的波形。ROM、FIFO和RAM读写波形如图9.92所示。图9.92 ROM、FIFO和
    发表于 09-07 22:16

    是不是Sx RAM如果配置给一个核,该核可以对其读写,而另一个核只能对其进行操作

    (no fetch/write access).是不是Sx RAM如果配置给一个核,该核可以对其读写,而另一个核只能对其进行操作
    发表于 06-09 11:11

    介绍FPGA开发板内部ram操作

    设计来增设全新的芯片功能,据此实现了芯片整体构造的简化与性能提升。下面英尚微电子介绍FPGA开发板内部ram是如何操作的。 除逻辑外,所有新的FPG
    发表于 09-10 11:11

    如何使用FPGA内部的ROM以及程序对该ROM的数据操作

    RAM。本实验将为大家介绍如何使用FPGA内部的ROM以及程序对该ROM的数据操作。1.实验原理Xilinx在VIVADO里为我们已经提
    发表于 01-07 15:48

    如何使用FPGA内部RAM以及程序对该RAM的数据读写操作

    RAMFPGA中常用的基础模块,可广泛用于缓存数据的情况,同样它也是ROM,FIFO的基础。本实验将为大家介绍如何使用FPGA内部RAM
    发表于 01-07 16:05

    如何对RAM进行和写的操作

    如何对RAM进行和写的操作
    发表于 01-18 06:47

    _FPGA内部RAM M9K

    FPGA内部RAM M9K
    发表于 04-07 11:40 4次下载

    详细介绍关于FPGA开发板内部ram是如何操作

    设计来增设全新的芯片功能,据此实现了芯片整体构造的简化与性能提升。下面英尚微电子介绍FPGA开发板内部ram是如何操作的。 除逻辑外,所有新的FPG
    发表于 07-20 14:26 2015次阅读
    详细介绍关于<b class='flag-5'>FPGA</b>开发板<b class='flag-5'>内部</b><b class='flag-5'>ram</b>是如何<b class='flag-5'>操作</b>的

    xilinx 7系列FPGA里面的Block RAM

    些大材小用,因此xilinx公司在其FPGA内部专门集成了很多存储器模块,称作Block RAM,其犹如slice海洋当中的一颗颗明珠,专门实现数据暂存功能,且每个时钟区域都布置了若干个Block
    的头像 发表于 11-23 14:08 7657次阅读
    xilinx 7系列<b class='flag-5'>FPGA</b>里面的Block <b class='flag-5'>RAM</b>

    如何使用FPGA内部的ROM以及程序对该ROM的数据读操作

    FPGA本身是SRAM架构的,断电之后,程序就消失,那么如何利用FPGA实现一个ROM呢,我们可以利用FPGA内部RAM资源实现ROM,但
    的头像 发表于 02-08 16:30 1.1w次阅读
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>内部</b>的ROM以及程序对该ROM的数据读<b class='flag-5'>操作</b>

    如何使用FPGA内部RAM以及程序对该RAM的数据读写操作

    RAMFPGA中常用的基础模块,可广泛用于缓存数据的情况,同样它也是ROM,FIFO的基础。本实验将为大家介绍如何使用FPGA内部RAM
    的头像 发表于 02-08 15:50 1.3w次阅读
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>内部</b>的<b class='flag-5'>RAM</b>以及程序对该<b class='flag-5'>RAM</b>的数据读写<b class='flag-5'>操作</b>

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第六章 FPGA片内RAM读写测试实验

    RAMFPGA中常用的基础模块,可广泛用于缓存数据的情况,同样它也是ROM,FIFO的基础。本实验将为大家介绍如何使用FPGA内部RAM
    发表于 03-15 06:09 14次下载
    【ZYNQ Ultrascale+ MPSOC <b class='flag-5'>FPGA</b>教程】第六章 <b class='flag-5'>FPGA</b>片内<b class='flag-5'>RAM</b>读写测试实验

    FPGA在一个时钟周期可以读取多个RAM数据吗?

    设计都涉及到对RAM的读写操作。在FPGA芯片中,RAM也叫做存储块(Block RAM),可以存储大量的数据。
    的头像 发表于 10-18 15:28 882次阅读

    fpga双口ram的使用

    FPGA双口RAM的使用主要涉及配置和使用双端口RAM模块。双端口RAM的特点是有两组独立的端口,可以对同一存储块进行读写
    的头像 发表于 03-15 13:58 480次阅读