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

【计算机组成体系结构】SRAM和DRAM

  • RAM — Random Access Memory 随机访问存储器

—指定某一存储单元地址的时候,存储单元的读取速度并不会因为存储单元的物理位置改变

  • SRAM即为 Static RAM 静态随机访问存储器 — 用于主存
  • DRAM即为 Dynamic RAM 动态随机访问存储器 — 用于Cache

一、SRAM和DRAM的特性差异

DRAM采用栅极电容存储二进制0/1,线端是否有电荷流出代表存储的是1还是0。输出电荷后原本的电容没有电荷了,这称之为破坏性读出,所以还需要进行重写操作。

SRAM采用双稳态触发器存储二进制0/1(包含6个MOS管),A端高电平B端低电平代表写入1,反正代表写入0。左线输出低电平代表输出0,右线输出低电平代表输出1。 与栅极电容不同,双稳态触发器则没有破坏性读出的问题,因此SRAM的读写速度会更快

其次,观察栅极电容双稳态触发器电路的复杂程度和MOS管数量,我们可以得到以下结论。

栅极电容 DRAM双稳态触发器 SRAM
功耗
相同空间集成度
成本


二、DRAM的刷新 

1.为什么刷新

栅极电容有有一个问题,电容存储的电荷只能维持2ms,也就是说我们每2ms之内,就必须给电容进行一次充电,也就是进行刷新,使得存储的信息不会消失。 

而双稳态触发器则没有刷新问题。

2.刷新规则

3.刷新时机 

假设DRAM的存取周期位0.5μs,内部结构128x128,那么一个刷新周期内,存储器可以进行4000个存取周期。则我们要在2ms内把128行都刷新一遍。分为三种思路

(1)分散刷新

每一个存取周期之后都刷新一次,存取周期变为1μs,可以刷新2000次,足够刷新128行很多次。

(2)集中刷新

前3872个周期进行存取周期,剩下的128个周期集中进行刷新,而剩下这128个周期的时间是不可以存取的,无法访问存储器,所以被称为死区。

(3)异步刷新

把128次刷新分摊到2ms内,也就是2ms/128 = 15.6μs,也就是说我们每隔15.6μs刷新就可以了,那么每15.6μs,有15.1μs存取,0.5μs的时间刷新,也就是说有0.5μs的死区,在实际操作中,我们可以在CPU不访问存储器的一段时间内进行刷新,比如译码阶段。


三、DRAM的地址线复用 

我们上篇提到了存储器的地址是一个个存储单元的地址,如果有20位的地址,那么就要有2^20,也就是1m的选通线,显然在工程上实现是非常困难的。

因此我们通常把译码器拆分成行地址译码器列地址译码器。 也就是把存储单元从一维展至二维。

如果是8位地址,那么一维排列的需要2^8 = 256根选通线,而二维排列只需要2 * 2^4 =32根选通线即可。

给出8位地址,00000000,左边一次性读入译码器选择第一根选通线。右边则是拆分成0000 0000行地址和列地址分别送给行列地址译码器,每个存储单元都是两个选通线都被选通才可以被读出。


在SRAM中,如果给出八位地址0000 0000,则行列地址是同时被输给行列地址译码器的。也就是说有多少位地址,就要提供给多少根地址线给译码器。

但是DRAM则不同,DRAM存储容量一般比较大,所需的地址线较多,所以我们DRAM一般会采用地址线复用来把地址线数量减半。简单地说,就是将行列地址分两次送到行列地址缓冲区,再送到行列地址译码器。先送4位行地址,再送4位列地址,所以只需要4根地址线即可。同时,芯片引脚也减少一半。

相关文章:

  • 了解linux计划任务
  • NumPy学习:NumPy(Numerical Python)基础(一)
  • Java 22种设计模式详解
  • debian11,debian 如何删除虚拟内存,交换分区
  • UE5 树叶飘落 学习笔记
  • 创建第一个 Flink 项目
  • XUbuntu22.04之8款免费UML工具(一百九十七)
  • 【Flink on k8s】- 12 - Flink kubernetes operator 的高级特性
  • 在目标检测的图框标注中注意一下几点
  • java中用thumbnailator依赖写一个压缩图片的类,只要图片大小超过1M就无线循环下去的详细代码实例?
  • 【ARM Trace32(劳特巴赫) 使用介绍 13 -- Trace32 变量篇】
  • 得帆云助力容百科技构建CRM系统,实现LTC全流程管理
  • 【管理运筹学】背诵手册(七)| 网络计划与排队论
  • 游戏架构之面向对象模型和组件模型
  • 【ML】softmax简单理解。
  • 分享一款快速APP功能测试工具
  • 0x05 Python数据分析,Anaconda八斩刀
  • angular2 简述
  • css选择器
  • IOS评论框不贴底(ios12新bug)
  • Javascripit类型转换比较那点事儿,双等号(==)
  • LeetCode算法系列_0891_子序列宽度之和
  • MySQL几个简单SQL的优化
  • React16时代,该用什么姿势写 React ?
  • vue2.0项目引入element-ui
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 对象管理器(defineProperty)学习笔记
  • 码农张的Bug人生 - 初来乍到
  • 你真的知道 == 和 equals 的区别吗?
  • 人脸识别最新开发经验demo
  • 时间复杂度与空间复杂度分析
  • 思维导图—你不知道的JavaScript中卷
  • 通过几道题目学习二叉搜索树
  • 译米田引理
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​决定德拉瓦州地区版图的关键历史事件
  • "无招胜有招"nbsp;史上最全的互…
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • ${factoryList }后面有空格不影响
  • (1)虚拟机的安装与使用,linux系统安装
  • (C++)八皇后问题
  • (function(){})()的分步解析
  • (js)循环条件满足时终止循环
  • (Note)C++中的继承方式
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (离散数学)逻辑连接词
  • (生成器)yield与(迭代器)generator
  • (算法设计与分析)第一章算法概述-习题
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .bat批处理(一):@echo off
  • .equals()到底是什么意思?
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET连接数据库方式