(三)关于FPGA存储问题的分析

(三)关于FPGA内存储问题的分析

​ 在这次比赛中我第一次对数据的存储有了非常直观的认识,想法比较杂。

一、存储器介绍

  1. ROM:Read-Only Memory,只读存储器,手机、计算机等设备的存储器,但现在的所说的ROM不只是Read Only了,也是可以写入的。

  2. RAM:Random Access Memory,随机存取存储器,手机、计算机的运行内存。

    • 在FPGA中由查找表构成的小块RAM叫做分布式RAM(Distributed RAM)或LUT-RAM;而大块存储空间的RAM叫做BRAM;**这两个都是SRAM。**DRAM是独立于FPGA在FPGA外部的,需要与FPGA进行接口连接。LUT-RAM和BRAM的区别:

      image-20230907092603509
  3. SRAM:Static Random Access Memory,静态随机存取存储器,只要供电数据就会保持,但断电数据就会消失,也被称为Volatile Memory。FPGA内部的查找表和BRAM都是这个。

  4. DRAM:Dynamic Random Access Memory,动态随机存储器,主要原理是利用电容存储电荷的多少来代表一个bit是0还是1,由于晶体管的漏电电流现象,电容会放电,所以要周期性的给电容充电,叫刷新。SRAM不需要刷新也会保持数据不丢失,但是两者断电后数据都会消失,称Volatile Memory。DRAM是独立于FPGA在FPGA外部的,需要与FPGA进行接口连接,主要用作大容量存储,因为它提供的存储密度通常比FPGA内部的SRAM (如BRAM) 高得多,可以用于帧缓冲区,大数据集处理,系统缓存,高带宽数据传输等。

  5. SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器,同步写入和读出数据的DRAM。SDRAM和普通DRAM的差别:

    image-20230906141441224
  6. EEPROM:Electrically Erasable Programmable Read-Only Memory,电可擦除可编程只读存储器。EEPROM和普通ROM的区别:

    image-20230906141456897
  7. DDR:Double Data Synchronous Dynamic Random Access Memory,双倍速率同步动态随机存储器,双倍速率传输的**SDRAM,**在时钟的上升沿和下降沿都可以进行数据传输。我们电脑的内存条都是DDR芯片。

  8. FLASH:Flash Memory,闪存,非易失性固态存储,如制成内存卡或U盘。

二、比赛中遇到的问题

  • ITCM和DTCM:搭建软核需要有一个DTCM(16k byte)和一个ITCM(64k byte),数据和程序存储器需要有较高的读写速度,需要有一定的存储空间(LUT-RAM存储密度过小了,需要消耗大量的LUT资源,浪费LUT资源;外部SDRAM太大了一般有几M,使用不完,也浪费了资源),因此使用的是FPGA内部的BRAM。

  • 软件运行的内存池:在比赛中我们在软核上运行PainterEngine图形库来运行游戏,该库需要一个很大的内存池作为图形的处理和缓存空间,一般在几M左右,FPGA内部的RAM肯定是不够用的,因此选择使用外部SDRAM作为缓存空间。

  • LCD显示缓存:在对LCD屏幕进行图片显示时需要一个大块的RAM存储空间进行缓存,这是因为LCD屏幕显示的原理是:软核读取外部SDRAM存储的图片,然后通过总线传给LCD进行显示,但是总线的时钟速率和LCD显示的时钟速率不相等,总线的时钟速率大于LCD的显示时钟速率,则需要一个缓存来缓存数据,以防止图像数据在还未被显示的情况下被后一个数据覆盖。该存储空间也需要的是一块大块的RAM,大小在几kbit,因此也选择BRAM进行缓存。

  • 高速缓存Cache:为了提高游戏帧率,也即提高软核的运行效率,想出了一种办法是在软核和BRAM之间再增加一个高速缓存Cache以提高软核和ITCM和DTCM的数据交互效率,高速缓存的原理见下:

    image-20230907100452051

    可见高速缓存Cache也是一个大块的RAM存储空间,且大小也不大要小于ITCM和DTCM,因此同样使用BRAM。

  • BRAM LUT-RAM的使用方式:和在FPGA中使用verilog语言实际编写代码时,BRAM的使用方式为:调用RAM或者ROM IP模块,这种IP调用的是FPGA内部的BRAM;LUT-RAM的使用方式为:多为数组定义,如:

    // This may be synthesized as LUT-RAM if small enough
    reg [15:0] ram [0:15];  // 16x16 array
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forest Frame

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值