图解RAM结构与原理,系统内存的Channel、Chip与Bank
文章目录
- 转载正文
- 标题挥发性内存分2种,SRAM和DRAM
- 主内存子系统
- channel 和 DIMM
- rank 和 chip
- bank、row、column
- 内存的读写方式
- 越多越好,加速读写能力
本文转载来自:
- 图解RAM结构与原理,系统内存的Channel、Chip与Bank
其它内容参考:
- 深入浅出DDR系列(一)–DDR原理篇
- 内存条的逻辑BANK和RANK(物理BANK)概念
- 计算机-内存】 Channel > DIMM > Rank > Chip > Bank > Row /Column
个人理解的几点,先记录在这。
- DDR,全称Double Data Rate,双数据速率。即上下时钟沿采样。
- 双通道,是指两个channel,每个channel有单独控制器。比如SOC/CPU的ddr接口是64bit位宽,两个channel都是32bit位宽即可。因为依赖channel独立DDR控制器,可以并行采样,互不干扰,所以能达到双倍DDR位宽效果。台式机都是采用双通道DDR。
- 为什么SOC不用双通道DDR技术?个人理解,管脚多了,布线复杂,功耗也会上去。没有便携,小型化需求,成本比重等考虑是可以用双通道的。
- 本文没说DIMM和rank的区别。DIMM是插槽技术,rank是指8个chip芯片颗粒组合而成,与CPU/SOC DDR位宽保持一致的。
转载正文
bank、rank、channel这些关于内存的名词是否已困绕许久,疑似了解却又说不出个所以然来。 就让我们一步步拆解内存的面纱,从架构到读写方式逐步揭开内存的秘密。
标题挥发性内存分2种,SRAM和DRAM
RAM(Ramdom Access Memory)随机存取内存,之所以称作「随机存取」,是因为相较于早期的线性储存媒体(磁带)而言,因为磁带的存取是线性的,存取时间会依目前磁带位置和欲存取位置的距离而定,需转动磁带至应有的位置,距离越长、转得越久、存取时间也就越久。 而 RAM 没有这种烦恼,存取时间为固定值,不会因为数据在内存的位置而影响存取时间。
而 RAM 在电脑里又可大致上分为 2 种:SRAM 和 DRAM,两者的基础原理差不多,都是将电荷储存至内部,藉由改变不同的电荷储存 0 或是 1。 SRAM(Static Random Access Memory)静态随机存取内存和DRAM(Dynamic Random Access Memory)有着几点不同,SRAM的结构较复杂、单位面积的容量较少、存取速度快,DRAM则是构造简单、单位面积内的容量较多、存取时间较SRAM慢,同时DRAM也因为构造较简单的关系, 储存的电荷会随着时间渐渐消失,因此需要有个再充电(Refresh)的动作保持电容储存的数据。
▲SRAM 单一位储存区的构造
▲DRAM 单一位储存区的构造。
由图中SRAM和DRAM构造可得知,SRAM采用正反器(flip-flop)构造储存,DRAM则是采用电容储存。 因为 SRAM 和 DRAM 种种的特性不同,SRAM 适合作为暂存器和 CPU 缓取使用,DRAM 则是适合做为主内存或是其他设备间的快取使用。
挥发与非挥发性内存
挥发性存储器(Volatile Memory)和非挥发性内存(Non-Volatile Memory)之间的差异在于,断电之后是否可保存内部资料,挥发性存储器的数据会随着失去电力供应而消失,而非挥发性内存依然可以保有内部资料。
挥发性内存包含了SRAM和DRAM,而非挥发性内存包含ROM(Read-Only Memory)和Flash Memory闪存。
主内存子系统
DRAM 由于制造简单、高密度,作为电脑内部的主内存再适合不过了。 但是由于主内存摆放在CPU之外,从工厂出来的晶粒需要封装和组合之后才可和CPU连结,因此从CPU至DRAM晶粒之间依据层级由大至小为channel>DIMM>rank>chip>bank>row/column,接下来就一一说明这些部分。
▲主内存由大至小,由上往下可做这样的拆分。
▲主内存从 channel 至 chip 的相对应关系。
▲chip 往下拆分为 bank。
▲bank 往下拆就是 1 个个的储存单元,横向 1 排称之为 row,直向 1 排称之为 column,每排 column 的下方都有个 row buffer,用以暂存读出来的 row 排资料。
▲单一 DRAM 芯片的内部功能区块图(图片取自Micron)。
channel 和 DIMM
从内存控制器出来之后,最先遇到的就是 channel,每个 channel 需要配有 1 组内存控制器、2 个 channel 配置 2 组… 以此类推。 而每个 channel 中能够拥有许多组 DIMM(Dual In-line Memory Module),DIMM 也就是目前使用者能够在市场上买到的内存模块,因为多年前的主板必须购买内存颗粒(chip)直接插在主板上,而后发展出 SIMM(Single In-line Memory Module),将多组内存颗粒焊在 1 片电路板上, 成为内存模块,再将此电路板插在主板上。 接着为了增加数据吞吐量,将 1 条内存模块的带宽从 SIMM 的 32bit 改换成 DIMM 的 64bit,这设计依然沿用至今。
从内存颗粒过度到 SIMM 的时代,坊间出现了替用户将内存颗粒焊到 SIMM 电路板上的服务,因为当时内存非常昂贵,花一些小钱就可以把内存延用至新的电脑上。
rank 和 chip
rank 指的是链接到同 1 个CS(Chip Select)的内存颗粒 chip,内存控制器能够对同 1 rank 的 chip 进行读写操作,而在同 1 rank 的 chip 也分享同样的控制信号。 以目前的电脑来说,因为 1 组 channel 的宽度为 64bit,所以能够同时读写 8byte 的数据,如果是具有 ECC 功能的内存控制器和 ECC 内存模块,那么 1 组 channel 的宽度就是 72bit。
▲rank 1 和 rank 2 共享同组 address/comand 讯号线,利用 chip select 线选择欲读取或是写入的那一组,之后将资料经由 MUX 多工器送出。
有些人会有错误观念,以 chip 的数量或是以内存模块的单、双面进行 rank 的判断,但其实要以内存控制器和内存颗粒的规格进行判断,目前家用 PC 的内存控制器通道绝大部分都是 64bit 宽,内存颗粒则是 8bit 宽,因此 8 颗并联即可满足内存控制器的需求,也就是 1 组 rank。 但偶尔也有以 16bit 宽的内存颗粒制成的内存模块,此时 4 个 chip 就是 1 组 rank。
这在采用Intel H61/H81芯片组和传统单channel的主板时须特别注意,因为Intel限制H61/H81每个 channel仅能支持2组 rank,而不是4组 rank,部分主板每个 channel 又 做了 2 组内存模块插槽,造成部分用户同组 channel 放入 2 条内存模块时能够识别全部的内存容量(双面单 rank 的内存模块),部分用户则是仅能识别一半的容量(双面双 rank 的内存模块)。
bank、row、column
bank 再往下分拆就是实际储存位元的电路,一般来说横向选择排数的线路称为 row(row enable、row select、word line),直向负责传递讯号的线路为column(bitline),每组 bank 的下方还会有个 row buffer(sense amplifier),负责将独出的 row 资料暂存,等待 column 地址送到后输出正确的位,以及判断储存的数据是 0 还是 1。
▲1 个 bank 的读取操作。
▲1 个 bank 的写入操作。
内存的读写方式
上图标明了内存的读写方式,读取时首先内存控制器会将 1 组地址由地址线传到内存上,控制线跟着传送控制信号;如果是多 rank 的安装情形,CS 也会送出对应的讯号选择目标 rank。 接着由于每个 rank 由许多 chip 组成,1 个 chip 仅负责部分的数据读取,chip 接收到地址信号后,将地址丢入内部的 row/column 解码器找出相对应的 bank 地址(每家每 款产品的内部 bank 组合有可能不同,因此对应也会有所不同),接着开启 row 线,同 1 排 row 的内部数据就会流到 row buffer 内部,row buffer 判断信号为 0 或是 1 之后就输出数据。
写入时除了地址资料外,还会传送欲写入的资料至芯片内部的 input buffer,同样的也是依照 row/column 解码器找出对应位置之后写入。
▲内存控制器和 DIMM 之间线路的关系。
越多越好,加速读写能力
家用计算机的内存控制器已经进入双通道内存控制器多年,加速原理为增加数据总线宽度,达到同时读写更多数据的能力。
另一种增加带宽的方法就是减少延迟,利用多个 chip 或是 bank 达成。 一般的内存读取延迟为命令下达+内存读取延迟+输出数据,如果命令下达延迟为 2ns、内存读取延迟为 10ns、输出数据延迟为 2ns,那么读取 2 笔资料的总延迟就会是(2+10+2)×2=24ns。
如果现在能够将数据拆分至2颗内存上,那么2笔读取延迟将降低至16ns,因为不需等到前笔资料读取完成才发出下一笔的读取命令,在第一笔数据进入内存读取时即可发出。 这种概念也可应用到目前最夯的SSD上,较多CE(Chip Enable)封装的闪存芯片,通常都比较少CE封装的芯片来得快。
▲由时序图可得知,下方此种尽量分拆内存空间的作法,可大幅减少延迟。
图解RAM结构与原理,系统内存的Channel、Chip与Bank相关推荐
- 【MPC5744P】Flash 结构、启动原理以及内存映射
与大部分的MCU相同,MPC5744P的Flash.RAM以及外设都映射到内存地址中了.以下为映射地址范围: MPC5744P Flash结构如下: 0x00000000-0x003FFFFF -- ...
- win10有自带测试软件吗,使用windows10自带工具测试系统内存
如果你的电脑不稳定,甚至经常出现蓝屏等显现.那么很有可能是电脑的RAM(内存)出现了问题.以前,如果需要检测内存问题则必须找专业的电脑维修店进行处理.现在在windows10系统下,我们完全可以使用系 ...
- 如何衡量系统内存健康程度: memdelay简介
简介 最近在upstream上, Johannes Weiner发了一个memdelay的patch, 主要是衡量系统内存的健康程度, 在对它进行分析和优化之后, 做了一个简单的总结 memdelay ...
- linux系统内存执行elf的多种方式
一.前言 无文件(fileless)恶意软件攻击现在已经越来越流行,这一点并不奇怪,因为这种技术通常不会留下蛛丝马迹.本文的重点不是介绍如何在Windows RAM中执行程序,我们的目标是GNU/Li ...
- 【图解版】HashMap原理初探
参考博客 Java中的equals和hashCode方法详解 链表 java提高篇(二三)-–HashMap Java HashMap的工作原理 算法的时间复杂度和空间复杂度-总结 Hashmap H ...
- 单片机_第2章 MCS-51单片机的结构及原理
目录 2.1 MCS-51单片机的结构 2.1.1 MCS-51单片机的内部结构 80C51单片机的内部资源主要包括: CPU(Central Processing Unit ) 2.1.2 MCS- ...
- 707-详解32位Linux系统内存地址映射
详解32位Linux系统内存地址映射 我们先看一段简单的C程序: 我们先来看一张图: 我们平时所说的x86 32位指的是:80386往后到现在的同一个体系的CPU处理芯片,但是x86这个芯片是从808 ...
- Camera基本结构及原理
** Camera基本结构及原理 ** ** 备忘 **: 文末支持一波,感谢鞠躬 一.学习目的 本模块主要是了解一个摄像头模组的基本组成,每个组成部分的主要作用是什么,同时掌握一些基本术语. 二.必 ...
- 超硬核:Linux系统内存知识
点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 Linux 内存是后台开发人员,需要深入了解的计算机资源.合理的使用内存,有助于提升机器 ...
最新文章
- 摄像头ISP系统原理(上)
- 远程连接身份验证错误,又找不到加密Oracle修正
- mysql权限的误操作的恢复
- spring boot项目之mybatis注解方式的使用
- Android 获取 屏幕状态栏高度和标题栏高度 避免出现0的情况
- 三范式理解 数据库原理
- simulink学习笔记(2)
- 文件上传中的临时上传路径问题
- NUC1657 All in All【字符串匹配】
- stm32f103读取红外接收HS0038A2
- TeamTalk的windows客户端流程
- *item_search_similar - 搜索相似的商品**
- 91-Lucene+ElasticSeach核心技术
- ElementUI table 单元格编辑合并
- 计算机 睡眠 无法打印,台式机睡眠后打不开怎么办
- HDU n^n求最高位
- Android Canvas 缩放(Scale)
- 再谈java内存模型
- ubuntu apt安装java_Ubuntu 16.04 apt方式安装JDK并且配置Java开发环境详解
- 2018年7月27日每日安全快讯
热门文章
- 【Unity框架】XLua中Lua代码注入C#代码操作
- 高等数学:一元函数微分学
- 三分钟了解一下深度学习
- Wave Arts Tube Saturator for Mac(实时电子管放大器插件) v1.38破解版
- SpringMVC在web.xml中配置DispatcherServlet拦截了静态资源访问
- GWAS - plink提取染色体位置范围内的SNP位点
- 最新二开修复嗨Go理财分红商城完整源码+区块商城综合系统源码
- 联想小新潮7000-13安装黑苹果笔记,无需无线网卡(无需U盘+win双系统+opencore)
- HTM页面监听Crtl + C 事件
- 【小5聊】纯javascript实现图片放大镜效果