news 2026/5/1 10:44:30

DDR4基础扫盲

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DDR4基础扫盲

Write Leveling(写均衡)

为了解决高速数据传输时时钟和数据信号不同步的问题,确保数据能被准确采样。它的核心原理是PHY通过动态调整数据选通信号(DQS)的相位,使其与时钟信号(CK)的上升沿对齐,从而满足严格的时序要求。

原因:

DDR4 采用 Fly-by 拓扑结构,时钟信号依次经过各 DRAM 颗粒,导致不同颗粒接收时钟的时间不同,而数据信号(DQS)的传输路径与时钟路径长度不一致,造成相位差。

高速率下的时序容限紧缩‌,DDR4 的 tDQSS 规范要求 DQS 上升沿与 CK 上升沿的偏差极小(如 DDR4-3200 中需 ≤156ps),而 Fly-by 布线导致的延迟差可能达数百 ps,远超时序容限,必须动态校准。

系统稳定性需求‌,未校准的 CK/DQS 偏斜会导致数据采样窗口偏移、写入时序违例,甚至高温/电压波动下系统崩溃风险增加。

原理

DRAM 在 DQS 上升沿采样 CK 引脚电平,DQS 上升沿已对齐 CK 上升沿DQ 反馈从“0”→“1”跳变。

关键硬件支持

DQS 延迟单元‌:PHY 层集成可调延迟线(步进精度达 ps 级),动态调整 DQS 输出相位。

ODT 特殊配置‌:WL 期间仅使能 DQS 的 ODT,DQ ODT 关闭,确保反馈信号纯净。

操作流程

通过配置 MR1 寄存器的 A7 bit 为 1 进入 Write Leveling 模式,拉低该位可退出。

PRECHARGE

用于关闭当前工作行,为访问新行做准备‌,是内存高效运行的基础操作。

触发条件

解决行独占性冲突,访问新行前,必须通过PRECHARGE关闭当前行并复位存储单元电压。

显式命令‌:通过专用Precharge指令(A10高电平选择所有Bank,低电平指定单个Bank)。

隐式自动‌:读写命令中置位A10引脚,操作后自动触发预充电(Auto-Precharge)。

流程

关闭工作行‌:断开当前行Word Line电压,隔离存储电容与位线(Bit Line)。

位线预充电‌:所有Bit Line连接1/2 Vcc参考电压源,充放电至中间电平(典型值0.75V@1.5V DRAM)。

电压稳定‌:断开Bit Line与参考源,形成等效电容网络。

感应放大器复位‌:释放Sense Amplifier(S-AMP)的比较结果,为下次行激活准备差分电路。

关键时序参数

tRP(预充电时间)‌:PRECHARGE命令发出后,需等待tRP才能再次对该Bank发出激活命令。

tWTR(写恢复时间)‌:在发出PRECHARGE命令前,需满足tWTR等时序要求。

应用场景

读写操作后切换行时‌:在LPDDR4内存中,每次进行读写操作后,如果需要对同一存储体(Bank)的另一行进行寻址,就需要先发送PRECHARGE命令来关闭当前有效(工作)的行。

刷新操作前‌:在刷新操作之前需要将所有bank全部关闭,也就是在刷新之前需要发一个precharge同时将A10拉高,此时的precharge操作是进行将所有bank关闭的操作。

ACT命令‌:在读写命令之前,必须发送ACTIVATE命令来激活行地址。

PRECHARGE与ACT的协同‌:激活存储体(并且操作完成)后,必须对它进行预充电,然后才能将另一个ACTIVATE命令应用于相同的存储体。

总结

PRECHARGE命令通过关闭当前行、复位存储单元电压和释放S-AMP,为访问新行做好准备,是DDR4内存高效运行的基础操作。其触发方式包括显式命令和隐式自动,关键时序参数为tRP和tWTR,与ACT命令协同工作,确保内存操作的稳定性和效率。

ACTIVATE

打开指定行,为读写操作做准备。通过选择Bank和行地址,激活目标行,使数据可被访问‌。

两阶段命令‌:由Activate-1和Activate-2两个连续命令组成。

Activate-1‌:在时钟第一个上升沿,CS=HIGH、CA0=HIGH、CA1=LOW。

Activate-2‌:在时钟第一个上升沿,CS=HIGH、CA0=HIGH、CA1=HIGH。

地址选择‌:

Bank地址(BA[2:0])‌:选择目标Bank。

行地址(R[15:0])‌:确定Bank中要激活的行。

关键时序参数

tRCD‌:ACTIVATE命令后,需等待tRCD才能发送READ/WRITE命令。Row Column Delay,dram->sap

tRAS‌:从ACTIVATE到PRECHARGE的最小间隔。Row access strobe sap->dram

tRC‌:同一Bank两次ACTIVATE命令的最小间隔。Row Cycle time= tRAS+ tRP

tRRD‌:不同Bank两次ACTIVATE命令的最小间隔。Row access to Row access

tFAW‌:四激活窗口,限制每tFAW窗口内最多发4个ACTIVATE命令。

流程

发送命令‌:通过两阶段命令选择Bank和行。

行激活‌:打开目标行,使数据可被访问。

等待tRCD‌:确保行稳定后,再发READ/WRITE命令。

预充电‌:操作完成后,需发PRECHARGE命令关闭行。

READ

从内存中读取数据,其执行过程涉及‌激活、预充电、读时序‌等多个阶段,并受‌CL、tRPRE、tRPST‌等关键参数影响。

基本流程

激活阶段(ACT)‌:通过ACT命令打开目标Bank的某一行,为后续读写做准备。

相关参数:tRRD_S(不同Bank Group的ACT间隔)、tRRD_L(同一Bank Group的ACT间隔)、tFAW(四激活窗口)。

预充电阶段(PRE)‌:在访问新行前,需关闭当前行以释放资源。

可通过RDA(读后自动预充电)命令简化操作。

读时序阶段

tLZ(DQS/DQ)‌:DQS/DQ信号保持Low的时间。

tHZ(DQS/DQ)‌:DQS/DQ信号结束翻转的时间。

tRPRE‌:DQS前导时间段,用于稳定信号。

tRPST‌:DQS后导时间段,用于结束翻转。

CL(CAS Latency)‌:从读命令发出到数据输出的时钟周期数,直接影响性能。

tWTR_S‌:从写入切换到读取的时序,影响不同Bank间的操作效率。

WRITE

主要涉及‌写前导、突发传输、写延迟和写均衡‌这几个核心机制,目的是确保数据能准确、高效地写入内存。

1. 写前导(Write Preamble)

写前导是写操作前的准备阶段,用于对齐DQS(数据选通信号)和CK(时钟信号)的时序。DDR4支持1tCK或2tCK的前导模式,选择哪种取决于系统对时序精度的要求。

2. 突发传输(Burst Transfer)

DDR4支持两种突发长度模式:

BL8(Burst Length 8)‌:一次传输8个数据。

BC4(Burst Cut 4)‌:一次传输4个数据,适用于需要更细粒度控制的场景。

3. 写延迟(Write Latency, WL)

写延迟是写命令发出后,数据开始传输的等待时间,计算公式为:

WL=AL+CWL

AL(Additive Latency)‌:附加延迟,通常为0。

CWL(CAS Write Latency)‌:CAS写延迟,是写操作的关键时序参数。

4. 写均衡(Write Leveling)

写均衡用于补偿DDR4的Fly-by拓扑结构带来的信号偏移,确保DQS和CK的上升沿对齐。控制器通过调整DQS的延迟,直到检测到DQ总线上出现0到1的跳变,从而满足tDQSS等时序要求。

5. 其他关键机制

DM(Data Mask)‌:用于屏蔽不需要写入的数据位,提高写入效率。

tWTR_S/tWTR_L‌:写命令到读命令的切换时序,分别针对不同Bank Group和相同Bank Group。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:15:54

多种类型Agent 工具调用机制讲解

概述 工具调用是 Agent 与外部世界交互的核心机制。本教程将详细讲解整个工具调用的完整流程。一、什么是"工具"? 工具就是普通的 Python 函数,预先定义在 tools.py 中。 # tools/tools.pydef web_search(query: str, search_engine: str &qu…

作者头像 李华
网站建设 2026/5/1 5:50:31

3分钟让你的Windows桌面焕然一新:任务栏透明美化终极指南

3分钟让你的Windows桌面焕然一新:任务栏透明美化终极指南 【免费下载链接】TranslucentTB 项目地址: https://gitcode.com/gh_mirrors/tra/TranslucentTB 厌倦了千篇一律的Windows默认界面?想要一个既美观又实用的个性化桌面?今天就来…

作者头像 李华
网站建设 2026/4/30 20:38:49

Rust 编程语言教学目录

Rust 编程语言教学目录 第一部分:基础入门篇 (1-2周) 第1章:Rust 初体验 1.1 Rust 语言概述与设计哲学1.2 安装 Rust 工具链 rustup 安装与配置Cargo 包管理器介绍 1.3 第一个 Rust 程序 Hello World使用 Cargo 创建项目 1.4 开发环境配置 VS Code Rust…

作者头像 李华
网站建设 2026/5/1 9:55:22

Arduino IDE安装全过程:从驱动到端口检测的深度剖析

Arduino IDE安装全过程:从驱动到端口检测的深度剖析 你有没有遇到过这样的情况? 新买的Arduino板子插上电脑,打开Arduino IDE,却发现“工具 > 端口”菜单一片灰——不可选、不显示、甚至设备管理器里还挂着个“未知设备”。明…

作者头像 李华
网站建设 2026/5/1 8:37:44

智能助手如何让英雄联盟体验提升300%?

智能助手如何让英雄联盟体验提升300%? 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 您在英雄联盟中是否经历过…

作者头像 李华