[FPGA IP系列] FPGA常用存储资源大全(RAM、ROM、CAM、SRAM、DRAM、FLASH

目录

收起

一、RAM

1、分布式RAM

2、块RAM

3、UltraRAM

二、 ROM

三、CAM

四、SRAM

五、 DRAM

六、FLASH

七、总结

本文主要介绍FPGA中常用的RAM、ROM、CAM、SRAM、DRAM、FLASH等资源。

一、RAM

RAM(Random Access Memory)是FPGA中最基本和常用的内部存储块,根据不同架构可以实现不同容量,最大可达几十Mb。

FPGA中的RAM主要包括:

  • 分布式RAM:存在于逻辑块(LE)中的小容量RAM,通常为几百比特到几千比特。
  • 块RAM:FPGA中专门用于实现RAM功能的大容量存储块,每个块RAM容量从几kb到几十kb不等。
  • UltraRAM:某些高端FPGA特有的大容量RAM块,比块RAM具有更高的密度和带宽。

1、分布式RAM

分布式RAM利用查找表(LUT)的功能实现,不需要占用额外Flip-Flop,但会占用可用于逻辑实现的LUT资源。

每个LUT可以实现一个小容量的RAM,例如6输入LUT实现64位RAM。

注意分布式RAM只能实现同步读写操作。

2、块RAM

每个块RAM通常有单端口、双端口和四端口版本。

支持同步读写操作,可以通过多端口实现FIFO等功能。

例如Xilinx UltraScale FPGA中一个块RAM容量为36kb,位宽可配置,延时很小,频率可以达到550MHz。

3、UltraRAM

UltraRAM集成在部分高端FPGA中,每个UltraRAM可以达到数十Mb的容量,具有比块RAM更高的密度和带宽。

UltraRAM可以与块RAM一起使用,实现更大容量的存储解决方案。

Verilog 代码示例

复制代码
(* ram_style = "distributed" *) reg [7:0] dist_ram[0:63]; // 64 x 8 的分布式RAM  
(* ram_style = "block" *) reg [31:0] block_ram[0:1023]; // 1K x 32 的块RAM  
(* ram_style = "ultra" *) reg [7:0] ultra_ram[0:262143]; // 256K x 8 的UltraRAM 

二、 ROM

ROM(Read-Only Memory)是只读存储器,用于存放不需修改的数据。

FPGA中的ROM主要有:

  • 分布式ROM:使用LUT实现,容量很小。
  • 块ROM:使用块RAM实现,容量较大。

ROM在配置时写入数据,之后数据不能修改。ROM主要用于存放程序代码等不变数据。

Verilog 代码示例

复制代码
(* rom_style = "distributed" *) reg [7:0] dist_rom[0:31]; // 32 x 8 分布式ROM  
(* rom_style = "block" *) reg [31:0] block_rom[0:2047]; // 2K x 32 块ROM  

三、CAM

CAM(Content-Addressable Memory)是一种特殊类型的内存结构,也称为内容可寻址存储器,可以通过内容查找数据所在位置。

FPGA中的CAM主要应用有:

  • 网络查找:根据目的地址查找路由端口。
  • 缓存查询:根据TAG查询缓存中是否存在数据。

CAM的工作原理是基于硬件电路的快速匹配。

当输入一串数据时,CAM会同时比较这串数据与内部存储的所有数据项。如果找到完全匹配的数据项,CAM就会输出该数据项的地址。

CAM的优点包括:高速查找、精确匹配、并行处理。

CAM的缺点:容量受限、功耗较高、价格昂贵。

四、SRAM

SRAM(Static RAM)是一种常用的随机访问存储器(RAM)类型,它以静态方式存储数据,不需要定期刷新。也称为静态随机存储器。

SRAM在速度和功率消耗方面表现优异,但是容量较小,成本较高。

SRAM通常用于存储CPU或FPGA内部的寄存器、缓存或临时变量等。

SRAM主要由存储单元阵列、地址解码器和读写控制电路等组成。每个存储单元都包含一个双口RAM,可以独立地进行读/写操作。每个RAM有两位,即一个存储单元可以存储一个比特(bit)的数据。

SRAM还可以实现预读取功能,即在读取数据的同时,预读下一个数据,从而提高访问速度。此外,SRAM还可以实现双端口访问,即同时对两个不同的存储单元进行读写操作。

Verilog 代码示例

复制代码
sram_controller sram_inst (
  .clk    (clk),
  .addr   (addr),
  .dout   (dout),
  .din    (din),
  .we     (we),
  .ce     (ce),
  .oe     (oe)
);

五、 DRAM

全称动态随机存取存储器(Dynamic Random Access Memory),是一种用于存储和访问大规模数据的主要存储器技术。

DRAM以其高密度、容量大和低功耗等特点,以Gigabit(Gb)为单位提供大容量存储,在FPGA中得到广泛的应用,比如常见的DDR3、DDR4等等。

FPGA的DRAM可以使用不同的接口标准,如DDR3、DDR4、LPDDR、HBM等。这些接口标准定义了DRAM与其他系统组件(如处理器、其他存储器、外设等)之间的通信协议和物理连接。

相比SRAM,DRAM拥有更大的容量,顺序读写速度快,随机读写速度慢。

Verilog 代码示例

复制代码
ddr3_controller ddr3_inst(
  
  .clk        (clk),
  .reset_n    (reset_n),
           
  .s_axi_awid    (s_axi_awid),
  .s_axi_awaddr  (s_axi_awaddr),
  .s_axi_awlen   (s_axi_awlen),
  .s_axi_awsize  (s_axi_awsize),
  .s_axi_awburst (s_axi_awburst),
  .s_axi_awlock  (s_axi_awlock),
  .s_axi_awcache (s_axi_awcache),
  .s_axi_awprot  (s_axi_awprot),
  .s_axi_awvalid (s_axi_awvalid),
  .s_axi_awready (s_axi_awready),
           
  // Write data channel
  .s_axi_wdata  (s_axi_wdata),  
  .s_axi_wstrb  (s_axi_wstrb),
  .s_axi_wlast  (s_axi_wlast),
  .s_axi_wvalid (s_axi_wvalid),
  .s_axi_wready (s_axi_wready)
  
);

六、FLASH

FLASH是一种非易失存储器,断电后保持数据,容量小,但成本低廉。

FPGA中的FLASH主要用于:

  • 存储配置文件:许多FPGA使用FLASH来保存配置文件。
  • 程序存储:用于存储代码和数据。

FLASH存储器以块为单位进行擦除和写入操作。擦除操作需要将整个块中的数据清除,而写入操作只需修改需要更新的部分数据。

写入操作通常采用位编程(bit programming)的方式进行。在位编程中,根据需要将存储单元的电荷状态改变,以表示0或1的值。

与其他存储器类型相比,FLASH存储器的读取延迟较高,而擦除和写入操作的速度也相对较慢。此外,FLASH存储器的擦写次数有限,通常在百万到数十亿之间。

Verilog 代码示例

复制代码
flash_controller flash_inst(

  .clk(clk),
  
  .flash_cs(flash_cs),
  .flash_clk(flash_clk), 
  .flash_io(flash_io),

  .addr(addr),
  .dout(dout),
  .din(din),
  .oe(oe),
  .we(we) 
);

七、总结

FPGA提供了多种内部和外部的存储器解决方案,根据需要可以灵活使用,构建存储器系统。合理利用各类存储器的优缺点,可以在成本、容量和速度上取得最佳平衡。

相关推荐
Terasic友晶科技1 小时前
【教程】Agilex 5 SoC 的两种启动模式的开发演示(一)(FPGA Configuration First)
fpga开发·agilex 5 soc
ALINX技术博客1 小时前
【黑金云课堂】FPGA技术教程Vitis开发:SD卡WAV文件读取音频播放实验
fpga开发·音视频
仲南音2 天前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner3 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20203 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy3 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia3 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20203 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子4 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安4 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi