【计算机组成 课程笔记】7.2 DRAM和SRAM
课程链接:
计算机组成_北京大学_中国大学MOOC(慕课)
7 - 2 - 702-DRAM和SRAM(13-'22-'-')_哔哩哔哩_bilibili
从【计算机组成 课程笔记】7.1 存储层次结构概况_Elaine_Bao的博客-CSDN博客中,我们了解到:SRAM比较快,DRAM比较慢,SRAM比较贵,DRAM比较便宜。记住这些结论是很容易的, 但是比是什么更重要的是为什么,这一节我们就从电路的级别来探索DRAM和SRAM为什么会具有它们这样各自的特点。
DRAM
这是我们计算机中使用的内存条,准确的说叫内存模组,图中这个内存模组中共有8块DRAM芯片。
DRAM芯片内部的核心结构就是这个存储阵列,由若干行、若干列构成。如果外部给定行地址和列地址,DRAM中有地址译码逻辑电路,能够选中一个存储单元,而每个存储单元往往包含若干个比特,常见的有4比特和8比特。每个比特都采用如下的电路结构,称为DRAM的基本存储单元。
DRAM的基本存储单元(1bit)
这个基本单元就是通过一个电容来保存一个比特的信息。写入就是由外部的数据线驱动对电容进行充电或者放电的操作,从而完成写入0或1,读操作则是由电容对外部的数据信号线进行驱动,从而完成读出0或1。
这个电路结构非常简单,但是我们要注意,电容是存在漏电效应的,如果经过一段时间,电容上的电荷流失过多,我们就会丢失它所存的信息。因此,为了保证DRAM的存储信息的正确性,我们需要定期对所有的单元进行“刷新”。如果初始保存的数据是0,则通过刷新使它保持无电荷状态,如果原先保存的数据为1,则补充这个电容的电荷。这就是DRAM的基本结构和运行原理。
DRAM的特点和主要用途
现在PC机中大多是采用DRAM作为主存储器,也就是内存。当然,DRAM也有很多种不同的实现,比如SDRAM,这个S是同步的缩写,它是在DRAM的基本结构基础上,对输入输出接口进行时钟同步,从而提高了读写的效率。而现在更为常用的内存,则是在SDARAM的基础上又进行了进一步的改进,比如说这些年有DDR1,DDR2,DDR3, 这些不同的内存标准都是在SDRAM的基础上进行的改进和升级。
总体来说,由于每个DRAM的基本存储单元非常简单,所以能做到很高的集成度,而且功耗也比较低,我们可以用较低的成本制造大容量的DRAM芯片。当然它的缺点也跟它的这个结构有关,因为采用了电容充放电的方式,所以DRAM的读写速度还是比较慢的,而且它还需要定期刷新,这进一步影响了DRAM的读写性能。
SRAM
那么与DRAM相对的,还有一种常用的存储部件,就是SRAM。我们先来看看SRAM的基本结构。
SRAM的基本存储单元(1bit)
SRAM的基本存储单元共有6个晶体管构成,我们分别用M1~M6表示,这6个晶体管合在一起才可以保存一个比特,显然比DRAM的结构要复杂得多。
这个基本存储单元对外有3个接口信号,其中BL、~BL用于传送读写数据信息,WL用于控制外部是否可以访问这个存储单元。
下面通过读写的实例来看看SRAM是如何工作的。
SRAM的写入过程示例
以写入数据1为例进行分析。
- 首先,这个存储单元中连接了电源和地,分别代表1和0。只要SRAM处于通电状态,VDD和地的信号的值都会保持稳定,为1和0。
- 如果要写入1,则将BL置为1,与之相对~BL则为0,这样就准备好了要写入的数据。
- 然后我们需要访问这个SRAM单元,就要将WL置为1。WL信号为1,则M5、M6两个晶体管的gate端也为1。由于M5和M6都是NMOS晶体管,当NMOS晶体管的gate端为1时,它是处于连通状态的。因此BL上的值就会通过M6传递进来,则Q信号为1,类似的,~Q信号为0。
- Q信号控制了M2晶体管的gate端,它是一个PMOS晶体管,当PMOS晶体管的gate端为1时,它是处于关闭状态的,所以VDD的信号不会被传到~Q,与步骤3中由~BL信号传递进来的0是一致的。类似的,Q信号还控制了M1晶体管,则它处于连通状态。M3和M4被~Q信号控制,分别处于关闭和连通状态,此时VDD的信号传到Q,与步骤3中由BL信号传递进来的1也是没有冲突的。
这样由外部的BL和~BL输入的信号就驱动了这个SRAM的存储单元的晶体管达到了一个稳定的状态。因为晶体管的工作速度很快,所以SRAM的写入过程也很快,当这几个晶体管达到稳定后,写入过程就结束了。
现在我们可以撤销WL信号了(由1变0),从而将M5、M6两个晶体管关闭。然后撤销BL和~BL的信号,那在外部的信号撤销之后,因为M5和M6都关闭了,所以并不是由外部的信号驱动M2和M1这两个晶体管的gate端,但是由于在刚才写入的过程中,M4晶体管处于连通状态,所以电源传导的这个1会始终驱动M2和M1的gate端保持为1。而只要M2和M1的gate端保持为1,由地传导过来的0又会反过来驱动M4和M3的gate端为0。那么在这4个晶体管的相互作用下,SRAM就保持住了刚才写入的1。只要WL信号保持为0,这个存储单元就会始终保持住之前存储的信号,当然前提是要保持通电的状态。
SRAM的读出过程示例
以读取刚才写入的数据1为例。
- 首先把WL信号置为1,这样M5、M6两个晶体管都会处于连通的状态。
- 此时外部并不驱动BL和~BL,因此它们会通过M5、M6被SRAM驱动。
- BL被驱动为1,~BL被驱动为0,这样读出1的过程就完成了。
这就是SRAM基本存储单元的结果和工作原理。
SRAM的特点和主要用途
如果我们把很多个这样的存储单元组合在一起,就可以构成一个存储矩阵,从外部可以输入若干的地址线,通过增加一些地址译码的驱动电路,就可以根据地址线的值选中存储矩阵当中对应的若干个存储单元,再通过读写控制,就可以将存储单元和数据线进行连通。
由此看来,因为晶体管的开关速度远比电容充放电速度快,所以相对于DRAM,SRAM更快。但是我们也看到,SRAM中每存储一个比特就需要6个晶体管,晶体管数量多会造成芯片面积大,从而带来集成度和价格高的问题。同时每个晶体管都是要耗电的,晶体管越多功耗就越高,这些都是SRAM的缺点。
那现代CPU中的高速缓存都是用SRAM实现的。比如这就是一颗4核CPU的版图,在这个芯片当中,这些大面积的看起来非常规整的电路,实际上都是SRAM。所以仅从制造成本上来看,这些作为高速缓存的SRAM往往要占到整个CPU的一半或者更多。而且由于高速缓存大多采用和CPU相当的时钟频率,所以它们的功耗也非常高。
DRAM和SRAM的比较
相关文章:

【计算机组成 课程笔记】7.2 DRAM和SRAM
课程链接: 计算机组成_北京大学_中国大学MOOC(慕课) 7 - 2 - 702-DRAM和SRAM(13-22--)_哔哩哔哩_bilibili 从【计算机组成 课程笔记】7.1 存储层次结构概况_Elaine_Bao的博客-CSDN博客中,我们了解到:SRAM比较快&#x…...

1802_在Linux系统上开发ARM单机片机嵌入式软件
全部学习汇总: GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 1. 在Linux上也有嵌入式的开发环境,或许还有很多。不过,我现在接触到的大部分还是Windows居多。这一份文件介绍的是一个mbed platform…...

【计算机网络-自顶向下方法】应用层(HTTP、FTP)
目录 1. Principles of network applications创建一个网络应用1.1 网络应用架构1.1.1 客户-服务器架构1.1.2 P2P架构1.1.3 两种架构的比较 1.2 不同终端上的进程通信1.3 应用需要什么样的传输服务1.4 因特网能够提供的传输服务1.5 应用层协议1.6 小结 2. Web and HTTPWeb应用画…...
CSS文本超出显示小数点
目录 1、单行文本溢出 2、多行文本溢出 1、基于高度截断 2、基于行数截断 1、单行文本溢出 如果解决文本溢出显示省略号,需要满足的三个条件: 先强制一行内显示文本 white-space:nowrap;/*默认normal 自动换行*/ 超出的文本隐藏起来。 overflow:…...

怎么把图片压缩小一点?4个简单的压缩办法
怎么把图片压缩小一点?因为图片太大而带来的不良影响可说是非常的多,例如因为图片体积太大导致电脑中的存储空间越来越小,使得电脑使用起来越来越慢;当我们打开一张体积非常大的图片时无法开,甚至一度让电脑卡死&#…...
react嵌套路由
react嵌套页面 先从路由身上导出 import { HashRouter, Routes, Route, Navigate } from react-router-dom; //引入页面; import Home from ./view/Home; import About from ./view/About; import Integrated from ./view/Integrated; import Sidebar from ./vie…...
代码随想录 单调栈 Ⅰ
739. 每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替 思路&#…...
C++返回引用
在本文中,您将学习如何在函数中通过引用返回值,以及如何在程序中有效地使用它。 在C 编程中,不仅可以通过引用将值传递给函数,还可以通过引用返回值。 示例:通过引用返回 #include <iostream> int c; int add…...

010:连续跌3天,同时这三天收盘价都在20日均线下,第四天上涨的概率--以京泉华为例
对于《连续跌三天,压第四天上涨的盈利计算》,我们可以继续优化这个策略,增加条件:同时三天都收盘在20日均线下。 因为我们上一篇《获取20日均线数据到excel表中》获得了20日均线数据,我们可以利用均线数据来编写新的脚…...

MATLAB与Python:优势与挑战
本文旨在探讨MATLAB与Python在特定领域内的使用情况,并分析两者之间的优势和挑战。 MATLAB和Python都是流行的编程语言,广泛应用于科学计算、数据分析和机器学习等领域。在某些领域,如航空航天工程、自动化和电子工程嵌入式系统开发等&#…...

CSP-J第二轮试题-2019年-1、2题
文章目录 参考:总结 [CSP-J2019] 数字游戏题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示答案答案2 [CSP-J 2019] 公交换乘题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示…...

深入理解 python 虚拟机:原来虚拟机是这么实现闭包的
深入理解 python 虚拟机:原来虚拟机是这么实现闭包的 在本篇文章当中主要从虚拟机层面讨论函数闭包是如何实现的,当能够从设计者的层面去理解闭包就再也不用死记硬背一些闭包的概念了,因为如果你理解闭包的设计原理之后,这些都是…...

【数据结构-哈希表 一】【原地哈希】:缺失的第一个正整数
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【原地哈希】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…...

【C++设计模式之迭代器模式】分析及示例
简介 迭代器模式是一种行为型设计模式,它提供了一种顺序访问聚合对象元素的方法,而又不需要暴露聚合对象的内部结构。迭代器模式通过将遍历算法封装在迭代器对象中,可以使得遍历过程更简洁、灵活,并且符合开闭原则。 描述 迭代…...

【代码随想录】LC 27. 移除元素
文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。 一、题目 1、原题链接 27. 移除元素 2、题目描述 二、…...
crash工具分析dma设备内存踩踏(一)
背景介绍 我们的客户在利用我们提供的SDK参考方案开发相关产品时,在产品方案上进行一些基础老化测试时,极低概率出现kernel随机panic问题,由于场景复杂,无法单独针对特定模块或功能进行拆解来进行实验排查,只能基于已…...

C#上位机——根据命令发送
C#上位机——根据命令发送 第一步:设置窗口的布局 第二步:设置各个属性 第三步:编写各个模块之间的关系...
BEVFormer代码跑通
1 环境配置 1.1 环境安装 # 1 拉取源码 github加速代理https://ghproxy.com/ git clone https://github.com/fundamentalvision/BEVFormer.git# 2 创建虚拟环境 conda create -n bev python3.8 -y# 3 激活虚拟环境 conda activate bev# 4.1 安装torch,torchvision,torchaud…...

kafka安装
kafka安装 1 kafka概念 1.1 kafka介绍 kafka是最初有Linkedin公司开发的,是一个分布式,分区,多副本,多生产者,多订阅者,基于zookeeper协调的分布式日志系统。具有高吞吐量,可扩展性和可容错性…...

Mac上安装Java的JDK多版本管理软件jEnv
JDK的多版本管理软件主要有以下三种: jEnv jEnv 是一个命令行工具,可以帮助您管理和切换不同版本的 Java 环境。它可以让您在不同的项目之间轻松切换 Java 版本。您可以使用 jenv global 命令设置全局 Java 版本,也可以使用 jenv local 命令…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...