DDR3基本概念 - Write leveling(写入均衡)

本文详细介绍了DDR3中Write Leveling技术的工作原理及其在不同布线方式下的应用。包括如何通过调整DQS信号相对于CLK信号的位置实现信号完整性优化,以及在fly-by布线结构中的必要性和具体实施步骤。

原文链接:https://blog.youkuaiyun.com/tbzj_2000/article/details/88304245

为了提供更好的信号完整性,DDR3的memory controller可以使用write leveling来调整DQS差分对和CK差分对的相对位置,利用DQS差分对路径上的可调整延时来达成该目的。

对于简单的运用,比如on-board DDR memory,并且仅有一颗DDR内存的情况下可以考虑不需要做write leveling。

T型布线,如下图。该布线方式同步切换噪声(Simultaneous Switching Noise) 较大。
在这里插入图片描述
所谓的fly-by 布线,指地址、命令和时钟的布线依次经过每一颗DDR memory芯片(即每一颗芯片共用了这些信号,在Lattice DDR SDRAM controller IP配置时,则ClockWidth要求设置为1)。而dq和dqs作了点到点的连接。因此,dq dqs 到每一个DDR颗粒与clk不等长。VTT表示这些信号都接了ODT端接电阻。fly-by 结构相对于T布线,有助于降低同步切换噪声(Simultaneous Switching Noise)。
在这里插入图片描述
在这里插入图片描述
Write Leveling的功能是调整DRAM颗粒端DQS信号和CLK信号边沿对齐;调节过程描述:DDR控制器不停地调整DQS信号相对于CLK的延迟,DRAM芯片在每个DQS上升沿采样CLK管脚上的时钟信号,如果采样值一直低,则会将所有的DQ[n]保持为低电平来告知DDR控制器,tDQSS(DQS, DQS# rising edge to CK, CK# rising edge,在标准中要求为+/-0.25 tCK。tCK为CLK时钟周期)相位关系还未满足,如果发现在某个DQS上升沿,采样到此时的CLK电平发现了迁越(由之前的低跳变为高),则认为此时DQS和CLK已经满足tDQSS,同时通过DQ[n]向DDR控制器发送一个高,表征一个写均衡成功,同时DDR控制器会锁住这个相位差。这样,在每个DRAM端,看到的CLK和DQS信号都是边沿对齐的。
在这里插入图片描述
参考DDR3标准的写入均衡的4.8.2 procedure description一节和上图,写入均衡的修调过程:

t1:将ODT拉起,使能on die termination;
t2:等待tWLDQSEN时间后(保证DQS管脚上的ODT已设置好),DDR控制器将DQS置起;DDR memory在DQS上升沿采样CK信号,发现CK=0,则DQ保持为0。
t3:DDR控制器将DQS置起;DDR memory在DQS上升沿采样CK信号,发现CK=0,则DQ仍然保持为0。
t4:DDR控制器将DQS置起;DDR memory在DQS上升沿采样CK信号,发现CK=1,则等待一段时间后,DDR memory将dq信号置起。

采取以上策略的原因:对于DDR controller来说,其无法测定clk边沿和dqs边沿的绝对位置,故采用了不断调整dqs delay,在dqs上升沿判断clk从0到1或1到0的一个变化,一旦检测到变化,则写入均衡停止。

DDR3标准的Figure 17 write leveling concept图不太好理解,以下进行说明。

从1中的两个信号diff_DQS和DQ,可以看到 diff_DQS的上升沿采到的CK值都是0;
将diff_DQS加延时,直到如2 中所示diff_DQS的上升沿采到的CK值都是1,进而DQ输出从0到1,完成写入均衡(write leveling)。
注意:在DDR3的标准文档中,在同一个时序图中经常性看到有多个相同信号名,但波形不同的情况,需要结合上下文分析波形。
在这里插入图片描述
布线要求:
只有使用了fly-by的情况下需使能write leveling
CPU内部的内存控制器只能对DQS信号做延迟,不能做超前处理,所以CK要大于DQS信号线的长度,否则将不能满足tDQSS

实战说明:
对于Lattice VIP board,两块DDR芯片的布线使用了fly-by布线,故需使能Write leveling。即在Clarity designer的DDR3 SRAM controller的配置窗口的Type页面,将Write leveling钩选上。
将MR1寄存器的A7设置为1进入write leveling模式,然后在检测到DQ上有0到1的跳变后,说明已结束,则设置A7为0退出该模式。

### DDR中DQS和DQ信号的对齐方法 在DDR内存架构中,DQS(Data Strobe)信号用于同步数据传输。对于读操作和写操作,DQS与DQ之间的对齐方式存在差异,这是为了优化性能并满足特定的操作需求。 #### 1. **读操作中的DQS与DQ对齐** 在读取过程中,DQS信号的边沿与时序上的DQ信号边沿是对齐的[^2]。这意味着当存储器发送数据到控制器时,DQS作为源同步时钟,其上升沿和下降沿分别指示数据的有效窗口。这种设计允许接收方能够精确捕获来自存储器的数据位流。 #### 2. **写操作中的DQS与DQ对齐** 相比之下,在写入期间,DQS信号被调整至位于DQ信号中间的位置。即DQS的边沿处于DQ比特序列的时间中心点附近。这样的安排有助于补偿可能存在的传播延迟以及提高系统的稳定性,因为控制器可以更早地预知即将到达的数据边缘位置从而做好准备接受这些信息。 #### 3. **实现对齐的技术手段** - **Write leveling (写电平校正)** 写电平校正是LPDDR系列的一项关键技术,它通过训练算法找到最佳时刻使DQS能准确地位于所要写的DQ数据中央[^4]。此过程涉及多次尝试直到达到最理想的相位关系为止。 - **Read training (读训练)** 类似地,也有针对读路径进行专门调优的过程称为读训练。这一步骤旨在确保每次从DRAM芯片获取的信息都能可靠无误地被捕获下来。 以下是简化版Python伪代码展示如何模拟基本形式下的write-leveling逻辑: ```python def write_leveling(dq_signal, dqs_signal): optimal_delay = None min_error = float(&#39;inf&#39;) for delay in range(max_possible_delays): # 假设最大延迟能量级已定义好 adjusted_dqs = adjust_timing(dqs_signal, delay) error_count = calculate_alignment_errors(adjusted_dqs, dq_signal) if error_count < min_error: min_error = error_count optimal_delay = delay return apply_optimal_delay(optimal_delay) def adjust_timing(signal, delay): """ 调整输入信号的时间偏移 """ pass def calculate_alignment_errors(dqs, dq): """ 计算当前配置下dqs相对于dq产生的误差数量 """ pass def apply_optimal_delay(delay_value): """ 应用计算得出的最佳时间延迟设置 """ pass ``` 上述函数`write_leveling()`展示了寻找最优DQS-DQ相对定时的方法之一;实际硬件实现会更加复杂且依赖具体物理层特性。 --- ### 结论 综上所述,无论是采用何种具体的机制来达成目标—比如前述提到的各种training techniques或者其它高级策略—最终目的均是为了保证无论是在哪种工作模式之下都能够维持良好的电气特性和功能表现,进而提升整个系统的整体效能[^1].
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值