通过深入了解DDR3内存的运行全流程,我们可以更好地理解实际使用中DDR是如何工作的,并为理解DDR4/DDR5等更复杂的内存使用提供参考。
下面是DDR3运行过程的可能的状态转换:
可以把这整个流程分成:初始化,动态配置更新,刷新和自刷新,读写数据这几个部分。
DDR3 SDRAM 初始化
DDR3 SDRAM从上电到进入空闲状态的过程中,经历了一系列初始化步骤,包括上电、复位、初始化、ZQ校准和空闲状态。
Power On -> Reset Procedure -> Initialization -> ZQCL -> Idle
1). 上电(Power On)
DDR3 SDRAM芯片上电后,需要一段时间让电源电压稳定,确保所有内部电路都处于正常工作状态。
这一阶段通常需要几百微秒到几毫秒的时间。
操作:
电源电压逐渐上升至稳定状态,确保所有内部电路都处于正常工作状态。
内存控制器监控电源电压,确保电压达到规定的稳定值。
2). 复位(Reset Procedure)
复位过程用于将DDR3 SDRAM芯片恢复到已知的初始状态,确保所有内部寄存器和状态机都处于默认状态。
这一阶段通常需要几百纳秒到几微秒的时间。
操作:
内存控制器发送复位命令(Reset Command)。
内存芯片接收到复位命令后,内部状态机重置,所有寄存器和配置回到默认状态。
3). 初始化(Initialization)
初始化过程用于配置DDR3 SDRAM芯片的各种参数,使其准备好进行正常操作。
这一阶段包括预置操作、模式寄存器设置(MRS)等步骤。
预置操作(Precharge All):将所有内存行预置为未激活状态。
操作:内存控制器发送Precharge All命令,使所有内存行处于未激活状态。
模式寄存器设置(Mode Register Set, MRS)::配置DDR3 SDRAM的初始工作模式,包括时序参数、突发长度、自刷新周期等。
操作:内存控制器发送MRS命令,配置内存芯片的初始工作模式。
4). ZQ校准(ZQ Calibration, ZQCL)
ZQ校准用于确保DDR3 SDRAM芯片的输出驱动器阻抗与标准阻抗匹配,减少信号反射和噪声。
这一阶段包括ZQ校准长(ZQCL)和ZQ校准短(ZQCS)两种模式。
ZQ校准长(ZQCL):通过外部240Ω标准电阻进行阻抗匹配校准。
操作:内存控制器发送ZQCL命令,启动阻抗匹配校准过程。内存芯片通过外部240Ω标准电阻进行阻抗匹配,调整内部驱动器的阻抗。
ZQ校准短(ZQCS):用于快速重新校准阻抗匹配。
操作:内存控制器发送ZQCS命令,启动快速阻抗匹配校准过程。
5). 空闲状态(Idle)
空闲状态是指DDR3 SDRAM芯片在完成初始化和校准后,等待接收新的命令或进行数据传输的状态。
在空闲状态下,内存芯片可以进行自刷新操作,以保持数据的完整性。
动态配置更新
DDR3 SDRAM从空闲状态(IDLE)到模式寄存器设置(MRS)、内存保护寄存器(MPR)、写入对齐(Write Leveling)再到空闲状态(IDLE)的全流程。
IDLE->MRS、MPR、Write Leveling->IDLE
1). 模式寄存器设置(MRS):
模式寄存器设置(Mode Register Set, MRS)用于配置DDR3 SDRAM的初始工作模式,包括时序参数、突发长度、自刷新周期等。
这一步骤通常在初始化过程中多次执行,以配置不同的模式寄存器。
具体步骤:
设置基本模式寄存器(MR0):配置基本的工作模式,如突发长度、CAS延迟等。
设置扩展模式寄存器(MR1):配置高级的工作模式,如温度补偿自刷新、动态刷新等。
设置其他模式寄存器(MR2, MR3):配置更高级的功能,如写入恢复时间、片内终结等。
2). 内存保护寄存器(MPR)
内存保护寄存器(Memory Protection Register, MPR)用于配置DDR3 SDRAM的内存保护功能,如错误检测和纠正(ECC)等。
这一步骤通常在初始化过程中执行,以确保数据的完整性和安全性。
具体步骤:
配置MPR:配置内存保护功能,如ECC。
3). 写入校准(Write Leveling)
写入校准(Write Leveling)是一种时序校准技术,用于优化写入操作的时序。通过动态调整DQS(数据选通信号)的延迟,确保DQS信号和CK(时钟信号)的边沿在DRAM引脚处精确对齐,从而减少时序偏差,提高系统的可靠性和性能。
具体步骤:
内存控制器验证校准结果,确保DQS信号和CK信号的边沿精确对齐。
调整后的延迟值被存储在内存芯片的寄存器中。
内存芯片内部的校准电路通过比较训练模式数据的到达时间和预期时间,调整DQS信号的延迟。
内存控制器发送训练模式数据,用于校准DQS信号的延迟。
内存控制器发送MRS命令,启动Write Leveling校准过程。
启动Write Leveling校准:
发送训练模式数据:
调整DQS信号的延迟:
存储校准结果:
验证校准结果:
4). 返回空闲状态(IDLE)
在完成MRS、MPR和Write Leveling校准后,内存控制器使内存芯片返回空闲状态,等待新的命令或进行数据传输。
3.刷新和自刷新
刷新命令(Refresh Command)和自刷新操作(Self-Refresh Operation)是两种不同的机制,用于确保存储器中的数据保持完整性和可靠性。
IDLE->Refreshing->IDLE
IDLE->Self Refreshing->IDLE
1). Refresh
刷新命令(Refresh Command)是DDR3 SDRAM在正常操作期间用于维持数据完整性的一种机制。由于DRAM的特性,它需要定期刷新以保持数据不丢失。刷新命令是非持久性的,意味着每次刷新都需要显式地发出。在刷新周期中,所有Bank必须处于预充电状态,并且必须满足最小预充电时间tRP(min)。刷新周期的平均周期间隔为tREFI。
特点:
需要定期发出,以保持数据不丢失。
刷新周期由内部刷新控制器控制,不需要外部地址控制。
刷新命令的延迟(tRFC(min))必须在下一次有效命令之前满足。
2). Self-Refresh
自刷新操作(Self-Refresh Operation)是一种特殊的刷新模式,允许DDR3 SDRAM在没有外部时钟信号的情况下保持数据。在这种模式下,DRAM内部的定时器负责刷新操作,这在系统其他部分需要关闭电源时非常有用。
特点:
允许在没有外部时钟信号的情况下刷新内存。
进入自刷新模式需要通过特定的命令序列,包括预充电所有Bank、设置自刷新命令(SRE)等。
退出自刷新模式也需要特定的命令序列,并且可能需要等待一段时间以确保内部刷新完成。
在自刷新模式下,除了CKE和RESET#之外的所有外部控制信号都是“不要关心”的状态。
3). 两种刷新对比
应用场景: Refresh Command适用于DDR3 SDRAM的正常操作期间,而Self-Refresh Operation适用于系统需要关闭电源或其他部分需要暂停时。
控制方式: Refresh Command需要外部系统定期发出,而Self-Refresh Operation由DRAM内部定时器控制。
电源需求: Refresh Command需要外部时钟信号,而Self-Refresh Operation可以在没有外部时钟信号的情况下进行。
复杂性: Refresh Command相对简单,只需定期发出即可;Self-Refresh Operation则涉及更复杂的命令序列和状态管理。
在实际应用中,选择使用Refresh Command还是Self-Refresh Operation取决于具体的应用场景和电源管理需求。例如,在需要低功耗模式的便携设备中,Self-Refresh Operation可能更为合适,因为它允许系统在不完全关闭的情况下减少功耗。而在高性能计算应用中,可能更倾向于使用Refresh Command以确保数据的实时刷新。
读数据
在进入IDLE状态后,就可以进行读写操作了。
IDLE->ACT->READ/READA->Precharge
1). 基本读操作过程
激活命令(ACTIVE Command):
首先,需要通过ACTIVE命令激活目标Bank,这涉及到提供BA(Bank Address)和ROW地址。
激活命令将选定的Bank和ROW置于活动状态,以便进行后续的读或写操作。
读命令(READ Command):
在Bank激活后,通过READ命令指定要读取的列(COLUMN)地址。
读命令将数据从指定的ROW和COLUMN中读出,并准备通过DQ(数据)引脚输出。
数据输出:
读取的数据通过DQ引脚输出,并由DQS(数据 strobe)信号进行同步。
数据输出遵循特定的时序,包括读 preamble、数据保持时间和postamble。
预充电命令(PRECHARGE Command):
读操作完成后,需要通过PRECHARGE命令关闭当前的Bank,以便进行下一次操作。
预充电命令确保所有数据传输完成,并准备Bank进入下一次激活状态。
2). 不同情况下的读操作
实际情况中,读开始的时候DDR很大可能不是处于IDLE状态,那么就需要等待其他操作处理完成,才能进行读操作,这也会影响读的延时。
正在进行Refresh时的读操作:
如果在Refresh操作期间接收到READ命令,必须等待当前的Refresh周期完成。
一旦Refresh周期完成,才能执行READ命令,这可能会增加读操作的延迟。
同一个Bank的连续读操作:
如果连续读取同一个Bank中的数据,可以省略重复的激活步骤,直接使用READ命令。
这种情况下,可以利用自动预充电功能(Auto Precharge),在读取一个数据块后自动预充电Bank。
不同Bank之间切换的读操作:
当需要从一个Bank切换到另一个Bank进行读操作时,必须先预充电当前Bank,然后激活目标Bank。
这种情况下,需要确保满足Bank间切换所需的最小时间间隔,如tRAS(Active to Precharge Delay)。
突发长度(Burst Length)和突发类型(Burst Type):
读操作可以配置不同的突发长度(如BL4, BL8)和突发类型(如Sequential, Interleave)。
突发长度和类型的选择会影响数据的读取顺序和性能。
读操作中的写操作:
在读操作期间,如果需要写入数据,必须等待当前的读操作完成。
写操作可能需要等待特定的写入恢复时间(tWR),以确保数据的完整性。
读操作中的命令冲突:
如果在读操作期间接收到其他命令(如REFRESH, PRECHARGE),必须根据命令优先级和时序要求进行处理。
例如,REFRESH命令通常具有最高优先级,必须立即执行。
写操作
进入IDLE状态后就可以进行写操作了。
IDLE->ACT->WRITE/WRITEA->Precharge
1). 基本写操作过程
激活命令(ACTIVE Command):
首先,需要通过ACTIVE命令激活目标Bank,这涉及到提供BA(Bank Address)和ROW地址。
激活命令将选定的Bank和ROW置于活动状态,以便进行后续的写操作。
写命令(WRITE Command):
在Bank激活后,通过WRITE命令指定要写入的列(COLUMN)地址,并提供要写入的数据。
写命令将数据写入到指定的ROW和COLUMN中。
数据输入:
要写入的数据通过DQ引脚输入,并由DQS(数据 strobe)信号进行同步。
数据输入遵循特定的时序,包括写 preamble、数据保持时间和postamble。
预充电命令(PRECHARGE Command):
写操作完成后,需要通过PRECHARGE命令关闭当前的Bank,以便进行下一次操作。
预充电命令确保所有数据传输完成,并准备Bank进入下一次激活状态。
2). 不同情况下的写操作
同样,实际情况中,写开始的时候DDR很大可能不是处于IDLE状态,那么就需要等待其他操作处理完成,才能进行写操作,这也会影响写的延时。
正在进行Refresh时的写操作:
如果在Refresh操作期间接收到WRITE命令,必须等待当前的Refresh周期完成。
一旦Refresh周期完成,才能执行WRITE命令,这可能会增加写操作的延迟。
同一个Bank的连续写操作:
如果连续写入同一个Bank中的数据,可以省略重复的激活步骤,直接使用WRITE命令。
这种情况下,可以利用自动预充电功能(Auto Precharge),在写入一个数据块后自动预充电Bank。
不同Bank之间切换的写操作:
当需要从一个Bank切换到另一个Bank进行写操作时,必须先预充电当前Bank,然后激活目标Bank。
这种情况下,需要确保满足Bank间切换所需的最小时间间隔,如tRAS(Active to Precharge Delay)。
突发长度(Burst Length)和突发类型(Burst Type):
写操作可以配置不同的突发长度(如BL4, BL8)和突发类型(如Sequential, Interleave)。
突发长度和类型的选择会影响数据的写入顺序和性能。
写操作中的读操作:
在写操作期间,如果需要读取数据,必须等待当前的写操作完成。
读操作可能需要等待特定的读取恢复时间,以确保数据的完整性。
写操作中的命令冲突:
如果在写操作期间接收到其他命令(如REFRESH, PRECHARGE),必须根据命令优先级和时序要求进行处理。
例如,REFRESH命令通常具有最高优先级,必须立即执行。
初始化、配置、刷新机制、数据传输这些就是DDR3的基本操作和所有使用DDR3的可能都操作。其他复杂的情况只是这些基本操作都组合。至于DDR4/DDR5甚至LPDDR4/5这些DDR,其操作也基本类似。所以先理解DDR3的基本操作,可以更容易理解以后复杂的操作和场景。
——————————————————————————————————————————
版权声明:
本文作者:烓围玮未。主要从事ISP/MIPI/SOC/车规芯片设计/SOC架构设计
知乎专栏:芯片设计进阶之路
微信公众号:芯片设计进阶之路(x_chip)
转发必须授权,同时保留这段声明,盗版必究!
*免责声明:本文由作者原创。文章内容系作者个人观点,路科验证转载仅为了传达一种不同的观点,不代表路科验证对该观点赞同或支持,如果有任何异议,欢迎联系路科验证。
——————————————————————————————————————————
微信公众号:芯片设计进阶之路 x_chip
——————————————————————————————
参考文献
JESD79-3D