读/写时序流程图归纳总结
读和写是LPDDR4最核心的两个操作。说白了,整个接口时序就是围着这两个操作转。我这些年处理过的故障,十有八九都跟读写的时序流程没走对有关。
你想想看,一个读命令发出去,芯片什么时候把数据返回来?一个写命令带着数据发出去,DQS和DQ该对齐成什么样?这些一旦乱了,系统就崩了。
这节我就把读和写的完整时序流程拆开揉碎,做成两个流程图给你看。顺便把我踩过的坑也捎上。
读操作完整流程图
一个读操作从控制器发起命令开始,到最后一个数据被接收结束。我把它分成四个步骤:
- 命令发送 - 控制器在CK时钟上升沿输出READ命令和Bank地址
- 等待延迟 - 经过RL(Read Latency)个时钟周期,数据才准备就绪
- 数据输出 - DRAM在PCLK(DQS)上升/下降沿同时输出所有burst数据
- 数据接收 - 控制器用DQS采样DQ,完成数据传输
关键时间参数:
tRCD(行地址到列地址延迟) + tCAS(列地址选通延迟) = 读延迟RL
这段等待时间在LPDDR4里通常是8-16个CK周期,视速率等级而定。
在我参与的一个平板项目中,发现读数据总是错位。抓眼一看,是RL计算时误把tRCD加上去了两次。嗯,这种低级错误其实排查起来最费时间。
写操作完整流程图
写操作比读操作多了一个步骤——数据前置。为什么?因为数据需要和命令同步到达DRAM内部。
- 命令发送 - 控制器发出WRITE命令和目标地址
- 数据前置 - 控制器在命令发出后的WL(Write Latency)个时钟后,开始发送数据
- DQ/DQS对齐 - DQS必须比DQ提前一个tDQSS(一个CK周期的±25%)翻转
- 数据写入 - DRAM利用DQS的沿采样DQ,将数据写入存储单元
我的一个小习惯:
写操作调试时,我会优先看DQS和DQ的时序关系。很多问题不是电平不对,是相对相位错了。
读/写时序核心参数对比
下面这张表是我自己整理的。每次排查时序问题时都拿来对照,非常实用。
| 参数 | 读操作 | 写操作 |
|---|---|---|
| 延迟命名 | RL(Read Latency) | WL(Write Latency) |
| 延迟起点 | READ命令发出时刻 | WRITE命令发出时刻 |
| 数据方向 | DRAM → 控制器 | 控制器 → DRAM |
| DQS功能 | 由DRAM驱动,与数据边沿对齐 | 由控制器驱动,与数据中心对齐 |
| 数据收/发窗口 | 控制器需要接收窗口 | 控制器需要发送窗口 |
| 常见故障 | 数据采样延迟、DQS门控不准 | 写均衡失效、DQS占空比漂移 |
读操作与写操作的本质区别
我花了好几年才真正弄明白一件事——读和写并不是简单的对称关系。它们的区别体现在三个核心点上:
- 数据方向不同:读数据是被DRAM推出来的,写数据是被控制器拉进去的。推和拉对驱动能力的要求完全不同。
- DQS对齐方式不同:读的时候DQS和DQ边沿对齐(边沿对齐),写的时候DQS和DQ中心对齐(中心对齐)。你想想看,采样需要的是中心对齐,所以读数据时控制器还得做个相位调整。
- 延迟定义不同:读延迟RL是固定的芯片描述参数,写延迟WL必须做写均衡(Write Leveling)训练才能确定。这个训练过程我吃过不少苦头。
我曾经踩过的坑:
第一次做LPDDR4设计时,想当然地把读操作的DQS门控(DQS gating)直接用在写操作上。结果写数据一直出错。查了两天才发现——读DQS是DRAM发出的,写DQS是控制器发出的,两个信号的相位参考完全不同,门控窗口必须分开设置。
时序流程图(核心知识结构)
我把刚才讲的读/写流程、延迟参数和数据流向画成了一张图。你照着这个图去对板子上的波形,效率能翻倍。
实际排查时我怎么做
光看流程图还不行,你得知道怎么用。我一般按这四个步骤排查读写时序故障:
- 先确认命令发送正确 - 用示波器抓CK和CA信号,确认控制器发送了正确的READ/WRITE命令。我就碰到过地址连线短路导致命令对不上的情况。
- 再验证延迟计算 - 对照DRAM的数据手册,确认RL和WL配置正确。一个字节不对,整个延迟链就偏了。
- 然后检查DQS/DQ对齐 - 这个最要命。读要看DQS与DQ的边沿关系,写要看DQS与DQ的中心关系。差半个周期数据就全废了。
- 最后做完整性测试 - 来回读写同一块地址,比对数据。走通了不代表没问题,多跑几轮才能发现隐藏的时序裕量不足。
核心结论:
读/写时序故障十有八九出在延迟计算错误和DQS相位关系上。把这四个步骤走一遍,80%的问题都能定位到根因。