[FPGA IP系列] FPGA常用存储资源大全(RAM、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提供了多种内部和外部的存储器解决方案,根据需要可以灵活使用,构建存储器系统。合理利用各类存储器的优缺点,可以在成本、容量和速度上取得最佳平衡。


本文将不断定期更新中,码字不易,点⭐️赞,收⭐️藏一下,不走丢哦

本文由FPGA入门到精通原创,有任何问题,都可以在评论区和我交流哦

您的支持是我持续创作的最大动力!如果本文对您有帮助,请给一个鼓励,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/72813.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web framework-Gin

一、Gin Go Web--Go Module 软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。 框架就是&#…

【广州华锐视点】AR电力职业技能培训系统让技能学习更“智慧”

随着科技的发展,教育方式也在不断地进步和创新。其中,增强现实(AR)技术的出现,为教育领域带来了全新的可能。AR电力职业技能培训系统就是这种创新教学方法的完美实践,它将虚拟与现实相结合,为学生提供了一个沉浸式的学…

Django实现音乐网站 ⑼

使用Python Django框架制作一个音乐网站, 本篇主要是后台对专辑、首页轮播图原有功能的基础上进行部分功能实现和显示优化。 目录 专辑功能优化 新增编辑 专辑语种改为下拉选项 添加单曲优化显示 新增单曲多选 更新歌手专辑数、专辑单曲数 获取歌手专辑数 保…

FL Studio for Windows-21.1.0.3713中文直装版功能介绍及系统配置要求

FL Studio 21简称FL水果软件,全称是:Fruity Loops Studio编曲,由于其Logo长的比较像一款水果因此,在大家更多的是喜欢称他为水果萝卜,FL studio21是目前最新的版本,这是一款可以让你的计算机就像是一个全功能的录音室&…

kafka 02——三个重要的kafka客户端

kafka 02——三个重要的kafka客户端 1. 前言1.1 关于 Kafka 的安装1.2 常用客户端简介1.3 依赖 2. AdminClient2.1 Admin Configs2.2 AdminClient API2.2.1 设置 AdminClient 对象2.2.2 创建 topic 获取 topic 列表2.2.3 删除topic2.2.4 查看 topic 的描述信息2.2.5 查看 topi…

AMD限制资源用量CU_MASK

通过配置两个环境变量来控制进程所使用的CU: CU_MASK_0 CU_MASK_1 举例: 使用每个ES中的一半CU则配置如下: export CU_MASK_00xcccccccc export CU_MASK_10xcccccccc

Maven进阶2 -- 私服(Nexus)、私服仓库分类、资源上传和下载

目录 私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题。 1.Nexus Nexus是sonatype公司的一款maven私服产品。 下载地址 启动 nexus.exe /run nexus 访问 & 登录 2.私服仓库分类 3.资源上传和下载 本地仓库上传和访问资源需要进行配置。…

【高频面试题】JVM篇

文章目录 一、JVM组成1.什么是程序计数器2.什么是Java堆?3.能不能介绍一下方法区(元空间)4.你听过直接内存吗5.什么是虚拟机栈6.垃圾回收是否涉及栈内存?7.栈内存分配越大越好吗?8.方法内的局部变量是否线程安全?9.什么…

初识C语言(3)

什么是C语言 1.第一个C语言程序 2.数据类型 3.变量、常量 4.字符串转义字符注释 5.选择语句 6.循环语句 7.函数 8.数组 9.操作符 10.常见关键字 11.define 定义常量和宏 12.指针 13.结构体 这一篇文章我们从常见关键字开始说起,也是…

【设计模式】责任链模式

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者…

韩国存储芯片顶不住了,加入价格大战,固态硬盘更白菜价了

国产的SSD固态硬盘价格持续下跌,迅速抢占市场,让美韩的存储芯片深感焦虑,之前美光曾跟进一轮,但是由于亏损严重,美光选择了退让,日前韩国第二大存储芯片企业SK海力士选择了跟进,将导致固态硬盘掀…

Linux 终端命令之文件浏览(4) head, tail

Linux 文件浏览命令 cat, more, less, head, tail,此五个文件浏览类的命令皆为外部命令。 hannHannYang:~$ which cat /usr/bin/cat hannHannYang:~$ which more /usr/bin/more hannHannYang:~$ which less /usr/bin/less hannHannYang:~$ which head /usr/bin/he…

痞子衡嵌入式:AppCodeHub - 一站网罗恩智浦MCU应用程序

近日,恩智浦官方隆重上线了应用程序代码中心(Application Code Hub,简称 ACH),这是恩智浦 MCUXpresso 软件生态的一个重要组成部分。痞子衡之所以要如此激动地告诉大家这个好消息,是因为 ACH 并不是又一个恩智浦官方 github proje…

Scratch 之 3D 画笔程序使用

目录 Part1 摄像头固定的3D效果 Part2 尝试移动摄像头 Part3 边缘裁剪 总结: Part1 摄像头固定的3D效果 首先,我们知道sc中有xy坐标。 现在让我们在sc中引入一个新坐标——z坐标。z轴垂直于电脑屏幕,从屏幕外指向屏幕里。(如下图) z坐标…

【Rust日报】2023-08-11 candle:一个极简的Rust机器学习框架

Bevys Third Birthday Bevy 是一个用 Rust 构建的令人耳目一新的数据驱动的游戏引擎,如果你想学习如何使用 Bevy 制作 2D/3D 游戏、可视化、用户界面或其他图形应用程序,那可以访问Bevy官网去了解更多。 阅读原文:https://bevyengine.org/new…

mysql的相关指令

mysql的相关指令 DML 数据操作语言DQL数据查询 mysql -uroot -p //启动数据库 show databases; //查看有哪些数据库 use 数据库名; //使用某个数据库 show tables; //查看数据库内有哪些表 exit; //退出mysql的命令环境 create database 数据库名称 charset utf8; //创建数据…

【BASH】回顾与知识点梳理(二十三)

【BASH】回顾与知识点梳理 二十三 二十三. Linux 账号管理(二)23.1 账号管理新增与移除使用者: useradd, 相关配置文件, passwd, usermod, userdelusermoduserdel 23.2 用户功能(普通用户可使用)idfingerchfnchsh 23.3…

uniapp把城市换成26个字母和城市排序

后端返回的数据 我们要得效果 <template><view><view v-for"(value,key) in cities" :key"key"><view style"color: red;"> {{ key }} </view><view style"border: 1rpx solid black;"><tex…

NLP语言模型概览

语言模型结构分类 Encoder-Decoder&#xff08;Transformer&#xff09;: Encoder 部分是 Masked Multi-Head Self-Attention&#xff0c;Decoder 部分是 Casual Multi-Head Cross-Attention 和 Casual Multi-Head Self-Attention 兼具。比如T5&#xff0c;BART&#xff0c;MA…

【分布式技术专题】RocketMQ延迟消息实现原理和源码分析

痛点背景 业务场景 假设有这么一个需求&#xff0c;用户下单后如果30分钟未支付&#xff0c;则该订单需要被关闭。你会怎么做&#xff1f; 之前方案 最简单的做法&#xff0c;可以服务端启动个定时器&#xff0c;隔个几秒扫描数据库中待支付的订单&#xff0c;如果(当前时间-订…