DDR4的寻址原理
1. 地址线与数据线
- 地址线(Address Lines):用于标识内存中的特定地址。DDR4有20根地址线。
- 数据线(Data Lines):用于传输数据。DDR4有16根数据线。
2. 最大寻址空间计算
使用20根地址线,计算最大寻址空间:
这就是基于20根地址线和16根数据线的理论最大容量,但实际上,DDR4的设计实现了更大的容量。
4. 实际寻址容量的提升
为了提升DDR4的实际容量,采用了分时复用技术。具体步骤如下:
4.1 BANK GROUP与BANK的划分
-
BANK GROUP选择:DDR4芯片被划分为两个BANK GROUP,每个BANK GROUP可使用1根地址线进行选择(BG线)。
- BG = 0:选择BANK GROUP0
- BG = 1:选择BANK GROUP1
通过这种方式,我们实现了两个BANK GROUP的划分。
-
BANK选择:每个BANK GROUP再分成4个BANK,使用2根地址线(BA0和BA1)进行选择。比如:
- BA = 00:选择BANK0
- BA = 01:选择BANK1
- BA = 10:选择BANK2
- BA = 11:选择BANK3
这样,我们可以选择4个BANK中的任意一个。
4.2 行地址与列地址
5. 示例说明
假设我们有一个DDR4芯片,具体参数如下:
- 地址线:20根
- 数据线:16根
DDR4内存的读写流程是一个复杂而精确的过程,涉及多个步骤和信号控制。以下是DDR4的读写流程的详细说明:
DDR4读写流程概述
-
准备阶段
- DDR4内存模块的控制信号由内存控制器发出,包括命令、地址、时钟等信号。
- DDR4的操作通常在时钟信号的上升沿和下降沿进行。
-
读操作流程
- 命令阶段:
- 控制器通过控制信号向DDR4内存发送“读”命令。
- 同时,控制器将目标地址(行地址和列地址)发送到DDR4内存。
- 行地址选取:
- DDR4首先接收行地址,并使用此地址在内存中选择对应的行(Row)。
- 该行地址的选择会使能行地址选择信号(RAS)。
- 行激活:
- 一旦行地址有效,DDR4会激活指定的行(行激活信号,RAS高)。
- 数据从该行的存储单元中读取,准备在接下来的步骤中输出。
- 列地址选取:
- 接下来,控制器发送列地址,激活列地址选择信号(CAS)。
- 数据读取:
- 一旦列地址有效,DDR4会从激活的行中选择对应的列,读取数据。
- 数据通过数据线输出,通常在时钟信号的上升沿或下降沿输出。
- 完成阶段:
- 一旦数据传输完成,控制信号会复位(行激活信号和列激活信号置低),释放内存,以准备下一次操作。
- 命令阶段:
DDR4写操作流程
-
准备阶段
- 控制器发出“写”命令,并提供目标地址(行地址和列地址)和要写入的数据。
-
写操作流程
- 命令阶段:
- 控制器发送“写”命令到DDR4内存,激活相应的控制信号。
- 行地址选取:
- 与读操作类似,控制器首先发送行地址,DDR4激活对应的行(行激活信号,RAS高)。
- 列地址选取:
- 控制器接下来发送列地址,激活列地址选择信号(CAS)。
- 数据写入:
- 在发送列地址后,控制器通过数据线发送要写入的数据。
- DDR4在时钟信号的上升沿或下降沿接收数据,并写入到激活的行和列中。
- 完成阶段:
- 一旦数据写入完成,控制信号会复位,DDR4内存准备下一次操作。
- 命令阶段:
读写流程的信号控制
-
命令信号:
- RAS (Row Address Strobe):行地址选通信号,用于选择行。
- CAS (Column Address Strobe):列地址选通信号,用于选择列。
- WE (Write Enable):写使能信号,用于标识读或写操作。
-
时钟信号:
- DDR4使用高频时钟信号来同步所有操作。所有的读写操作都是在时钟的上升沿或下降沿进行的。
示例
假设我们要从DDR4中读取地址0x000A
的数据,步骤如下:
- 发送命令:内存控制器发出读命令。
- 发送行地址:行地址
0x0000
(假设行在第0行)。 - 行激活:DDR4激活第0行(RAS高)。
- 发送列地址:列地址
0x000A
。 - 列激活:DDR4激活列
0x000A
(CAS高)。 - 读取数据:DDR4输出列
0x000A
中的数据,通过数据线传送给控制器。 - 结束操作:控制信号复位,准备下一次读写操作。
让我们通过一个具体的例子来说明DDR4内存的读写流程。我们将以一个简单的场景为例:读取和写入特定地址的数据。
示例背景
假设我们有一个DDR4内存模块,内存控制器想要进行以下操作:
- 读取地址
0x000A
的数据 - 写入数据
0x1234
到地址0x000B
假设该DDR4内存配置如下:
- 行地址:0(行地址的选择)
- 列地址:0x000A和0x000B(列地址的选择)
- 数据宽度:16位(即2字节)
1. 读取数据流程
操作步骤:
-
发送读取命令:
- 控制器向DDR4发送读命令。
-
发送行地址:
- 控制器发送行地址(假设为
0
)。 - 这时,行地址选择信号(RAS)被激活。
- 控制器发送行地址(假设为
-
行激活:
- DDR4激活第0行,准备读取数据。
-
发送列地址:
- 控制器发送列地址
0x000A
。 - 这时,列地址选择信号(CAS)被激活。
- 控制器发送列地址
-
数据读取:
- DDR4从激活的行中列
0x000A
读取数据。 - 读取的数据通过数据线输出。
- DDR4从激活的行中列
-
完成操作:
- 控制信号复位,准备下一次操作。
数据输出:
假设在地址0x000A
中的数据为0xABCD
,这时控制器会接收到该数据。
2. 写入数据流程
操作步骤:
-
发送写入命令:
- 控制器向DDR4发送写命令。
-
发送行地址:
- 控制器发送行地址(仍然为
0
)。 - 这时,行地址选择信号(RAS)被激活。
- 控制器发送行地址(仍然为
-
行激活:
- DDR4激活第0行,准备写入数据。
-
发送列地址:
- 控制器发送列地址
0x000B
。 - 这时,列地址选择信号(CAS)被激活。
- 控制器发送列地址
-
发送数据:
- 控制器通过数据线发送要写入的数据
0x1234
。 - DDR4在时钟的上升沿接收该数据并写入到激活的行和列中。
- 控制器通过数据线发送要写入的数据
-
完成操作:
- 控制信号复位,准备下一次操作。
3. 数据存储情况
-
读取数据:
- 从地址
0x000A
读取的数据为0xABCD
。
- 从地址
-
写入数据:
- 地址
0x000B
中的数据现在变为0x1234
。
- 地址
总结
通过这个具体的例子,我们展示了DDR4内存的读写流程,包括发送命令、地址选择、数据传输等步骤。这种流程使得DDR4能够快速、有效地读取和写入数据。