内存学习(4):内存分类与常用概念3(ROM)

1 ROM介绍

ROM即为只读存储器,全拼是Read Only Memory。

1.1 “只读”的由来

ROM叫只读存储器是因为最早的ROM(MROM)确实是只能读取不能写入,一旦出厂不能再写,需要在出厂之前预设好它的数据,并且它是掉电不丢失的,又称为固定存储器。但是随着技术的进步以及发展的需要,PROM(一次写入之后就不可更改), EPROM, EEPROM, FLASH,SSD 在ROM的基础上被发明了出来,这些都是可编程ROM,也就是说既可以读又可以写,要想在只读存储器中存入或改变数据,必须具备特定的条件。所以ROM叫作只读存储器是受当时技术的限制,然后这个名字一直叫到了现在。

其实,现阶段ROM、RAM是可读与可读可写存储器的一种框架,MROM、PROM等是基于ROM框架的一种实现;DRAM、SRAM、SDRAM是基于RAM框架的一种实现

1.2 与RAM的比较

不同于前文讲述的RAM这种易失性存储器,ROM是非易失性存储器。

  • RAM:支持随机存取,读写速度会很快,但是它是一种易失性的存储芯片,如果断电,芯片内的数据就会消失。
  • ROM:非易失性,断电后数据不会丢失。

1.3 ROM结构图

image-20231120234333211

地址译码器根据输入地址总线进行译码,选择某条输出(称字线),由它再去使能驱动该字线的各位线,选通的字线与不同位线在存储单元体内形成独立的数据表示,一条字线对应一个字,字中的不同数据比特由多个位线提供。

下图a是以熔丝为存储元件的8×4ROM(通常以“字线×位线”来表示存储器的存储容量)的原理图。它以保留熔丝表示存入的是“0”,以熔断熔丝表示存入的是“1”。例如,存入字0的是“0110”,存入字1的是“1011”。

image-20231117002957892

从图中可以得到如下结论为:

  • 没有支持写操作的结构

  • CS为外部输入的片选使能信号,控制是否从此ROM模块进行数据输出,在ROM中,一般都设置片选端。当片选=0时,ROM工作;当片选=1时,ROM被禁止,其输出为“1”电平或呈高阻态。 片选信号可以用来扩展ROM的字数。

  • 地址总线发送地址,地址译码器选通所需要读取的地址,该地址的存储值输出到输出缓冲器

  • 熔丝可以理解为在出厂时是否通过电流将其烧断,标记存储值,如图(a)

  • 假设片选型号低电平使能,地址总线为000,则译码器会选通并拉高最上面一条线,即为打开所有如下图所示的存储单元的位选开关,实现最上面一条线上四个存储单元中数据的读取,最左侧和最右侧熔丝没断,连接到地为0,经过反向缓冲器输出为1;中间两个熔丝熔断,到地电阻无限大,电压为1,经过反向缓冲器输出为0

    image-20231117010106241

image-20231117003020676

  • ROM的地址译码器是与门的组合,它的输出是全部地址输入的最小项。可以把译码器表示成图b所示的与阵列,图中与阵列水平线和垂直线交叉处标的“点”表示有“与”的联系。
  • 存储单元体实际上是或门的组合,ROM的输出数即或门的个数。译码器的每个最小项都可能是或门的输入,但是,某个最小项能否成为或门的输入取决于存储信息,因此存储单元体可看成是一个或阵列。
  • 由上分析,可以从另一角度来看ROM的结构:它由两个阵列组成——“与”门阵列和“或”门阵列,其中“或”的内容是由用户设置的,因而它是可编程的,而与阵列是用来形成全部最小项的,因而是不可编程的。

2 ROM的分类与演进

2.1 MROM

掩膜式只读存储器,MROM(Mask Read Only Memory)芯片由厂家初始化,客户提出自己的要求,需要往里面写入什么数据,厂家生产芯片的时候,就会使用一种掩模式技术,把数据直接写进芯片。厂家一旦写入信息,以后任何人不能重改。这种芯片,只能读出数据,不能往里面写数据。这也是ROM的由来。

其原理图如下

image-20231121004051289

从中可以看到,MOSFET源极连接关系在芯片掩膜中就确定了,所以MROM是无法编程的,其中的内容也是不会发生改变的。在MCU中,MROM一般用于实现一些固化于芯片内部的功能,如引导程序,某些内置的库函数等。

特点:可靠性高,但是灵活性差,只适合批量定制(需要生产掩模式模板),成本比较低。

2.2 PROM

可编程只读存储器,PROM(Programmable Read-Only Memory)为了解决上面的问题,PROM芯片应运而生。也称为OTPROM,一次编程唯读记忆体(One Time Programmable Read Only Memory,OTPROM)内部所用的晶片与写入原理同EPROM,但是为了节省成本,封装上不设置透明窗,因此编程写入之后就不能再抹除改写。这种芯片可以通过专门的PROM写入器,往芯片里面写入需要的信息。但只能写一次,之后不可更改。

image-20231121004253029

在出厂时,所有熔丝均处于图(b)的状态,即存储器中存储的内容是0。用户可对其进行编程,用大电流使源极熔丝熔断即可将此位置为1。此编程过程是一次性不可逆的,也就是所谓的一次编程(OTP)。

上面的原理图中描述的是基于熔丝原理的PROM,事实上,目前更为广泛使用的是反熔丝技术。二者的区别在于,熔丝(Fuse)在初始状态是闭合的,可通过编程使其断开;反熔丝(Antifuse)在初始状态是断开的,可通过编程使其闭合。反熔丝技术的基本原理见下图

image-20231121004343022

  • 典型产品是“双极性熔丝结构”,如果想改写某些单元,则可以给这些单元通以足够大的电流,并维持一定的时间, 原先的熔丝即可熔断,这样就达到了改写某些位的效果。
  • 另外一类经典的PROM为使用“肖特基二极管”的PROM,出厂时,其中的二极管处于反向截止状态,还是用大电流的方法将反相电压加在“肖特基二极管”,造成其永久性击穿即可。

2.3 EPROM

可擦除可编程只读存储器,EPROM(Erasable Programmable Read-Only Memory)。EPROM`芯片,可以擦除可以编程。虽然它也叫“只读”,但是需要说明的是

  • 可以进行多次重写
  • 重写的手段有一定的特殊性

根据用户擦除数据的手段不同,可以把EPROM分为:

  • UVEPROM:用紫外光照射8-20分钟,擦除所有信息。其一般用电信号编程用紫外线擦除,这种芯片要使用昂贵的陶瓷封装,预留一个石英玻璃所制的透明窗,以便进行紫外线曝光,以擦除原有信息。写入程式后通常会用贴纸遮盖透明窗,以防日久不慎曝光过量影响资料。而且在擦除过程中不能选择性地擦除存储字单元,如果用户需要改程序,必须擦除整个存储阵列。
  • EEPROM:也场记为E^2PROM,可用电擦除的方式擦除特定的字。EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,不必将资料全部洗掉才能写入,彻底摆脱了EPROM Eraser和编程器的束缚。EEPROM在写入数据时,仍要利用一定的编程电压,此时,只需用厂商提供的专用刷新程序就可以轻而易举地改写内容,所以,它属于双电压芯片。 借助于EEPROM芯片的双电压特性,可以使BIOS具有良好的防毒功能,在升级时,把跳线开关打至“ON”的位置,即给芯片加上相应的编程电压,就可以方便地升级;平时使用时,则把跳线开关打至“OFF”的位置,防止病毒对BIOS芯片的非法修改。

EPROM与之后讲的EEPROM及Flash的基本原理是相同的,都是基于浮栅技术(Floating-gate MOSFET)。浮栅MOS管的结构示意图如下

image-20231121004455363

悬浮栅极位于两层二氧化硅绝缘层之间,因此存储于其中的电荷可以得到长久的保持。EPROM、EEPROM及Flash的Memory cell简化结构示意图如下

image-20231121004532660

三者的区别主要在于其编程的方式不同。

  • EPROM通过紫外线(UV)照射进行数据擦除,浮栅中的电荷形成光电流泄漏走
  • EEPROM与Flash均是通过超薄氧化层的Fowler-Nordheim隧道电流使浮栅充放电

EEPROM的Memory cell是由FLOTOX(Floating- gate tuneling oxide transister)及一个附加的晶体管(Transister)组成,由于FLOTOX的特性及两管结构,所以可以单元读/写。技术上,Flash是结合EPROM和EEPROM技术达到的,很多Flash使用雪崩热电子注入方式来编程,擦除和EEPROM一样用Fowler-Nordheim tuneling。但主要的不同是,Flash对芯片提供大块或整块的擦除,这就降低了设计的复杂性,它可以不要EEPROM单元里那个多余的Tansister,所以可以做到高集成度,大容量。另外Flash的浮栅工艺也有所不同,写入速度更快。

2.4 Flash

Flash Memory,闪速存储器。是英特尔公司90年代中期发明的一种高密度、非易失性的读/写半导体存储器。

  • 特点一:(可重写与非易失)Flash既有EEPROM的优点,断电后可以保存信息,又有RAM的特点,可以进行多次快速擦除重写,是一种全新的存储结构。同时由于需要先擦除再写入,因此闪存写的速度要比读的速度慢。
  • 特点二:(单电压)Flash属于真正的单电压芯片,它的读和写操作都是在单电压下进行。Flash是利用浮置栅上的电容存储电荷来保存信息,因为浮置栅不会漏电,所以断电后信息仍然可以保存。Flash的每一个记忆胞(存储阵列中的cell)都具有一个“控制闸”与“浮动闸”,利用高电场改变浮动闸的临限电压即可进行编程动作。
  • 特点三:(擦写粒度)Flash最大特点是必须按块(Block或Sector)擦除(每个区块的大小不定,不同厂家的产品有不同的规格), 而EEPROM则可以一次只擦除一个字节(Byte)。
  • 特点四:(存储密度)它的存储元只需要使用单个MOS管,因此每个存储元的体积比RAM存储元体积要更小,所以闪存的位密度要更高。也就是对于两块体积相同的芯片来说,工艺水平相同的情况下,闪存芯片上存储元的数量要比RAM更多,也就是保存更多的二进制比特位。Flash ROM的存储容量普遍大于EEPROM,约为512K到至8M KBit,由于大批量生产,价格也比较合适,很适合用来存放程序码。

Flash主要分为NAND型与NOR型。现在NAND Flash常用于固态硬盘、USB随身盘、记忆卡等用途,NOR Flash则用于BIOS/UEFI ROM晶片等用途。

虽然这种芯片可读可写,但由于其是由ROM发展而来,所以依然归为同时也称为ROM类的芯片。

2.5 SSD

SSD,固态硬盘(Solid State Drives),有控制单元和存储单元构成。闪存芯片作为存储单元,存储二进制数据。控制单元用来控制固态硬盘多块闪存芯片的读或者写。

与纯Flash的闪存区别在于控制单元不一样,但是其二者存储介质类似,都可以进行多次快速的擦除重写。

SSD速度快,功耗低,价格高。

个人电脑常用SSD取代传统机械硬盘。同时也由于SSD比机械硬盘造价高,所以像很多云存储中心主要还是使用机械硬盘,比如百度云。

3 ROM特点与相关产品形态

ROM所存数据稳定 ,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据,适合那些在生命周期中几乎不会被更改的软件。

  • 电脑和手机的操作系统、CPU和GPU的程序,这种装配了重要软件的只读记忆体也可叫作“固件”
  • 游戏机等可编程设备的软件也可以通过包含只读存储器的卡带进行分发s
  • ROM还可以指快闪记忆体,尽管后者除了“唯读”之外也能够“删除”体内资料。

3.1 bios芯片

image-20231116010726862

计算机的主存用来存放一系列的指令和数据。CPU的任务就是从主存中取指令并执行指令

  • RAM(主存)具有易失性,断电后数据全部消失,计算机关机后,主存中数据消失。
  • CPU作为计算机指挥中心,在起初需要做什么事情,均需要需要给它提供指令,只能根据写好的指令来一步一步地执行。
  • 刚开机的时候,主存里面没有数据指令,所以CPU就需要从主板上的一块ROM芯片上读取开机需要的指令,把操作系统、应用程序等指令数据重新调入主存。这块ROM芯片其实就是BIOS芯片。它里面存储了自举装入程序。ROM芯片是非易失性的,即便计算机没有被供电,ROM里面存储的自举装入程序相关的指令数据同样不会丢失。
  • 虽然Bios芯片通常是被集成在主板上。但在逻辑上,应该看作是主存的一部分。当提到主存的时候,除了熟悉的内存条之外,还应该加上BIOS芯片。两者结合才是一个完整的主存。CPU会给RAM和ROM进行一个统一的编址。

一些名词解释:

  • 自举装入程序:CPU在刚开始执行的那一段程序,根据那一段程序的指引,CPU可以指挥I/O系统,把辅存中存储的操作系统相关的数据放入主存。
  • 统一编址:如果ROM芯片的容量是1KB,那么CPU会把0~1023这1K个地址分配给ROM芯片;RAM芯片的地址其实就是从1024往后编址。这就是统一编制。

3.2 手机

购买手机的时候RAM指的是内存,ROM指辅存。

参考文献

ROM(只读存储器)_rom可以写入数据吗-CSDN博客
3.4只读存储器ROM-CSDN博客
只读存储器的工作原理_百度知道
唯读记忆体 - 维基百科,自由的百科全书
ROM - 活着的虫子 - 博客园
ROM、RAM存储器原理详解以及DRAM、SRAM、SDRAM 、FLASH存储器的介绍_rom的原理_17岁boy想当攻城狮的博客-CSDN博客
RAM,ROM,固态(SSD),硬盘它们间有何关系?_ssd属于rom吗-CSDN博客
RAM、ROM、硬盘及内存 - 知乎
ROM_51CTO博客_nero burning rom
浅谈存储器_prom管工作原理-CSDN博客
sec 16-04 Memory Concepts - YouTube
半导体存储器总结 | 高明飞的博客

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

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

相关文章

Apache Airflow (十一) :HiveOperator及调度HQL

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…

cpu飙高问题,案例分析(一)

一、复习知识点: CPU性能指标: load average:负载,linux查看的时候,通常显示如下: load average后面有三段数字:代表了系统1分钟,5分钟,15分钟平均负载。 形象的类别可…

【每日刷题——语音信号篇】

思考与练习 练习2.1 语音信号在产生的过程中,以及被感知的过程中,分别要经过人体的哪些器官? 1.产生过程: 肺部空气 → \rightarrow →冲击声带 → \rightarrow →通过声道(可以调节) → \rightarrow →…

【ArcGIS Pro微课1000例】0033:ArcGIS Pro处理cad数据(格式转换、投影变换)

文章目录 一、cad dwg转shp1. 导出为shp2. cad至地理数据库3. data interoperability tools二、shp投影变换一、cad dwg转shp 1. 导出为shp 加载cad数据,显示如下: 选择需要导出的数据,如面状,右键→数据→导出要素: 导出要素参数如下,点击确定。 导出的要素不带空间参…

el-table 对循环产生的空白列赋默认值

1. el-table 空白列赋值 对el-table中未传数据存在空白的列赋默认值0。使用el-table 提供的插槽 slot-scope&#xff1a;{{ row || ‘0’ }} 原数据&#xff1a; <el-table-column label"集镇" :propcity ><template slot-scope"{row}">{{…

Linux 命令补充

目录 tr 命令 命令举例 cut 命令 命令举例 uniq 命令 命令举例 sort 命令 命令举例 面试题 1. 给你一个文件如何提取前 10 的 IP 2. 如何提前 ss 中的状态 tr 命令 作用tr转换tr -d删除tr -c取反tr -s压缩 命令举例 cut 命令 作用cut提取cut -f指定列cut -d指定分…

MyBatis的xml实现

1.下载插件MyBatisX 2.添加依赖 <!--Mybatis 依赖包--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency><!--…

人工智能给我们的生活带来了巨大的影响?

1. 人工智能从哪些方面给我们带来了影响&#xff1f; 人工智能出现&#xff0c;极大地影响了人类的生活&#xff0c;下面是人工智能所影响的领域&#xff1a; 1. 日常生活 智能家居: AI驱动的设备&#xff0c;如智能扬声器、灯光、恒温器&#xff0c;正在改变我们与家居环境的…

猫12分类:使用yolov5训练检测模型

前言&#xff1a; 在使用yolov5之前&#xff0c;尝试过到百度飞桨平台&#xff08;小白不建议&#xff09;、AutoDL平台&#xff08;这个比较友好&#xff0c;经济实惠&#xff09;训练模型。但还是没有本地训练模型来的舒服。因此远程了一台学校电脑来搭建自己的检测模型。配置…

.NET 8.0 AOT 教程 和使用 和 .NET ORM 操作

NET AOT编译是一种.NET运行时的编译方式&#xff0c;它与传统的JIT编译方式不同。在传统的JIT编译中&#xff0c;.NET应用程序的代码在运行时才会被编译成本地机器码&#xff0c;而在AOT编译中&#xff0c;代码在运行之前就被提前编译成本地机器码。这样可以在代码运行的时候不…

Docker搭建Redis集群

Docker搭建Redis集群 创建一个专属redis的网络 docker network create redis --subnet 172.38.0.0/16通过shell脚本创建并启动6个redis服务 #通过脚本一次创建6个redis配置 for port in $(seq 1 6); \ do \ mkdir -p /mydata/redis/node-${port}/conf touch /mydata/redis/n…

CentOS7安装部署Kafka with KRaft

文章目录 CentOS7安装部署Kafka with KRaft一、前言1.简介2.架构3.环境 二、正文1.部署服务器2.基础环境1&#xff09;主机名2&#xff09;Hosts文件3&#xff09;关闭防火墙4&#xff09;JDK 安装部署 3.单机部署1&#xff09;下载软件包2&#xff09;修改配置文件3&#xff0…

VS2019编译安装GDAL(C++)程序库

一、GDAL简介 GDAL&#xff0c;全称Geospatial Data Abstraction Library&#xff0c;即地理空间数据抽象库&#xff0c;是一个在X/MIT许可协议下读写空间数据的开源库&#xff0c;可以通过命令行工具来进行数据的转换和处理。而在调用中我们常用的OGR&#xff08;OpenGIS Simp…

文件上传漏洞(CVE-2022-23043)

简介 CVE-2022-23043是一个与Zenario CMS 9.2文件上传漏洞相关的安全漏洞。该漏洞被定义为文件的不加限制上传&#xff0c;攻击者可以利用这个漏洞上传webshell以执行任意命令。利用这个漏洞的攻击者暂无特定情况。要利用此漏洞&#xff0c;攻击者首先需要访问Zenario CMS的管…

gin相关操作--一起学习921190764

gin官方文档 https://gin-gonic.com/docs/quickstart/1. 安装 go get -u github.com/gin-gonic/ginhttps://github.com/gin-gonic/gin简单入门 package mainimport ("github.com/gin-gonic/gin""net/http" )func pong(c *gin.Context) {//c.JSON(http.S…

Redis高级特性和应用(发布 订阅、Stream)

目录 发布和订阅 操作命令 发布消息 订阅消息 查询订阅情况 查看活跃的频道 查看频道订阅数 使用场景和缺点 Redis Stream Stream总述 常用操作命令 生产端 消费端 单消费者 消费组 创建消费组 消息消费 在Redis中实现消息队列 基于pub/sub 基于Stream Re…

Three.js相机模拟

有没有想过如何在 3D Web 应用程序中模拟物理相机? 在这篇博文中,我将向你展示如何使用 Three.js和 OpenCV 来完成此操作。 我们将从模拟针孔相机模型开始,然后添加真实的镜头畸变。 具体来说,我们将仔细研究 OpenCV 的两个失真模型,并使用后处理着色器复制它们。 拥有逼…

MySQL 备份和恢复

目录 一.MySQL数据库的备份的分类 1.1.数据备份的重要性 1.2.数据库备份的分类和备份策略 1.3.常见的备份方法 二.MySQL完全备份 2.1.什么是完全备份 2.2.完全备份的优缺点 2.3.实现物理冷备份与恢复 1&#xff09;实现流程 2&#xff09;前置准备 3&#xff09;实现…

nodejs微信小程序 +python+PHP+图书销售管理系统的设计与实现-网上书店-图书商城-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

俄罗斯方块游戏制作

创建包和文件夹 1.创建小方块类 package eluosifangkuai; import java.awt.image.BufferedImage; import java.util.Objects;/*** author xiaoZhao* date 2022/5/7* describe* 小方块类* 方法&#xff1a; 左移、右移、下落*/ public class Cell {// 行private int row;//…