目前的嵌入式系统中普通使用DDR内存,有些可以支持DDR2内存,这些系统中PCB
LAYOUT成为很关键的环节。LAYOUT不好可能造成系统远行不稳定甚至无法跑起来。以下是本人做硬件设计中的一点经验。欢迎拍砖。
高速PCB信号完整性要考虑的因素有很多,从PCB LAYOUT角度出发主要有PCB层叠结构,阻抗控制,互联拓扑结构,延时匹配(等长),串扰等,这些因素不仅要考虑,而且会相互的影响。我们都知道DDR需要满足严格的时序要求,因此对信号走线的延时是有要求的,做硬件设计的几乎都知道DDR布线要做等长匹配。而另外几个方面就有不少人忽略掉。
信号完整性中最常见的问题就是信号的反射,反射会造成信号过冲和振铃,就会影响到电平的判断,如果过冲和振铃的幅度达到了判断门限,就会出现错误的时序信号。要减小信号的反射就要使驱动端与接收接收端的阻抗匹配。为了达到这个目的通常可以在信号之间串接匹配电阻,并且控制信号走线的阻抗。PCB的层叠结构对阻抗影响很大,因此必需要选择一个好的层叠结构,不能光为了成本减小PCB的层数。除了控制阻抗外,还要考虑信号的回流路径,和阻抗的连续性。一般信号以地(GND)或者电源层作为参考平面。高速信号会优先选择沿着信号走线的垂直方向作为回流路径,所以为了保证尽可能短的回流路径和阻抗的连续性,关键的信号必需有一个完整的参考平面。有些层的信号会以电源层作为参考平面,但电源层通常都被分割成几个区域,信号以电源层为参考平面就会出现跨分割的问题,应该尽量避免这种现像,对于关键的信号不要布在以电源层为参考平面的层,如果不得已,可以采用跨接电容的方式来弥补。
CPU与DDR之间的连线需要综合的考虑上面的几个问题。如阻抗要求,拓扑结构,间距要求(串扰),等长匹配。阻抗可以通过芯片厂家提供的资料来控制,或者通过仿真来确定最佳的阻抗值。根据阻抗要求控制走线的线宽和间距。本人常用的DDR走线策略如下:
1.走线分组
ARM系统中内存一般为32位或者16位,通常使用一片或者两片内存芯片组成。可以将数据线分成一组,两组或者4组。
一组的分法即:DATA0-31,DQS0-3,DQM0-3作为一组;
两组的分法:DATA0-15,DQS0-1,DQM0-1为一组,DATA16-31,DQS2-3,DQM2-3为一组;
四组的分法:DATA0-7,DQS0,DQM0为一组,DATA8-15,DQS1,DQM1为一组,DATA16-23,DQS2,DQM2为一组,DATA23-32,DQS3,DQM3为一组。
具体分几组,可以根据芯片数量和走线密度来确定。布线的时候,同一组的信号线必需要走在同一层。
剩下是时钟信号,地址信号和其它的控制信号,这些信号线为一组。这组信号线尽量在同一层布线。
2.等长匹配
a. DDR的DATA0-31,DQS0-3,DQM0-3全部等长匹配,每一组数据线以对应的DQS为等长目标。不管分为一组还是两组或四组。误差控制在+-25mil。
b. 时钟信号,地址信号和其它的控制信号全部等长匹配,以时钟信号为等长目标,误差控制在+-50mil。另外如果是DDR时钟,要按照差分线要求来走线,两条时钟线的长度要控制在2.5mil的误差内,并且尽量减小非耦合的长度。该组线的长度可比数据线长。走线拓扑可用T型或者星型,不要用菊花型拓扑。
3.间距
间距的控制要考虑阻抗要求和走线的密度。通常采用的间距原则是1W或者3W。如果有足够的空间来走线,可以将数据线按3W的间距来走,可以减小很多串扰。如果实在不行至少要保证1W的间距。除此之外,数据线与其它信号线的间距至少要有3W的间距,如果能更大则更好。时钟与其它的信号线的间距至少也要保持3W,并尽可能的大。绕线的间距也可以采用1W和3W原则,应优先用3W原则。
阻抗板的做法:
1.确定板子的层数和板厚
2.规划好走线层,地层和电源层的层叠结构,明确信号线的参考平面
3.预先拟定阻抗线的线宽,如果是单端线只要确定线宽就行,如果是差分线则先定线宽,间距后面才算
4.预定铜厚,也可由PCB厂来定
5.确定阻抗线要控制的阻抗值,包括单端和差分
6.将上面的要求发给PCB厂,之后PCB厂会计算一个详细的阻抗控制文件,如果上述要求不能满足可以沟通调整一些参数,最终达既达到阻抗要求也符合可制造性并且成本最低