DRAM 颗粒的容量 = 地址数量 x 位宽
每种颗粒容量规格,提供了 3 种地址数量和位宽的组合,以 2Gb 颗粒为例:
容量 (Gb) | 位宽 (b) | 选址数量 |
---|---|---|
2 | 4 | 512M |
2 | 8 | 256M |
2 | 16 | 128M |
提供多种组合目的是为了提供灵活的配置方案。因为一个嵌入式系统的 DRAM 位宽一般为 32 或者 64 比特(在 PC 上有更大的位宽),需要拼接多片 DDR4 颗粒才能提供这么多比特,那么使用不同位宽的 DDR 颗粒就会有不同拼接方案。
以 32 比特位宽,嵌入式系统为例,使用不同位宽的 2Gb 颗粒,有以下几种组合:
系统位宽 (b) | 系统容量 (Gb) | 2Gb x4 颗粒数量 | 2Gb x8 颗粒数量 | 2Gb x16 颗粒数量 |
---|---|---|---|---|
32 | 16 | 8 | ||
32 | 8 | 4 | ||
32 | 4 | 2 |
一般系统位宽的需求是固定的,而颗粒容量和位宽是一对可调整的参数,提供不同的系统容量,仍以 32 比特系统 DRAM 位宽为例:
2Gb 颗粒 | 4Gb 颗粒 | 8Gb 颗粒 | 16Gb 颗粒 | |||||
---|---|---|---|---|---|---|---|---|
颗粒位宽 (b) | 系统容量 (Gb) | 数量 | 系统容量 (Gb) | 数量 | 系统容量 (Gb) | 数量 | 系统容量 (Gb) | 数量 |
x4 | 16 | 8 | 32 | 8 | 64 | 8 | 128 | 8 |
x8 | 8 | 4 | 16 | 4 | 32 | 4 | 64 | 4 |
x16 | 4 | 2 | 8 | 2 | 16 | 2 | 32 | 2 |
系统位宽=颗粒位宽* 颗粒数量;系统容量 (Gb)=颗粒数量*颗粒容量 (Gb)
上表中的数量指的是系统的 DDR 颗粒总数量。有点与直观感觉违背的事实是,采用的位宽更大的颗粒,系统的总容量更低。
这是因为相同容量的颗粒,位宽越大,地址数量也就越少,所以系统位宽固定时,决定系统容量的是颗粒的地址数量:
系统容量 = 地址数量 x 系统位宽
接下来我们来看颗粒的地址数量以及其寻址方式。我们知道 DDR4 的寻址由 COL - ROW* - BANK- BANKGROUP 组成(单个 RANK 时)。
**COL, column, 指 DRAM 内部存储阵列中的列
**ROW, row , 指 DRAM 内部存储阵列中的行
颗粒的列数量是固定的 1024 列,而行、Bank(BA)、Bank Group (BG) 数量在不同位宽时则是不同的。
位宽 (b) | 选址数量 (M) | 行数量 | 列数量 | BG 数量 | 每个 BG 中 BA 数量 |
---|---|---|---|---|---|
4 | 512 | 32768 | 1024 | 4 | 4 |
8 | 256 | 16384 | 1024 | 4 | 4 |
16 | 128 | 16384 | 1024 | 2 | 4 |
地址所属的行、列、BA 以及 BG 的寻址是通过对应的地址线寻址得到,所以不同位宽的颗粒地址线的数目也不同。
位宽 (b) | 行地址线数目 | 列地址线数目 | BA 地址线数目 | BG 地址线数目 |
---|---|---|---|---|
4 | 15 | 10 | 2 | 4 |
8 | 14 | 10 | 2 | 4 |
16 | 14 | 10 | 2 | 2 |
由于行列地址线是分时复用的,以 x4 位宽为例,行列共享 A0-A14 地址线中的 A0-A9,所以 x4 位宽总地址数量为 15 (A) + 2 (BA) + 2 (BG) = 19。
这里我们看到使用小位宽颗粒虽然能够拼接更多颗粒,提供更大的系统容量,但是所需要的地址线较 x8 和 x16 的颗粒也更多。这是更大系统容量的代价,或者说是系统容量与地址线数量的折中考量( trade-off)。
位宽 (b) | 总地址线数目 | 行地址线 | 列地址线 | BA 地址线 | BG 地址线 |
---|---|---|---|---|---|
4 | 19 | A0-A14 | A0-A9 | BA0-BA1 | BG0-BG1 |
8 | 18 | A0-A13 | A0-A9 | BA0-BA1 | BG0-BG1 |
16 | 17 | A0-A13 | A0-A9 | BA0-BA1 | BG0 |
下面几张图都摘自 DDR4 协议 2.8 节,列出了 DDR4 支持的四种容量颗粒的属性,从中我们可以发现几点:
- 地址线最多的是 16Gb 容量的 x4 颗粒,使用 A0-A17 地址线。需要注意的是所有 PHY 都会有 A0-A16 (因为 RAS_n 复用为 A16),但有些 PHY 可能不支持 A17。
- 所有颗粒每个 Bank Group 都有 4 个 Bank
- 但是,x16 颗粒只支持 2 个 Bank Group,而其他颗粒支持 4 个
- x4 颗粒的地址线最多,而 x8 和 x16 颗粒的地址线数目相同,比 x4 少 1。x8 和 x16 的选址数目差异体现在 x16 的 Bank Group 少一半
-
另外值得一提的是页大小(Page size),等于一行中的数据数量,直观来说页大小与位宽直接相关。
Page size = 位宽 x 列数量 = 位宽 x 1K
对于 x4 颗粒,页大小 = 4b x 1k = 4kb = 512B
顺序读取同页数据时,每次读取之间是基本无需等待的。而非同页数据之间,则需要按照协议要求,在两次读取之间增加延迟。举例而言, x16 颗粒上可以无延迟顺序读取 2KB 数据,但是如果是一个 x8 颗粒,则需要在读取完 1KB 数据后,关闭当前行并且打开下一行,才能读取后 1KB 数据,需要增加的延迟大约在几十个时钟周期量级。
最后,我们在前文中使用 4b x 512M 来描述一个 x4 颗粒,这是从颗粒位宽 x 地址数量的角度出发。协议中的称呼为 512Mb x 4,两者都可用。