一、DDR引脚功能介绍
信号类型 | 信号名称 | 描述 |
---|---|---|
数据总线 | DQ[7:0] | 8位数据总线,用于传输数据 |
地址总线 | A[12:0] | 13位地址总线,用于选择内存中的特定位置 |
Bank地址 | BA[1:0] | 2位Bank地址,用于在多Bank在内存架构中选择特定的内存Bank |
数据时钟同步 | DQS,/DQS | 用于同步数据传输 |
Command Bus 命令总线 | /CS | 片选信号 |
/RAS | 行地址选通信号 | |
/CAS | 列地址选通信号 | |
/WE | 写使能信号 | |
时钟使能 | CKE | 时钟使能信号,用于控制时钟的启用 |
数据屏蔽 | MASK | 数据屏蔽信号,用于屏蔽某些数据引脚 |
时钟信号 | CK,/CK | 差分时钟信号,所有控制和地址输入信号均在时钟信号CK的上升沿以及/CK的下降沿交汇时刻进行采样,另外,DQS、/DQS的参考点与CK和/CK的交叉点相对应 |
动态电阻调节 | ODT | 用于调节内存芯片内部的动态电阻,优化信号完整性和减少反射噪声,通产可配置为40Ω、60Ω、100Ω |
数据屏蔽 | DM | 数据屏蔽信号,用于屏蔽某些数据引脚以减少功耗或用于特定的内存操作 |
二、内部框图功能模块介绍
在分析DDR3的内部结构时,加入逻辑控制思维可以帮助我们更好地理解这些模块之间如何协同工作,尤其是在时间和状态上的调度控制。
2.1. 时序逻辑控制
时序逻辑控制的核心在于时钟信号,DDR3内存的操作依赖时钟同步,所以时钟信号对于控制各模块之间的协调工作至关重要。关键点包括:
- 双倍数据速率 (DDR):DDR3之所以称为“双倍数据速率”,是因为它在时钟信号的上升沿和下降沿都执行数据传输操作。这意味着时钟信号不仅仅控制操作的节奏,还决定了数据传输的瞬间时机。
- 多级流水线操作:在数据流入和流出存储阵列的过程中,DDR3内部的多个模块会以流水线的形式进行处理。例如:
- 地址信号被锁存后需要经历行地址解码、列地址解码、数据缓冲、再到最终的数据读取/写入。每一个步骤都在时钟周期内严格进行,以确保不会出现数据竞争或定时错误。
- FIFO、数据多路复用器、数据驱动器等模块通过控制时序,将数据流稳定且高效地传递至下一级。
- 延迟锁定环 (DLL) 和时钟校准:DLL负责调整时钟信号的相位,使得数据的采集和写入能够在精确的时间点进行。DLL的控制通过调整延迟来确保所有时序操作的同步性。对于逻辑控制而言,这是一个重要的校准机制,避免了高速传输中出现的时序偏差问题。
2.2 状态机控制
状态机控制涉及DDR3中的不同操作模式(如读、写、刷新等)的调度和管理。通过状态机来组织控制逻辑,DDR3能够有序地在不同状态之间切换,并正确执行命令。
- 命令解码:DDR3的命令接口接收来自控制器的命令(如读、写、刷新等)。每个命令会触发内部状态机的状态转移。例如,在读操作时,命令解码器识别到READ命令后,状态机会进入“读模式”。此时,行地址和列地址解码器会被激活,数据流从存储阵列中提取出来,传递给FIFO和读驱动器。在写操作时,命令解码器识别到WRITE命令后,状态机会进入“写模式”,将外部数据写入到指定的存储单元中。
- 刷新操作控制:DRAM(如DDR3)需要周期性刷新,防止存储单元中的电荷泄露导致数据丢失。刷新控制器通过时钟计数来定期触发刷新操作。刷新操作通常会与读写操作的调度进行协调,以避免发生冲突。当刷新请求到来时,状态机会进入刷新状态,暂停其他操作,执行对指定行的刷新操作。
- 突发模式控制 (Burst Mode):DDR3支持突发操作模式,即在单个时钟周期内传输多个连续的数据块。这是通过状态机控制的:状态机一旦进入突发模式,会持续对FIFO执行多次读写操作,直到传输完成。
- 在具体操作过程中,控制逻辑的主要任务是确保各个模块在适当的时间点执行正确的操作。以下是几个关键点:
- 命令与数据的同步:控制逻辑需要根据接收到的命令,触发相应的数据传输操作。不同的操作(如读、写、刷新)会有不同的逻辑路径,控制逻辑的任务是确保在命令解析后,各模块能够同步进行操作。
- Bank之间的并行操作:DDR3支持多Bank操作,控制逻辑可以调度不同Bank并行工作,提高效率。例如,在对Bank 0执行读操作的同时,控制逻辑可以安排对Bank 1执行写操作,最大化数据带宽。
- 数据的校验和纠错:部分高级DDR3内存支持ECC(错误纠正码)。控制逻辑会负责在数据传输过程中执行数据校验和纠错操作。这是一个附加的逻辑层,它会在数据传输链路中实时插入纠错码计算,并在数据错误时自动纠正。
- ODT(片上终端)控制:通过动态调整终端电阻,控制逻辑可以防止数据传输过程中的信号反射和干扰。这是通过开关和电阻网络动态调节的,需要精确的时序和状态控制。
三、DDR PCB设计
3.0 FPGA封装
8位芯片采用78球FBGA封装,而16位芯片则配备96球FBGA封装。
3.1 整体布局考量
在DDR布局时,CPU与DDR的距离应优先参考官方DEMO中的建议。如果板级结构允许,可以适当增加距离,但不能过远。如果无法满足前两者条件,则可以按常规经验,将距离设定为两个0402电阻的长度。同时,扇出规则应根据PINCH(引脚间距)大小来确定扇出孔的尺寸,布线则需按照PINCH大小调整走线宽度,并确保等长走线的间距符合3W原则,以减少信号串扰。
3.2 DDR T形拓扑
在传统的DDR2设计中,通常建议(如果不是必需的)对于地址线和控制线(具体取决于所使用的SDRAM数量)采用平衡T型拓扑。这样做是为了均衡每个SDRAM设备的信号延迟。然而,在DDR3的实现中,不再普遍采用平衡T线路拓扑,而是倾向于使用Fly-by拓扑,后者更适应于高性能SDRAM的需求。
3.3 DDR T形拓扑的局限性
在DDR2设计中,使用平衡T型线路拓扑的不足之处在于,它可能会导致不同程度的额外延迟,这是因为每个单独的网络包含了stub(短截线)。在地址和控制网络上增加多个负载会限制信号的带宽。此外,地址/控制网络与数据网络之间的偏斜也往往是带宽受限的一个因素。这种设计在处理高频信号时可能会遇到性能瓶颈。
3.4 Fly-by拓扑
DDR3的Fly-by拓扑为控制和地址信号的布局与路由带来了优势。在这种拓扑结构中,来自DSP DDR3控制器的每个信号依次从一个SDRAM路由至下一个SDRAM,从而消除了在DDR2设计中常见的stub(短截线)或多余迹线所引起的反射。
3.5 Fly-by拓扑的局限性
在DDR3设计中采用Fly-by拓扑的缺点是,从控制器到DDR3 SDRAM的信号会有诱导延迟。实际上,每个DDR3 SDRAM的延迟都是不同的。这种延迟差异通过读取和写入均衡来进行校正或补偿,以适应不同控制器到DRAM的长度差异。以下是设计时需要考虑的几个要点:
- 数据网络通常是点对点的,除非设计为双秩实现。
- 时钟网络是点到多点和端到端的(这与控制、命令或地址网络不同)。
- 控制网络是点到多点的,并且端接至VTT。
- 地址/命令网络也是点到多点的,并且端接至VTT
3.6 JEDEC拓扑
3.7 差分布局
- 为所有布线的时钟信号保持一个连续的接地基准,避免跨平面,以便为回流电流提供一条低阻抗的路径;
- 端接电阻靠近RTT应该靠近DDR3;
- 注意时钟信号的间距要求;
五、DDR长度匹配概述
5.1 时钟信号组
- CK/CK对必须以差分方式布线。
- 所有时钟对需要100欧姆(±5%)的差分阻抗。
- 每个CK/CK对作为单独的路由组进行管理。
- 每个CK/CK对必须顺序路由到同一排名下的所有SDRAM。
- 所有时钟飞线组的网络必须沿着从控制器到每个SDRAM的相同路径顺序路由,然后到交流VTT终端。
- 所有时钟对必须从控制器到每个SDRAM单独进行±1mil的长度匹配。
- 每个长度匹配段中的时钟飞线组的所有网络必须具有相同数量的通孔。
- 时钟对分支必须小于40mil,并且在±1mil内进行长度匹配。
- 所有时钟对网络必须紧邻坚实的地平面布线。
5.2 数据组
- 数据选通(DQS)对需要100欧姆(±5%)的差分阻抗。
- DQS与/DQS对必须以差分方式布线。
- 点对点布线需要50欧姆(±5%)的单端阻抗。
- 每个数据组内的所有网络必须具有相同数量的通孔,最多两个。每个字节组内每个信号的数量必须匹配。
- 同一字节道组内的所有网络应该在同一层布线,以消除通孔带来的长度偏斜。
- 所有数据组网络必须紧邻坚实的地平面布线。
- 数据选通对必须在彼此之间进行±1mils的长度匹配。
- 同一数据组内的所有网络必须进行±10mils的长度匹配。
- 字节道内的数据位可以交换以简化布线。
- 数据组网络是点对点布线,没有VTT终端。
5.3 地址和命令信号组
- 需要50欧姆(±5%)的单端阻抗。
- 所有地址和命令线路必须按照相同的路径顺序从控制器路由到每个SDRAM,然后延伸至VTT终端。
- 所有地址和命令线路必须从控制器到每个SDRAM单独进行长度匹配,且在时钟信号的±20mil范围内。
- 每个长度匹配段中的地址和命令线路必须具有相同数量的通孔。
- 地址线路不得交换以简化布线。
- 地址和命令线路的分支长度必须小于80mil,并且在±10mil范围内进行长度匹配。
- 所有地址和命令线路必须紧邻坚实的地平面或坚实的DVDD15电源平面进行布线,并配备适当的分布式去耦,以提供高频信号返回路径。
- 所有地址和命令线路应尽可能在接近板中心或上层的布线层上布线,以最小化通孔偏斜。
5.4 控制信号组
- 需要50欧姆(±5%)的单端阻抗。
- 所有控制线路必须按照相同的路径顺序从控制器路由到每个SDRAM,然后延伸至VTT终端。
- 所有控制线路必须从控制器到每个SDRAM单独进行长度匹配,且在时钟信号的±20毫英寸范围内。
- 每个长度匹配段中的控制线路必须具有相同数量的通孔。
- 控制线路的分支长度必须小于80毫英寸,并且在±10毫英寸范围内进行长度匹配。
- 所有控制线路必须紧邻坚实的地平面或坚实的DVDD15电源平面进行布线,并配备适当的分布式去耦,以提供高频信号返回路径。
- 所有控制线路应尽可能在接近板中心或上层的布线层上布线,以最小化通孔偏斜。
5.5 DDR VREF电压轨
类别 | 要求/建议 |
---|---|
VREF电源要求 | Vref应为VDDQ一半的低功耗基准电压,与VTT的电压差需保持在±40 mV范围内。 |
VREF电源连接 | 若系统不超过4个DDR3元件,采用两个1% 1 kΩ电阻来生成Vref。 |
每个DDR3设备应单独生成Vref,避免集中生成后分配。 | |
去耦电容放置位置 | 每个Vref引脚旁放置0.01μF和0.1μF电容(推荐0402尺寸或更小)。 |
在电源源头放置0.1μF电容。 | |
布线 | 宽度与长度:Vref走线宽度至少30 mil,长度尽可能短。 |
间距:Vref与其他网络间距至少15 mil。 | |
布线层 | Vref网络应在顶层布线,并进行地线隔离或地屏蔽处理。 |
5.6 DDR VTT电压轨
类别 | 要求/建议 |
---|---|
VTT电源要求 | VTT电压设置为VDDQ的一半,误差±3%以内;配备至少10 μF滤波电容器;通过至少1%精度的电阻分压从VDDQ获取;必要情况需要使用专用的Sink电源芯片 |
电源稳定性与布局 | 配置充足的电容器确保VTT电源稳定性。 VTT与SDRAM引脚连接尽可能短,并进行去耦。 |
噪声限制 | VTT引脚上的交流噪声和直流噪声峰-峰值不超过±2%或1.5 mV。 |
5.7 内容汇总表
对5.1~5.6内容汇总
走线要求 | 时钟线 | 数据类信号 | ** 地址/命令/控制信号** |
---|---|---|---|
单端走线长度要求 | 1. 每组DQ信号线与其对应的DQS信号线的走线长度差≤10Mil; 2. 不同组的数据线,误差≤100Mil; | 以时钟为参考,走线长度与时钟信号的长度差≤100Mil; | |
差分走线长度要求 | 差分线内两根线间距保持一致。差分时钟线长度差≤10Mil | 差分线内两根线间距保持一致,差分时钟线长度差保持在10mils以内,不同差分信号线对之间的长度差≤100mil。 | |
换层及过孔 | 1. 一段走线内过孔不超过两个; 2. 过孔相邻处加旁路电容或地过孔。 | 走线上过孔不超过两个 | |
信号线阻抗匹配 | 差分阻抗 75-100Ω, 参考平面完整。 | 单端信号线阻抗可以控制在40-50Ω之间,参考平面完整; 差分阻抗75-100Ω, 参考平面完整; | 单端信号线阻抗可以控制在40-50Ω之间, 参考平面完整; |
信号间干扰抑制 | 与其它信号线保持4W以上: | 同组信号线3W以上, 不同组之间4W以上。 | 同组信号线3W以上, 不同组之间4W以上。 |
其它要求 | 从第一片到最后一片DDR3颗粒之间的走线长度≤6000 Mil: | 1. 按照数据线从低至高的顺序从第一片至最后一片颗粒进行布线,并且端接电阻放置在最后一片DDR颗粒之后; 2. 从第一片到最后一片颗粒之间的走线长度≤6000 Mil; |
参数 | DDR1 | DDR2 | DDR3 |
---|---|---|---|
VDDQ | 2.5±0.2V | 1.8±0.1V | 1.5±0.075V |
VREF | (0.49-0.51)*VDDQ | (0.49-0.51)*VDDQ | (0.49-0.51)*VDDQ |
VREF AC Noise | ±2% VREF(dc) | ±2% of VREF(dc) | ±1% of VREF(dc) |
VTT | VREF±40mV | VREF±40 mV | VREF±40 mV |
VIH(ac) | VREF+310 mV | VREF+ 250mV | VREF+ 175 mV |
VIL(ac) | VREF-310 mV | VREF-250 mV | VREF-175mV |
VIH(dc) | VREF+150 mV | VREF+ 125mV | VREF+ 100 mV |
VIL(dc) | VREF-150 mV | VREF- 125 mV | VREF-100 mV |
NOTE:
- 输入信号与参考电压VREF进行比较。
- VREF = VDDQ/2,并且预期会跟随VDDQ变化。
- 终端电压VTT = VREF,并且预期会跟随VREF变化。
七、DDR的初始化
DDR3初始化的流程大致如下:
- 电源启动(Power-up):确保在复位信号解除后至少需要500微秒才能启用控制器。
- DDR复位(DDR Reset):复位信号至少保持200微秒。
- DDR3的预充电(DDR3’s Conduct Precharge):进行预充电操作。
- DDR控制器初始化(DDR CTRL INIT):稳定的时钟信号(CLKS)
- 芯片选择启用和DDR时钟开始(Chip selects enabled and DDR clocks begin):芯片选择信号启用,DDR时钟开始。
- 控制器启动(Controller Started):MEM_EN=1,表示内存使能。
- DRAM初始化(DRAMs Initialized):执行DRAM初始化。
- ZQ校准(ZQ Calibration):进行ZQ校准。
- 写入调整(Write Leveling):进行写入级别的调整。
- 读取调整(Read Adjust):进行读取级别的调整。
- 初始化完成(Init Complete):发出模式寄存器命令。
- ZQCL发出(ZQCL Issued):发出ZQCL命令(512个时钟周期)。
- DLL锁定时间(DLL lock time):由控制器自动处理。
- 自动CAS到前导码(Automatic CAS-to-Preamble):也称为读取调整,以及数据到存取时钟的调整。
- 准备用户访问(Ready for User accesses):初始化完成,准备用户访问。
(https://www.ti.com/lit/an/sprabi1d/sprabi1d.pdf?ts=1725724624833)