首先区别DDR SDRAM与SDRAM:
SDRAM在一个时钟周期内只传输一次数据,它是在时钟的上升期进行数据传输;而DDR则是一个时钟周期内传输两次数据,在时钟的上升期和下降期各传输一次数据。
SDRAM的工作电压为3.3V,而DDR的工作电压为2.5V;
SDRAM采用公共时钟同步,公共时钟同步是指在数据的传输过程中,总线上的驱动端和接收端共享同一个时钟源,在同一个时钟缓冲器(clock buffer)发出同相时钟的作用下,完成数据的发送和接收。
DDR SDRAM采用源同步,源同步就是指时钟选通信号clk伴随发送数据一起由驱动芯片发送。所以在DDR的控制端需要有延迟补偿电路。
SDRAM关心建立时间,而DDR关心保持时间,DDR比SDRAM要求有更短的信号建立保持时间、更干净的参考电压、更紧密的走线匹配和新的I/O口信号,并且需要合适的终端电阻匹配。因此在布线的时候注意等长布线。关于建立时间和保持时间的概念详见附录。
内存的作用是用来存储数据的,写入1读出1,写入0读出0,因此必须保证数据访问正确。产生数据访问错误的情况主要有如下两种:
1、判决错误,0判成1,1判成0。可能参考电平不准(为什么不准?信号线内阻造成的压降),也可能是加性干扰,或者阻抗不匹配引起信号畸变。
2、时序错误,不满足建立/保持时间,或者采样点相位错误,不在有效信号位置上。触发器需要维持一段时间的能量供给才能正常工作,这个时间就是建立/保持时间。
只要解决好这两个问题,保证内存正确访问,内存电路就设计成功了。
为了满足建立保持时间,同频同相,采样正确,我们对走线的布线要求是:等长布线。但是由于DDR有高速时钟信号,高速跳变的边沿,就必须考虑到在PCB板上存在传输线效应的问题,对于布线长度有了要求。
避免传输线效应的方法
1、严格控制关键网线的走线长度。
如果采用CMOS或TTL电路进行设计,工作频率小于10MHz,布线长度应不大于7英寸。工作频率在50MHz布线长度应不大于1.5英寸。如果工作频率达到或超过75MHz布线长度应在1英寸。对于GaAs芯片最大的布线长度应为0.3英寸。如果超过这个标准,就要通过软件仿真来定位走线.走线的精确长度需物理软件(如:PADS等)控制。
2 合理规划走线的拓扑结构
解决传输线效应的另一个方法是选择正确的布线路径和终端拓扑结构。当使用高速逻辑器件时,除非走线分支长度保持很短,否则边沿快速变化的信号将被信号主干走线上的分支走线所扭曲。通常情形下,PCB走线采用两种基本拓扑结构,即菊花链(Daisy Chain)布线和星形(Star)分布。
根据DDR信号的种类可以分为不同的信号组,如下表所列:
VSS为数字地,VSSQ为信号地,若无特别说明,两者是等效的。VDD为器件内核供电,VDDDQ为器件的DQ和I/O供电,若无特别说明,两者是等效的。
其中,数据组的分组应该以每个字节通道来划分,DM0、DQS0以及DQ0~DQ7为第1字节通道,DM1、DQS1以及DQ8~DQ15为第2字节通道,以此类推。每个字节通道内有严格的长度匹配关系。其他信号走线长度应按照组为单位来进行匹配,每组内信号长度差应该严格控制在一定范围内。不同组的信号间虽然不像组内信号那样要求严格,但不同组长度差同样也有一定要求。
为了确保DDR接口最优化,DDR的布线应该按照如下的顺序进行:功率、电阻网络中的pin脚交换、数据信号线布线、地址/命令信号布线、控制信号布线、时钟信号布线、反馈信号布线。
数据信号组的布线优先级是所有信号组中最高的,因为它工作在2倍时钟频率下,它的信号完整性要求是最高的。另外,数据信号组是所有这些信号组中占最大部分内存总线位宽的部分,也是最主要的走线长度匹配有要求的信号组。
地址、命令、控制和数据信号组都与时钟的走线有关。因此,系统中有效的时钟走线长度应该满足多种关系。设计者应该建立系统时序的综合考虑,以确保所有这些关系都能够被满足。
时钟信号:以地平面为参考,给整个时钟回路的走线提供一个完整的地平面,给回路电流提供一个低阻抗的路径。由于是差分时钟信号,在走线前应预先设计好线宽线距,计算好差分阻抗,再按照这种约束来进行布线。所有的DDR差分时钟信号都必须在关键平面上走线,尽量避免层到层的转换。线宽和差分间距需要参考DDR控制器的实施细则,信号线的单线阻抗应控制在50~60 Ω,差分阻抗控制在100~120 Ω。时钟信号到其他信号应保持在20 mil以上的距离来防止对其他信号的干扰。蛇形走线的间距不应小于20 mil。串联终端电阻RS值在15~33Ω,可选的并联终端电阻RT值在25~68 Ω,具体设定的阻值还是应该依据信号完整性仿真的结果。
数据信号组:以地平面为参考,给信号回路提供完整的地平面。特征阻抗控制在50~60 Ω。线宽要求参考实施细则。与其他非DDR信号间距至少隔离20 mil。长度匹配按字节通道为单位进行设置,每字节通道内数据信号DQ、数据选通DQS和数据屏蔽信号DM长度差应控制在±25 mil内(非常重要),不同字节通道的信号长度差应控制在1 000 mil内。与相匹配的DM和DQS串联匹配电阻RS值为0~33 Ω,并联匹配终端电阻RT值为25~68Ω。如果使用电阻排的方式匹配,则数据电阻排内不应有其他DDR信号。
地址和命令信号组:保持完整的地和电源平面。特征阻抗控制在50~60 Ω。信号线宽参考具体设计实施细则。信号组与其他非DDR信号间距至少保持在20 mil以上。组内信号应该与DDR时钟线长度匹配,差距至少控制在25 mil内。串联匹配电阻RS值为O~33 Ω,并联匹配电阻RT值应该在25~68 Ω。本组内的信号不要和数据信号组在同一个电阻排内。
控制信号组:控制信号组的信号最少,只有时钟使能和片选两种信号。仍需要有一个完整的地平面和电源平面作参考。串联匹配电阻RS值为O~33 Ω,并联匹配终端电阻RT值为25~68 Ω。为了防止串扰,本组内信号同样也不能和数据信号在同一个电阻排内。
电源部分的设计分析
说明:在此次选用的DDR 芯片中VTT和终端电阻都被集成到了主芯片MX233的DDR 控制器中,因此不需要重新布线,下面文档中提到VTT的布线规则是为了方便其他未集成的主芯片布线,仅作参考。
通常情况下,DDR供电电压是2.3~2.7 V,典型值是2.5 V,工作频率的不同可能引起正常工作电压的不同。参考电压VREF是1.13~1.38 V,典型值是1.25 V。VTT以VREF为参考,电压范围是(VREF-0.04 V)-(VREF+0.04 V)。由于VREF只是给差分接收器端提供一个直流参考电平,所以电流比较小,最大只有3 mA。VTT的电流由于上拉的缘故,在输出端输出高电平时,VTT应能流入电流;在输出端输出低电平时VTT电流输出。故VTT必须能同时有流入和流出电流,电流的大小依赖于总线上同时出现的电位状态,从常用的设计来看最大可以从2.3 A到3.2 A。
由于VREF电压作为其他信号接收端的重要参考,故它的布线设计也是十分重要的。叠加在VREF电压的串扰或噪声能直接导致内存总线发生潜在的时序错误、抖动和漂移。很多电源芯片会把VREF和VTT从同一源输出,但是由于使用的目的不同,走线也完全不同。VREF最好和VTT在不同平面,以免VTT产生的噪声干扰VREF。而且无论是在DDR控制器端还是DDR存储器端,VREF脚附近都应放置去耦电容,消除高频噪声。VREF的走线宽度应该越宽越好,最好为20~25 mil。
VTT电源应该单独划分一块平面来供应电流,且最好放在DDR存储器端。如果并联终端匹配使用排阻的方式上拉,那么最好每个排阻都添加一个0.1 μF或0.01μF的去耦电容,这对于改善信号的完整性、提高DDR总线的稳定性都有很好的效果。
导线间距和导线宽度S1,S2,S3的定义如下:
导线宽度选择为:
DQ:4mil min; 6mil nominal;
DQS: 4mil min; 6mil nominal;
Address:4 mil min; 6 mil nominal;
Command/control: 4 mil min; 6 mil nominal;
Clock:4 mil m;in; 6-10 mil nominal;
导线间距选择:
信号组 | 信号 | 间距类别 | 最小值 | 标称值 | 最大值 | 单位 |
数据组 | DQ to DQ | S1 | 8 | 12 | 无 | mil |
DQ to DQS | S2 | 8 | 12 | 无 | mil | |
DQ to DM | S2 | 8 | 12 | 无 | mil | |
地址组 | 相邻地址线 | S1 | 6 | 12 | 无 | mil |
地址线 | S2 | 6 | 12 | 无 | mil | |
命令/控制组 | CAS#,RAS#,WE#,CS#,CKE | S1 | 6 | 15 | 无 | mil |
时钟信号 | CK# to CK | S1 | 4 | 无 | 6 | mil |
时钟与其他信号 | S2 | 8 | 12 | 无 | mil |
几点说明:
所有DDR的差分时钟线CK与CK#必须在同一层布线,误差+-20mil,最好在内层布线以抑制EMI。如果系统有多个DDR器件的话,要用阻值100~200ohm的电阻进行差分端接。
(1) 若时钟线的分叉点到DDR器件的走线长度<1000mil,要使用100~120ohm的差分端接,如下图:
建立时间容限和保持时间容限。
建立时间容限是指器件允许的安全的建立时间长度范围。同样保持时间也就是器件允许的安全的保持时间长度范围。一般来说建立时间容限和保持时间容限都大于等于0。根据这个要求,如上图所示,就有以下约束:
tclk = tffpd + tcomb + 建立时间容限 + tsetup
所以建立时间容限 = tclk – tffpd(max) – tcomb(max) – tsetup >=0
tsetup <= tclk – tffpd (max)- tcomb(max)
保持时间容限
首先对于数据接收端来说,任何时钟沿采样的数据,都是发送端前一时钟周期发送的数据。发送端可能每个时钟周期都要发送数据,那么对于接收端来说,任何一个时钟沿后一段时间,数据线上的数据都会被发送端第二次发送的数据改变,所以保持时间容限其实是由于下一个时钟节拍上的数据引起的。
信号在时钟信号有效沿跳变,但真正到达输入端的的跳变发生在时钟信号有效沿后的tffpd + tcomb时刻。根据器件的保持时间要求,输入必须保持一定时间的稳定,所以tholdup <= tffpd + tcomb。保持时间容限则 = tffpd(min) + tcomb(mix) – tholdup。
对于器件来说建立时间和保持时间越短越好。