DDR/GDDR/HBM请参考文献

1.ddr的层级结构

一个soc或者PC上的ddr都是有很多颗ddr single chip组成的。这么多颗ddr又组成了不同的层级。这些层级从大到小分为:

channel->rank->chip->bank->row->col->cell

其中channel->rank->chip是ddr颗粒(就是单颗ddr,对应上图中黑色方块)之外的层级,bank->row->col->cell是ddr颗粒内部的层级。

1.1ddr颗粒之外的层级

一个现实的例子是:(该实例摘自原文链接:https://blog.csdn.net/u012489236/article/details/107730731)

在这个例子中,一个i7 CPU支持两个Channel(双通道),每个Channel上可以插俩个DIMM,而每个DIMM由两个rank构成,8个chip组成一个rank。由于现在多数内存颗粒的位宽是8bit,而CPU带宽是64bit,所以经常是8个颗粒可以组成一个rank。所以内存条2R X 8的意思是由2个rank组成,每个rank八个内存颗粒。由于整个内存是4GB,我们可以算出单个内存颗粒是256MB。

以 hmt351s6bfr8c-h9内存条为例 一个i7的cpu支持两个通道 每个通道上插两个DIMM就可以一共插4个hmt351s6bfr8c-h9内存条。共16G。

一个hmt351s6bfr8c-h9内存条就是一块DIMM(Dual Inline Memory Module,双列直插内存模块, 或者有的叫做内存模组)。

1.2 DDR颗粒内部的层级

这次我们来看看rank和Chip里面有什么,如下图:

这是个DDR3一个Rank的示意图。我们把左边128MB Chip拆开来看,它是由8个Bank组成,每个Bank核心是一个存储矩阵,就像一个大方格子阵。这个格子(cell)阵有很多列(Column)和很多行(Row),这样我们想存取某个格子(cell),只需要告知是哪一行哪一列就行了,这也是为什么内存可以随机存取而硬盘等则是按块存取的原因。

实际上每个格子的存储宽度是内存颗粒(Chip)的位宽,在这里由8个Chip组成一个Rank,而CPU寻址宽度是64bit,所以64/8=8bit,即每个格子是1个字节。

2.ddr地址的时分复用

DDR4芯片有20根地址线(17根Address、2根BA、1根BG),16根数据线。在搞清楚这些信号线的作用以及地址信号为何还有复用功能之前,我们先抛出1个问题。假如我们用20根地址线,16根数据线,设计一款DDR,我们能设计出的DDR寻址容量有多大?

Size(max)=(2^20) * 16=1048576 * 16=16777216bit=2097152B=2048KB=2MB。

但是事实上,该DDR最大容量可以做到1GB,比传统的单线编码寻址容量大了整整512倍,它是如何做到的呢?答案很简单,分时复用。我们把DDR存储空间可以设计成如下样式:

首先将存储空间分成两个大块,分别为BANK GROUP0和BANK GROUP1,再用1根地址线(还剩19根),命名为BG,进行编码。若BG拉高选择BANK GROUP0,拉低选择BANK GROUP1。(当然你也可以划分成4个大块,用2根线进行编码)

再将1个BANK GROUP区域分成4个BANK小区域,分别命名为BANK0、BANK1、BANK2、BANK3。然后我们挑出2根地址线(还剩余17根)命名为BA0和BA1,为4个小BANK进行地址编码。

此时,我们将DDR内存颗粒划分成了2个BANK GROUP,每个BANK GROUP又分成了4个BANK,共8个BANK区域,分配了3根地址线,分别命名为BG0,BA0,BA1。然后我们还剩余17根信号线,每个BANK又该怎么设计呢?这时候,就要用到分时复用的设计理念了。

剩下的17根线,第一次用来表示行地址,第二次用来表示列地址。现在修改为传输2次地址,在传输1次数据,寻址范围最多被扩展为2GB。虽然数据传输速度降低了一半,但是存储空间被扩展了很多倍。这就是改善空间。

所以,剩下的17根地址线,留1根用来表示传输地址是否为行地址。

在第1次传输时,行地址选择使能,剩下16根地址线,可以表示行地址范围,可以轻松算出行地址范围为2^16=65536个=64K个。
在第2次传输时,行地址选择禁用,剩下16根地址线,留10根列地址线表示列地址范围,可以轻松表示的列地址范围为2^10=1024个=1K个,剩下6根用来表示读写状态/刷新状态/行使能、等等复用功能。
这样,我们可以把1个BANK划分成67108864个=64M个地址编号。如下所示
所以1个BANK可以分成65536行,每行1024列,每个存储单元16bit。
所以1个BANK可以分成65536行,每行1024列,每个存储单元16bit。

每行可以存储1024*16bit=2048bit=2KB。每行的存储的容量,称为Page Size。

单个BANK共65536行,所以每个BANK存储容量为65536*2KB=128MB。

单个BANK GROUP共4个BANK,每个BANK GROUP存储容量为512MB。

单个DDR4芯片有2个BANK GROUP,故单个DDR4芯片的存储容量为1024MB=1GB。

至此,20根地址线和16根数据线全部分配完成,我们用正向设计的思维方式,为大家讲解了DDR4的存储原理以及接口定义和寻址方式。

3. 总结

本章主要是针对DDR的发展和原理进行了学习,主要集中在硬件的组成原理,其中涉及到Channel > DIMM > Rank > Chip > Bank > Row/Column,其组成如下图所示

  • Channel:一个主板上可能有多个插槽,用来插多根内存。这些槽位分成两组或多组,组内共享物理信号线。这样的一组数据信号线、对应几个槽位(内存条)称为一个channel(通道)。简单理解就是DDRC(DDR控制器),一个通道对应一个DDRC。CPU外核或北桥有两个内存控制器,每个控制器控制一个内存通道。内存带宽增加一倍。(理论上)
  • DIMM(dual inline memory module)是主板上的一个内存插槽。一个Channel可以包括多个DIMM。
  • Rank是一组内存芯片的集合,当芯片位宽x芯片数=64bits(内存总位宽)时,这些芯片就组成一个Rank。一般是一个芯片位宽8bit,然后内存每面8个芯片,那么这一面就构成一个Rank(为了提高容量,有些双面内存条就有两个rank。在DDR总线上可以用一根地址线来区分当前要访问的是哪一组)。同一个Rank中的所有芯片协作来共同读取同一个Address(一个Rank8个芯片 * 8bit = 64bit),这个Address的数据分散在这个Rank的不同芯片上。设计Rank的原因是这样可以使每个芯片的位宽小一些,降低复杂度。
  • Chip是内存条上的一个芯片。由图中是由8个bank组成了一个memory device。
  • Bank:Bank是一个逻辑上的概念。一个Bank可以分散到多个Chip上,一个Chip也可以包含多个Bank。Bank和Chip的关系可以参考下面的图,每次读数据时,选定一个Rank,然后同时读取每个chip上的同一bank。
  • Row/Column组成的Memeory Array:Bank可以理解为一个二维数组bool Array[Row][Column]。而Row/Column就是指示这个二维数组内的坐标。注意读取时每个Bank都读取相同的坐标

更多内容可以参考深入浅出DDR系列(一)--DDR原理篇

4.参考文献

内存系列一:快速读懂内存条标签

内存系列二:深入理解硬件原理

内存系列三:内存初始化浅析

DDR3 vs DDR4? 为什么说内存是个很傻的设备?DDR5在哪里?

DDR5有什么新特性?是不是该等它再升级电脑呢?

GDDR6 vs DDR4 vs HBM2?为什么CPU还不用GDDR?异构内存的未来在哪里? 老狼

DDR从channel/rank/chip/bank/row/col/cell,DDR/GDDR/HBM相关推荐

  1. 图解RAM结构与原理,系统内存的Channel、Chip与Bank

    文章目录 转载正文 标题挥发性内存分2种,SRAM和DRAM 主内存子系统 channel 和 DIMM rank 和 chip bank.row.column 内存的读写方式 越多越好,加速读写能力 ...

  2. DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided、Dimm

    目录 概览 1.概览 先从半导体生产开始,生产出来还没切割的叫晶圆(wafer).切割出来还没封装的叫裸die(bare die).封装好的叫颗粒(component).做成内存条后叫模组(modul ...

  3. EMCP/DDR中专业词汇(rank、bank、die、channel)的解析!

    这篇文章以前理解有误,现更正如下: 调试了这么久的emcp,对这些概念多少有点了解,但是始终有点模糊,欢迎交流! 首先把我的理解写下来: 要弄清楚rank和bank的概念,首先得搞清楚SDRAM. S ...

  4. C语言三字棋优化,实现ROW*COL个格子,ZI字棋

    三字棋优化 ,主要是针对棋局大小及方式的优化,可实现ROW*COL个格子,ZI字棋.也即棋盘方式,与下法都可以变化. 其中game.c中分别写了纯三字棋>优化>ROW*COL三字棋> ...

  5. 问题 | iview Row Col 修改样式

    最近要把iviw固定宽度的项目改为自适应 但是用响应式时,发现添加了row col后页面直接把东西给隐藏了. 后面改的时候加了border,虽然显示了边框,但是没反应过来,突然想通直接在样式写上边框就 ...

  6. DDR GDDR HBM

    DRAM基础 DRAM中的存储概念:rank/bank/page: 每个rank最多包括16个bank: 每个bank中只能有一个page处于"open"状态: 让一个page处于 ...

  7. DDR布线规则与过程——见过最简单的DDR布线教程

    DDR-Topology DDR布线通常是一款硬件产品设计中的一个重要的环节,也正是因为其重要性,网络上也有大把的人在探讨DDR布线规则,有很多同行故弄玄虚,把DDR布线说得很难,我在这里要反其道而行 ...

  8. java poi row cell,使用POI进行Excel操作的总结一——创建Workbook,Sheet,Row以及Cell

    前段时间,看在其他的网站上给出Excel文档的导入与导出操作,感觉很酷的样子,所以就学习了一下如何使用POI进行Excel的操作,现在对之前的学习过程进行一个总结. 一.现在普遍使用的Excel文档有 ...

  9. ddr老化测试_一种通过SOC测试DDR内存稳定性的方法与流程

    本发明涉及ddr内存领域,尤其涉及一种通过soc测试ddr内存稳定性的方法. 背景技术: 在嵌入式系统中,随着ddr内存的频率越来越高,ddr内存对系统的要求也越来越高,ddr内存读写的时间也越来越小 ...

最新文章

  1. 图像分析用 OpenCV 与 Skimage,哪一个更好?
  2. 技术直播:讲一个Python编写监控程序的小故事
  3. 第19课:Spark高级排序彻底解密
  4. Cut the Sequence(POJ3017)
  5. python把字符串放到列表_python中for循环把字符串或者字典添加到列表的方法
  6. CVPR 2019 | PoolNet:基于池化技术的显著性目标检测
  7. HTTP 协议(详解)
  8. Pytorch出现RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor)
  9. NOIP2016提高组 天天爱跑步
  10. 三条中线分的六个三角形_解读三角形中的三边关系和三条线段的应用
  11. CSS定位 position
  12. ArduCopter——ArduPilot——Notch Filter(陷波滤波器)
  13. 华为云宝塔linux,华为云上安装宝塔面板
  14. 程序化随机多边形地图生成
  15. matlab怎么改变程序字体大小,matlab怎么把程序字体变大
  16. C语言拯救者 (操作符--6)
  17. We should: Good Good Study, Day Day Up
  18. 基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料)
  19. html插入图标img i png
  20. 河南单招计算机专业专科学校排名2015,河南省单招大专学校排名榜 哪个学校好...

热门文章

  1. 解决Linux图片加水印(Graphics2D)出现方框的问题
  2. python编程15章_python核心编程2 第十五章 练习
  3. Cadence Orcad Capture全局修改元件属性方法及技巧图文及视频演示
  4. 到底无支付牌照的电商公司能开展什么样的业务!!
  5. [洛谷1849] 拖拉机
  6. bcc服务器搭建网站,如何用云服务器bcc建站
  7. Python库turtle的趣味性用法,欢迎来品尝。
  8. python真的能赚钱吗,学python可以赚钱吗
  9. static char x [ ]=“12345”; 为什么比 static char y[ ]={‘1’,‘2’,‘3’,‘4’,‘5’};长?
  10. 《15个提高Google搜索的技巧》