资讯详情

DDR4 SDRAM - Understanding the Basics

引言 Introduction

如今,DDR4 SDRAM 是基于 FPGA 或者 ASIC 存储介质在设备中非常流行。本文将探讨 DDR4 一些基础知识:

  • DDR4 SDRAM 内部结构是什么?
  • DDR4 基本操作:如何进行读写操作,以及
  • 高层次的 SDRAM 例如,子系统概述 FPGA/ASIC 与 DDR4 SDRAM 整个通信系统

物理结构 Physical Structure

从 DRAM 必要的 IO 从管脚及其功能开始本文是个好主意。本章我们将从 DRAM 外部的 IO 一开始,我一直在讨论底层 DRAM 内部基本电路单元。

顶层 Top Level

如你所料,DRAM 有时钟、复位、电影选择、地址和数据输入。下表对每个引脚都有更详细的信息。表格中没有列出所有信息 IO,只列出了基础部分。读者可以花一些时间了解每一个 IO 特别是具有复用功能的地址信号。

图-1 顶层 IO 信息

BankGroup,Bank,Row,Column

上节中的 DRAM 向外部提供的顶层结构展示了顶层结构 IO 管脚。下图显示了管脚。 DRAM 内部结构,以 bank 以及 bankgroup 组织单位。

图-2 BankGroup 以及 Bank

从存储介质中读取数据时,需要提供读取数据的地址;写入数据时,除地址外,还需要数据。用户提供的地址一般称为逻辑地址(logical address)。传输给逻辑地址 DRAM 前,将转换为物理地址(Physical address 翻译注:转换工作通常由 MMU 完成)。物理地址由以下几个域组成(field)组成:

  • Bank Group
  • Bank
  • Row
  • Column

这些域将用于区分存储介质单元读取或写入数据的位置。

如果再深入一个层次,看单个层次。 Bank 构成部分。

  • 存储阵列 Memory Arrays
  • 行译码 row decoder
  • 列译码 column decoder
  • Sense Amplifiers

图-3 行&列译码

在确定待读取地址时 Bank 组与 Bank 之后,激活地址中的行部分(activate)一行存储阵列(line),这被称为 Word line。该行被激活后,其数据从存储阵列中读取并写入 Sense Amplifiers。随后,DRAM 根据列地址 Sense Amplifiers 中缓存的 Word line 然后读取属于该列的数据,其长度和 DRAM 列数据位宽相同,称为 Bit line。

DRAM 该协议规定了列数据的位宽,包括 4 bit,8 bit 和 16 bit 三种,DRAM 因此分为三类:x4,x8 以及 x16 。另外请注意:DRAM 颗粒的 DQ 宽度与列数据位宽相同。所以也可以说 DRAM 是根据 DQ 为了简单起见,总线宽度被划分。

[] x16 DRAM 仅有 2 个 Bank Group 而 x4 以及 x8 DRAM 有 4 个 Bank Group,如图 2 所示。

:一个 DRAM 芯片就像一座装满文件柜的建筑

找楼层的地址

找到你需要的文件柜的地址

在这个文件柜里找到你需要的抽屉

用来标记抽屉里的第一份文件是你需要的

而在更低的层次上,每个比特实际上由一个保持电荷的电容,以及一个用作开关晶体管组成。

图-4 比特层组成

随着时间的推移,电容器中保持的电荷会放电,DRAM 除非定期给电容器充电,否则保持在中间的信息将逐渐丢失,即重新刷新。也就是说, DRAM 中 'D' 由来,代表 Dynamic,对应于 SRAM (Static Random Access Memory)。

DRAM 容量与地址 DRAM Sizing & Addressing

DRAM 采用标准容量,由 JEDEC 标准制定。JEDEC 是决定 DDR 标准委员会的设计和发展路线。以下内容来自 JEDEC DDR4 标准(JESD79-4B)的 2.7 节。

图-5 不同容量的 DRAM 地址映射映射

DRAM 容量计算 DRAM Size Calculation

接下来,让我们手工计算 2 对上表的内容有更深入的了解。

/* 4Gb x4 Device */  4Gb x4 颗粒 Number of Row Address bits: A0-A15 = 16 bits 行地址信号位宽:16bit     Total number of row = 2^16 = 64K     总行数:64k Number of Column Address bits: A0-A9 = 10 bits 列地址信号位宽:10bit         Number of columns per row = 1K     总列数:1k Width of each column = 4 bits 每列数据位宽:4bit Number of Bank Groups = 4 Bank Group 数量:4 Number of Banks = 4 Bank 数量:4  Total DRAM Capacity =      Num.Rows x      Num.Columns x Width.of.Column x      Num.BankGroups x Num.Banks DRAM 容量计算 = 行数 x 列数 x 列数据位宽 x Bank Group 数量 x Bank 数量  Total DRAM Capacity =      64K x 1K x 4 x 4 x 4 = 4Gb   /* 4Gb x8 Device */ Number of Row Address bits: A0-A154 = 15 bits     Total number of row = 2^15 = 32K Number of Column Address bits: A0-A9 = 10 bits     Number of columns per row = 1K Width of each column = 8 bits Number of Bank Groups = 4 Number of Banks = 4  Total DRAM Capacity =      Num.Rows x      Num.Columns x Width.of.Column x      Num.BankGroups x Num.Banks  Total DRAM Capacity =     32K x 1K x 8 x 4 x 4 = 4Gb

DRAM Page 大小计算 DRAM Page Size

在上表中提到 Page Size 这个概念指的是每一行 bit 数量。换句话说,当一行被激活时,载入 Sense Amps 比特数。考虑到列地址的位宽为 10bit,每一行有 1k 个列。

所以对于 x4 就装置而言,每一行 bit 数量为 1k x 4 = 4k bit(512B)。

同理,x8/16 器件的 page size 分别为 1k/2k Byte

Rank (Depth Cascading)

DRAM 中有 single/Dual/Quad Rank 等术语。Rank 是 DRAM 最高层次的逻辑单元通常用于增加整个系统的存储容量。

例如,你需要它 16Gb 存储,根据市场上的供应情况、价格以及你自己口袋里的银子,你可能会选择单个 16Gb 芯片,所以你此时拥有的是 Single Rank 系统,因为你只需要单片选择信号(CS_n,毕竟你只有一个 chip),你可以读整个 16Gb 空间。

你也可以选择两个单独的 8Gb 由颗粒组成 16Gb 空间,这两颗粒焊在一起 PCB 一般来说,这比单个更好 16Gb 颗粒要便宜。此时,这两个颗粒共享相同的地址和数据总线,因此您需要控制 2 这两选择信号分时选择这两个颗粒 Dual Rank。

[] 你可能会遇到另一种形式 Dual Rank DDR——Dual-Die Package,即 DDP。DDP 将两个 DDR 颗粒包装在一起,此时你只看到一个芯片,但事实上,这两个颗粒仍然是共享总线,是一种 Dual Rank 器件。

图-6 Rank 的组成

Width Cascading

再举一个多芯片系统的例子,但与 RANK 无关。假设你需要一个 8Gb 存储,你的借口是 x8 位宽,即位宽为 8 bit。此时,您可以选择单个 8Gb x8 颗粒,或两个位宽串联 4Gb x4 颗粒。在位宽串联(Width Cascading)在模式中,两颗粒连接到相同的个片选信号、地址以及数据总线。但不同的是,连接至数据总线的不同部分,在下图中,第一个 x4 颗粒连接到 DQ[3:0],而第二个颗粒则连接至 DQ[7:4]。(译注:此时两者都是 single rank )

图-7 位宽串联的 DRAM 颗粒

  • DDR4 的读写访问都基于 Burst 形式(译注:Burst 一般译作突发传输或者猝发传输)。突发传输起始时,由用户指定传输的起始地址,以及本次传输的长度,在 DDR4 中这个长度为 8 或者 4,后者是一个 chopped 的传输。(译注:chopped burst ,即提利昂·兰尼斯特式短小的传输)
  • 读写操作分为两个阶段,以 ACTIVATE 激活命令(保持一个周期的 ACT_n & CS_n 低电平信号)开始,其后是具体的读或者写命令。
  • 与激活命令同时发出的地址信号,用于确定所需激活的 BankGroup,Bank,Row,这项步骤称为 RAS 阶段,Row Address Strobe。
  • 而在第二阶段,与读写命令同步发出的地址信号用于确定突发传输的起始列地址。这项步骤称为 CAS 阶段,Column Address Strobe。
  • 由于单个 Bank 只有一个 Sense Amps,只能缓存单个行的内容。因此在激活某行后,访问同一 Bank 不同行之前,需要使用 PRECHARGE 命令关闭(de-activate)当前激活行。PRECHARGE 命令好比关上当前打开的文件柜抽屉,命令发出后当前 Sense Amps 中缓存的行会被写回原地址。
  • 相较于直接使用 PRECHARGE 命令关闭某个行,也可以使用 RDA (Read with Auto-Precharge)或者 WRA (Write with Auto-Precharge)命令,在当前传输结束后自动关闭当前行。因为列地址只需要使用 A0-A9 10bit,因此 CAS 阶段使用 A10 比特表示当前是否启用自动关闭(Auto-Precharge)。

至今为止,我们一直在使用 ”命令“ (Command)这一说法,激活命令,读写命令等等。但在本文开始的时候,我们并没有提到 DRAM 有"命令" IO,那么这些命令都是如何通过 IO 发送给 DRAM 的呢?

事实上,DRAM 使用 ACT_n, RAS_n, CAS_n & WE_n ,这几个信号 IO 的组合来发出命令。

表-部分命令的真值表

上表是 DRAM 部分命令的子集,完整的命令真值表可以在 JEDEC 标准 JESD79-4B 4.1 节中获得。

图-8 读命令操作

上图是读命令的时序图,此时突发传输长度为 8,称为 BL8。

  • 第一步是 ACT 命令,当时在地址总线上的是 row 地址
  • 第二步发出了 RDA 命令,此时地址总线上为 column 地址
  • RDA 命令指示 DRAM 在读操作完成后自动关闭当前 Bank

图-9 写命令操作

上图是写命令的时序图。

  • 第一步是发出 ACT 命令激活 ROW 行
  • 第二步发出了写命令,第一次突发传输写入 COL 起始的地址中,第二次突发传输写入 COL+ 8 地址
  • 第二次突发传输之前无需再发出 ACT 命令,因此所操作的 ROW 行此前已经被打开,数据缓存于 Sense Amps 中
  • 此外,第一次发出的是纯粹的 WR 命令,所以传输结束后,该行仍处于激活状态。第二次发出的是具有自动关闭功能的 WRA 命令,因此在传输结束后自动关闭了该行。

[:本文对一些内容并没有做出详细的解释,比如 A16&A15&A14 这些具有复用功能的地址信号中,自动关闭功能通过 A10发出,而 A12 则用于选择突发传输的长度:4/8, 如果模式寄存器中相应的配置位使能的话]

在前面的章节中,我们已经讨论了很多关于 DRAM 本身的内容,在本节中,我们将讨论 ASIC 或者 FPGA 与 DRAM 通信时所需的系统组件,由 3 部分组成:

  • DRAM
  • DDR PHY
  • DDR Controller(译注:一般简称为 MC,即 Memory Controller)

图-10 DRAM 子系统组成

上图中的信息量很大,让我们一点点拉扯来看:

  • 一般来说,DRAM 是一个焊接在 PCB 上的独立芯片,而 PHY 与 MC 则是 FPGA 或者 ASIC 用户逻辑的一部分
  • 用户逻辑与 MC 之间的接口是由用户定义的,并没有被标准化
  • 用户逻辑向 MC 发出读写命令时,其中的地址使用的是逻辑地址
  • MC 再将逻辑地址转换为物理地址,将用户逻辑的命令转换后向 PHY 发出
  • MC 与 PHY 之间采用标准化接口进行通信,一般为 DFI (DDR PHY Interface),DFI 标准可从以下链接得到 http://www.ddr-phy.org/
  • PHY 将 MC 的命令转换为具体的底层信号,驱动 DRAM 的物理 IO 接口
  • PHY 与 DRAM 之间的接口由 JEDEC 标准化

由此看来,MC 好比是读写 DDR 的大脑,而 PHY 则是做出反应的肌肉

  • 当用户激活一行时,整个行被缓存至 Sense Amps 中。后续用户对该缓存行读写的代价会相对较低,因为可以省略第一阶段的激活命令。MC 一般可以对访问 DRAM 的请求进行重排序,来高效地利用行缓存机制。为了实现重排序,MC 一般具有一小块 cache 或者 TCAM,并始终返回最新的数据(译注:and always returns the lastest data 这里没有搞懂)。所以用户逻辑无需担心数据丢失或者冲突,因为控制器会负责重排序功能
  • PHY 中包括了模拟电路的部分,用于驱动 DRAM 的 IO。并负责调整寄存器以增大驱动能力或者调节端接电阻,以提高信号完整性

让我们最后总结下本文:

  • DRAM 以 Bank Groups Bank Row Columns 的形式组织
  • 用户发出的地址称为逻辑地址,由 DRAM 控制器转换为物理地址后发送给 DRAM
  • DRAM 根据其 DQ 数据总线宽度,划分为 x4、x8 以及 x16 三类
  • 可以通过 depth/width 串联多个 DRAM 颗粒实现所需的大小
  • 读写命令分为两个阶段进行,第一步激活某行,第二步读写该行
  • DRAM 子系统由 DRAM 颗粒、PHY 以及 控制器三部分组成

标签: ddr4驱动电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台