欢迎光临专业集成电路测试网~~欢迎加入IC测试QQ群:111938408

专业IC测试网

当前位置: 网站主页 > 相关技术 >

【一】理解DDR基本原理(2)

时间:2023-09-11 18:56来源:一个人一支队伍 作者:ictest8_edit 点击:
     
3 内存原理
基本DDR subsystem架构图:DDRC +DDRphy +SDRAM颗粒,DDR IP一般包括DDR Controller和DDR PHY,内部涉及的内容包括但不限于以下几个方面:数据保序、仲裁、最优调度、协议状态机设计、防饿死机制、bypass通路、快速切频、DDR training
 
从外观上就可以看出来小张的内存条由很多内存颗粒组成。
 
从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为:channel>DIMM>rank>chip>bank>row/column,如下图:
一个现实的例子是:
 
        在这个例子中,一个i7 CPU支持两个Channel(双通道),每个Channel上可以插俩个DIMM,而每个DIMM由两个rank构成,8个chip组成一个rank。由于现在多数内存颗粒的位宽是8bit,而CPU带宽是64bit,所以经常是8个颗粒可以组成一个rank。所以小张的内存条2R X 8的意思是由2个rank组成,每个rank八个内存颗粒。由于整个内存是4GB,我们可以算出单个内存颗粒是256MB。
3.1 Channel
内存控制器(Memory Controller)是计算机系统内部控制内存并且负责内存与CPU之间数据交换的重要组成部分。CHANNEL即内存通道,实际上是一种内存的带宽加速技术。一个DDR控制器中可能有一个内存通道,也可能有两个内存通道。最常见的是双通道,民用级电脑都支持,服务器还有3通道和4通道等。
3.1.1 DDR3/DDR4内存通道
     内存通道实际是对应一组时钟、命令、地址、数据线,这组总线也就是所谓的内存通道。一般一个内存通道,可以连接若干个DIMM。
     DDR3/DDR4的内存通道,如下图所示:
 
DDR3/DDR4内存通道关键点,一个通道上可以插多根DIMM,每个DIMM只会占用一个通道。
下面以双通道为例,解释一下多通道技术。
双通道,就是在北桥(又称之为MCH)芯片级里设计两个内存控制器,这两个内存控制器可相互独立工作,每个控制器控制一个内存通道。
在这两个内存通过CPU可分别寻址、读取数据,从而使内存的带宽增加一倍,数据存取速度也相应增加一倍(理论上)。流行的双通道内存构架是由两个64bitDDR内存控制器构筑而成的,其带宽可达128bit。因为双通道体系的两个内存控制器是独立的、具备互补性的智能内存控制器,因此二者能实现彼此间零等待时间,同时运作。两个内存控制器的这种互补“天性”可让有效等待时间缩减50%,从而使内存的带宽翻倍。双通道是一种主板芯片组(Athlon64集成于CPU中)所采用新技术,与内存本身无关,任何DDR内存都可工作在支持双通道技术的主板上,所以不存在所谓“内存支持双通道”的说法。
3.1.2 DDR5内存通道
DDR5不会为每个DIMM提供一个64位数据通道,而是为每个DIMM提供两个独立的32位数据通道(考虑ECC时为40位)。也就是说一个DIMM会占用2个通道。
 
一个DDR5内存控制器,对应2个通道,每个通道32bit。这2个通道一起向一根DIMM累计提供64bit的数据访问。
 
与传统的DDR4双通道相比,一个DDR5内存控制器对应2个通道,2个DDR5内存控制器就对应4个通道。说的更直白就是,DDR4需要至少2根DIMM才能组成双通道;DDR5一根DIMM就可以组成双通道,2根DIMM就可以组成4通道。
Channel: 通道,芯片支持多少个DDRC(DDR控制器)就支持多少个通道。一个主板上可能有多个插槽,用来插多根内存。这些槽位分成两组或多组,组内共享物理信号线。这样的一组数据信号线、对应几个槽位(内存条)称为一个channel(通道)。简单理解就是DDRC(DDR控制器),一个通道对应一个DDRC.CPU外核或北桥有两个内存控制器,每个控制器控制一个内存通道。内存带宽增加一倍。(理论上)
3.1.3 一个内存通道可以插多少根内存条
关于这个问题,我之前也有个误区,想当然的认为每个通道,应该可以插无数根内存条,就看硬件厂商做了多少个插槽,而实际这是错误的。
一个内存控制器无论是,有一个或两个内存通道,但是一般单个通道支持的RANK数量是有限的。
比如,一个通道最大支持8个RANK,那么可能有以下几种情况:
若单条DIMM有1个RANK,那么这样的DIMM,可以插8根;
若单条DIMM有2个RANK,那么这样的DIMM,可以插4根;
若单条DIMM有4个RANK,那么这样的DIMM,可以插2根;
所以理论上,一个通道到底可以插多少根内存条,与通道支持的最大RANK数,以及DIMM的RANK数有关。
3.2 DIMM(dual inline memory module) 
DIMM(Dual Inline Memory Module)双列直插内存模块,也就是我们常见的内存条。
 
DIMM(dual inline memory module)是主板上的(一条可传输64bit数据的内存PCB,也就是内存颗粒的载体)。
但是它的历史,你知道吗?
最初在80286时代,内存颗粒(Chip)是直接插在主板上的,叫做DIP(Dual In-line Package)。
到了80386时代,换成1片焊有内存颗粒的电路板,叫做SIMM(Single-Inline Memory Module)。由阵脚形态变化成电路板带来了很多好处:模块化,安装便利等等,由此DIY市场才有可能产生。当时SIMM的位宽是32bit,即一个周期读取4个字节。
到了奔腾时,位宽变为64bit,即8个字节,于是SIMM就顺势变为DIMM(Double-Inline Memory Module)。这种形态一直延续至今,也是内存条的基本形态。
DIMM说白了就是将若干个内存颗粒,单独焊接在一块独立的电路板上,方便模块化和安装。
当然现在DIMM因其用途不同,又分为很多种,比如:
RDIMM: 全称(Registered DIMM),寄存型模组,主要用在服务器上,为了增加内存的容量和稳定性分有ECC和无ECC两种,但市场上几乎都是ECC的。
UDIMM:全称(Unbuffered DIMM),无缓冲型模组,这是我们平时所用到的标准台式电脑DIMM,分有ECC和无ECC两种,一般是无ECC的。
SO-DIMM:全称(Small Outline DIMM),小外型DIMM,笔记本电脑中所使用的DIMM,分ECC和无ECC两种。
Mini-DIMM:DDR2时代新出现的模组类型,它是Registered DIMM的缩小版本,用于刀片式服务器等对体积要求苛刻的高端领域。
可以看到这些DIMM规格尺寸,都会有所差异:
 
DIMM(dual inline memory module)是主板上的(一条可传输64bit数据的内存PCB,也就是内存颗粒的载体)。
 
3.2.1 DIMM容量计算
我们知道一根DIMM上可能有多个RANK,所以我们用通道位宽/内存芯片位宽,就可以得到一个RANK需要几颗芯片组成,然后使用芯片容量*芯片数,就可以得到一个RANK的容量大小,再结合RANK数量,可以计算出整根DIMM的容量。
DDR3或DDR4的DIMM计算公式,如下:
DIMM容量(DDR3/DDR4) = (芯片容量 * 64 / 内存芯片位宽) * RANK数
由于DDR3、DDR4,只能一根DIMM对应1个通道,所以上述公式,实际是默认计算的一个通道容量,而DDR5的DIMM对应2个通道。
DDR5的DIMM计算公式,如下:
DIMM容量(DDR5) = (芯片容量 * 32 / 内存芯片位宽) * 每通道RANK数 * 2
3.3 Rank
3.3.1 RANK是什么
下文中提到的,内存颗粒皆指Package的概念了,也就是电路板上肉眼实实在在看到的芯片。
上面讲到内存颗粒,我们都知道内存条上可不止一个内存颗粒,一般都是由很多内存颗粒共同组成一根内存条。那么你知道这些颗粒是怎么组织起来的吗,还是说多一个颗粒,少一个颗粒都无所谓呢?接下来,继续介绍。
我们知道,CPU与内存之间的数据接口位宽是64bit,也就意味着CPU在一个时钟周期内会向内存发送或从内存读取64bit的数据。可是,单个内存颗粒的位宽仅有4bit、8bit或16bit,个别也有32bit的。显然发送方和接收方的位宽必须一致,不能说我发了64位数据出来,你才收到前面的16位,后面的就丢掉了。因此,必须把多个颗粒并联起来,组成一个位宽为64bit的数据集合,才可以和CPU互连。生产商把64bit集合称为一个物理BANK(Physical BANK),简写为P-BANK。为了和逻辑BANK相区分,也经常把P-BANK称为RANK或Physical RANK,把L-BANK则简称为BANK。如果每个内存颗粒的位宽是8bit,应该由8个颗粒并联起来,组成一个RANK(64bit);同理,如果颗粒的位宽是16bit,应该由4个颗粒组成一个RANK。由此可知:Rank其实就是一组内存颗粒位宽的集合。具体说,当颗粒位宽×颗粒数=64bits时,这个模组就是有一个RANK。
为了保证和CPU的沟通,一个模组至少要有一个RANK。但是,为了保证有一定的内存容量,目前,DDR2内存,经常是采用一个模组两个RANK的架构。(过去也有用几个模组组成一个RANK的情况)。
 
我们可以,把这样一个由多个颗粒组成的64bit位宽集合,称为一个RANK。
大家需要认识到的就是,多个颗粒组成当前内存通道的位宽,这个位宽集合,称之为一个RANK。
不同类型DDR,其通道位宽不一样,如:
1在DDR3、DDR4上内存通道位宽为64bit。
1DDR5上,单根DIMM双通道,每个通道位宽为32bit。
为了和逻辑BANK相区分,也经常把RANK称为Physical BANK(物理BANK),简写为P-BANK。逻辑Bank,简写为L-BANK。
一个RANK中颗粒数量 = 通道位宽 / 颗粒位宽
比如,128MB内存芯片,其位宽为8bit,那么需要8块芯片才能组成64bit位宽,将这些芯片焊接到一块DIMM上,插到主板上就可以使用了。这时,该DIMM的总容量就是128MB*8=1GB。
假设,该主板只有一个DIMM插槽,并且我们还想将DIMM扩容至2GB,并且还只能使用128MB,位宽为8bit的内存颗粒。那么应该如何实现呢?说的更直白一点,就是如何做到单个DIMM容量翻倍。下面,就开始介绍。
 
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
用户名: 验证码: 点击我更换图片