当前位置: 首页 > news >正文

【计算机组成 课程笔记】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. 首先,这个存储单元中连接了电源和地,分别代表1和0。只要SRAM处于通电状态,VDD和地的信号的值都会保持稳定,为1和0。
  2. 如果要写入1,则将BL置为1,与之相对~BL则为0,这样就准备好了要写入的数据。
  3. 然后我们需要访问这个SRAM单元,就要将WL置为1。WL信号为1,则M5、M6两个晶体管的gate端也为1。由于M5和M6都是NMOS晶体管,当NMOS晶体管的gate端为1时,它是处于连通状态的。因此BL上的值就会通过M6传递进来,则Q信号为1,类似的,~Q信号为0。
  4. 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为例。

  1. 首先把WL信号置为1,这样M5、M6两个晶体管都会处于连通的状态。
  2. 此时外部并不驱动BL和~BL,因此它们会通过M5、M6被SRAM驱动。
  3. 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++返回引用

在本文中&#xff0c;您将学习如何在函数中通过引用返回值&#xff0c;以及如何在程序中有效地使用它。 在C 编程中&#xff0c;不仅可以通过引用将值传递给函数&#xff0c;还可以通过引用返回值。 示例&#xff1a;通过引用返回 #include <iostream> int c; int add…...

010:连续跌3天,同时这三天收盘价都在20日均线下,第四天上涨的概率--以京泉华为例

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

MATLAB与Python:优势与挑战

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

CSP-J第二轮试题-2019年-1、2题

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

深入理解 python 虚拟机:原来虚拟机是这么实现闭包的

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

【数据结构-哈希表 一】【原地哈希】:缺失的第一个正整数

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

【C++设计模式之迭代器模式】分析及示例

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

【代码随想录】LC 27. 移除元素

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 27. 移除元素 2、题目描述 二、…...

crash工具分析dma设备内存踩踏(一)

背景介绍 我们的客户在利用我们提供的SDK参考方案开发相关产品时&#xff0c;在产品方案上进行一些基础老化测试时&#xff0c;极低概率出现kernel随机panic问题&#xff0c;由于场景复杂&#xff0c;无法单独针对特定模块或功能进行拆解来进行实验排查&#xff0c;只能基于已…...

C#上位机——根据命令发送

C#上位机——根据命令发送 第一步&#xff1a;设置窗口的布局 第二步&#xff1a;设置各个属性 第三步&#xff1a;编写各个模块之间的关系...

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公司开发的&#xff0c;是一个分布式&#xff0c;分区&#xff0c;多副本&#xff0c;多生产者&#xff0c;多订阅者&#xff0c;基于zookeeper协调的分布式日志系统。具有高吞吐量&#xff0c;可扩展性和可容错性…...

Mac上安装Java的JDK多版本管理软件jEnv

JDK的多版本管理软件主要有以下三种&#xff1a; jEnv jEnv 是一个命令行工具&#xff0c;可以帮助您管理和切换不同版本的 Java 环境。它可以让您在不同的项目之间轻松切换 Java 版本。您可以使用 jenv global 命令设置全局 Java 版本&#xff0c;也可以使用 jenv local 命令…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...