做过龙芯2F内存条和板载内存颗粒的设计,做过凌动N450内存条和板载内存颗粒的设计。想写点东西总结一下,发现网上已经有很多这类的文章了,现在再写一点就当作是参考补充吧。以下内容主要是针对DDR2 667内存的设计。
信号分组:
DDR2的布线中习惯把信号分成若干组来进行设计,分成同组的信号具有相关或者相似的信号特性。
时钟组:差分时钟信号,每一对信号都是同频同相的。ckp0和ckn0为一对。
数据组:对主板64位DDR2内存来说数据每8位(也就是一个byte)为一组可以分为八组,数据dq[0:7]、数据掩码dqm0、数据选通差分信号dqsp0和dqsn0为一组,以此类推。同个数据组的信号应该在同一个信号层上走线,换层也应该一起换,为了方便在同一个信号层走线可以将数据位互换。比如dq2信号在走线的时候发现如果按照原理图来走线会跟dq4交错,这样就不得不换层走线,我们通过互换数据位就可以使信号走同层,对内存来说每一位存进什么内容读出也是什么内容,互换不会受影响,但是互换的条件必须是在同一组内8个bit之间。
地址/命令组:MA[0:14]、BA0、BA1、BA2、RAS、CAS、WE
控制组:时钟使能CKE、片选CS、终端电阻选通ODT为一组,对内存条来说DIMM0用到了CKE0、CKE1、CS0、CS1、ODT0、ODT1。做板载内存设计的时候,可以只用CKE0、CS0、ODT0,控制4片16位的内存芯片。
PCB叠层:
对六层板来说一般的叠层都是top、GND、singnal2、singnal3、POWER、bottom,信号一般情况下以GND为参考平面比较好。走线的阻抗由走线宽度、走线的铜箔厚度、走线到参考平面的距离、参考平面的铜箔厚度和板介质材料决定,PCB设计的时候应该遵守CPU厂家阻抗设计要求来设置叠层。一般PCB设计软件也能计算阻抗,找PCB生产厂家了解了板材介质厚度的资料后可以自行设计叠层、线宽。地址/命令信号、控制信号可以以1.8V内存工作电压为参考平面。
长度控制:
对DDR2这种高频的信号来说走线长度应该计算到CPU核心,这就引入了一个叫封装长度的概念。硅晶元经过物理化学的方法刻蚀而成CPU核心,再将CPU核心封装到一块小的PCB基板上就成了我们常见的CPU。那块小的PCB上管脚到CPU核心的走线长度被称为封装长度。
到同一行列(rank)内存的时钟长度应该控制在正负5mil以内。
同一个数据组内所有走线长度控制在数据选通信号DQS的正负20mil范围内为宜,不同数据组之间长度可以不同,但是应该控制在时钟信号的正负500mil以内。
地址/命令组信号长度控制不是特别严格,INTEL凌动N450要求控制在时钟信号负500mil到正1000mil以内。也就是说最长和最短的信号可以相差1500mil,但是布线的时候还是尽量把信号长度差缩小比较好。布线的时候这组信号长度完全相等也没有问题,但是这样占用的PCB空间也大,花费的时间也多。如果地址/命令信号长度超出时钟信号几千mil,那就需要在BIOS固件中好好调节了。控制在CPU要求的范围内,需要做板载内存的时候只需要配置好内存SPD就可以了。
控制组信号长度控制要求和地址/命令组信号的要求类似,设计的时候应该按照CPU厂家的要求来做,INTEL凌动N450要求控制在时钟信号0mil到正1000mil以内。
走线间距:
一般来说走线都应该按照3W原则来走线,也就是同一个平面上线与线的间距为3倍线的宽度。但是这个不是必须的,intel要求的就比较小。一般走线蜿蜒线的间距可以为16到20mil,对时钟信号可以加大到30mil。不同组信号之间的距离应该适当拉大,可以为20mil以上,地址/命令组和控制组信号的间距可以比较小8mil以下都可以。BGA扇出的地方间距可以小,出线后应该以CPU设计要求来走线。
其它:
VREF走线可以用一根20mil的线,每接到一个器件应该加一个0.1uf的电容。
VTT走线应该在135mil以上,每四个电阻接一个0.1uf电容,两端接10uf大电容。
点对多点的信号,如地址/命令信号、控制信号、时钟信号应该按照“T”形走线,也就是芯片中间走上再分支,长度应该满足CPU设计要求。