高速电路PCB网,专注于嵌入式方案,信号完整性和电源完整性仿真分析,高速电路PCB设计,各种EDA工具(Cadence\Mentor\\AD\\CAM\ANSYS HFSS)交流学习。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
基于目前群内问得比较多了的DDR2 DDR3的layout设计及调试问题,做个简单描述,
做抛砖引玉。文章属于原创,转载需注明。有问题在论坛提问,论坛会把问题发到群内做相关的讨论。
一:DDR2 DDR3 layout规则异同点(其中DDR3的layout规则主要针对GM8287芯片,速率跑1.6G)
1:DDR2 走T型等长,地址命令控制线参考时钟信号做等长(具体长度看CPU厂家定义,一般正负250mil),DQS参考时钟做等长(具体长度看CPU厂家定义,一般正负50mil) DQ DM参考DQS做等长(具体长度看CPU厂家定义,一般正负25mil)。差分线对内等长10mil。DDR速率较低,所以所列
的数据均为通常情况下。
差分走线做100欧姆阻抗控制,单端信号走线做50欧姆阻抗控制。(DDR3 的layout也是如此要求,GM8287比较特殊,差分使用90欧姆)
//--------------------------
优先参考GND平面,其次参考DDR电压平面,不能夸分割处理。(DDR3 的layout也是如此要求)
//--------------------------
同组同层,不同组信号的间距设定为3W,时钟和其它任何走线设定3W间距。
//--------------------------
等长都是以芯片到DDR的管脚点对点来算。(DDR3 的layout也是如此要求)
//--------------------------
2:DDR3走fly-by形式。(DDR3的layout规则主要针对GM8287芯片,速率跑1.6G)
DDR3的数据组没有硬性和时钟做等长处理,一般芯片内部会去调节data的时间,来达到同步,后续会用一个
表格来形象化说明。
DQ组:
1)长度(以主芯片管脚到DDR芯片管脚的点对点长度计算)
DQS对内差分走线误差5mil以内,
DQ、DQM长度参考DQS,长度误差在+/- 20mil
DQS差分对之间的长度10mil误差
2)间距
DQ走线之间间距不小于2倍线宽
DQ与DQS之间间距不小于3倍线宽
DQ组的走线尽可能同组同层
//--------------------------
ADDR/CMD/CK 组
1)长度(以主芯片管脚到DDR芯片管脚的点对点长度计算)
CK长度不短于任何DDR信号走线(因为DDR3 specification规定 DDR3 controller 在芯片內部只能delay “Data bus”)
CK差分对内误差5mil以内
ADDR/CMD小于与CK走线长度100mil至1000mil
2)间距
ADDR/CMD之间间距不小于2倍线宽
ADDR/CMD与CK之间间距不小于3倍线宽
ADDR/CMD/CK 组走线尽量同组同层
//--------------------
其它注意点:
DDR3走线参考GND平面或者1.5V电源平面,优先参考GND平面(时钟和数据走线尽量只参考GND平面)
Vref走线尽可能宽,避免靠近高速信号
同组走线使用的过孔数目尽量一样多(2 个 Via 的时序影响相当于180~220mil的走线长度)
等长绕线,自身绕线的间距(CAP)不小于2倍线宽
//----------------------
阻抗方面:
DQ与ADDE/CMD等单端走线阻抗控制在50欧姆
DQS与CK等差分阻抗控制在90欧姆
二:针对GM8287的DDR3调试,其中一个比较方便的手段就是,在整板工作最繁忙的时刻,比如硬件模块都打开,
视频的传输,网络传输等等都在工作,然后环境温度设定在45度。这样的情况下,运行memtest程序,去长时间
的烤机测试。
memtest测试程序为开源的程序,大家可以百度了解。 测试之后,一般如果针对此芯片测试之后,在
DDR3参数没有调整的情况,会有几种错误,地址命令控制线错误,数据错误(读错误,写错误)。这些都需要分清楚。
1:// CMD/ADD 错误
testing 59FAILURE: 0x55555555 != 0xaaaaaaaa at offset 0x000010a4. frmmap_open: AP0 open file:0x8f7dd660 1st. vaddr: 0x76a93290(content: 0x55555555, paddr: 0x788290), prev vaddr:0x76a9328c(content:0x55555555) 2nd. vaddr: 0x76c92a94(content:0xaaaaaaaa, paddr: 0xfa7fa94), prev vaddr:0x76c92a90(content:0x55555555) problem happen, make this process stuck for debugging!
2:// data 错误 (write fail) FAILURE: 0xabababab != 0x2bababab at offset 0x00012aff. frmmap_open: AP0 open file: 0x842f3640 1st. vaddr: 0x76b7bbfc(content: 0xabababab, paddr: 0x1fd1ebfc), prev vaddr:0x76b7bbf8(content:0xabababab) 2nd. vaddr: 0x76d7b400(content: 0x2bababab, paddr: 0x1f92d400), prev vaddr:0x76d7b3fc(content:0xabababab) problem happen, make this process stuck for debugging!
3:// data 错误 (read fail) FAILURE: 0xabababab != 0x2bababab at offset 0x00012aff. frmmap_open: AP0 open file: 0x842f3640 1st. vaddr: 0x76b7bbfc(content: 0xabababab, paddr: 0x1fd1ebfc), prev vaddr:0x76b7bbf8(content:0xabababab) 2nd. vaddr: 0x76d7b400(content: 0xabababab, paddr: 0x1f92d400), prev vaddr:0x76d7b3fc(content:0xabababab) problem happen, make this process stuck for debugging!
针对不同的错误类型,去调节相应寄存器的值,比如CMD/ADD 错误 ,可以调节0x9a100020内部的值,去调整CLK的相位等等 (详情参考GM8287的datasheet说明)。如data 写错误,则调整 0x9a10006c 0x9a100078 寄存器的值。data 读错误则 调整0x9a10006c 0x9a100024的值。
为什么有这些调整,大家知道DDR3中,都是参考CLK去做时序控制的,data在芯片内部做时序控制处理,因为走fly-by的 结构,data组的线一定比CLK短,所以在物理时间上,一定比CLK更先到达DDR颗粒,那么通过芯片内部的时序控制,就可以 让它达到同步,同时到达DDR颗粒这端。而数据有读取和写入,所以会分别有读和写的寄存器去控制它的delay。 而内部调整是以byte做单位的,在GM8287来讲,32位的数据,使用2颗DDR3芯片,分成4个byte,每组八个bit,调节的delay级别从0~7, 纵向有byte 0~3,横向有0~7的这样一个表格。 根据读写的错误类型,相应调整相应的delay值。在后续的文章中,会讲讲 这方面的知识,关于DDR 参数的window方面。
|