|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
; Y( Z6 V9 u1 O2 ^
多年前,无线时代发布了一篇文章关于DDR布线指导的一篇文章,当时在网络上很受欢迎,有很多同行参与了转载。如今看来,那篇文章写得不够好,逻辑性不强,可操作性也不强。在近几年的硬件产品开发中,本人总结出了一套DDR布线方法,具有高度的可行性,于是本人再次编写一份这样的文章,除了讲述DDR布线规则,还想讲述一下布线过程,采用本人的布线过程可以少走很多弯路。本文即将讲到的所有方法,无线时代都经过实际检验。; O0 O! H4 w: C5 |
3 i, M6 v8 i0 V1 D" SDDR布线通常是一款硬件产品设计中的一个重要的环节,也正是因为其重要性,网络上也有大把的人在探讨DDR布线规则,有很多同行故弄玄虚,把DDR布线说得很难,我在这里要反其道而行之,讲一讲DDR布线最简规则与过程。
: ~3 a8 |- L. A0 U& l( f: _8 O/ j: \- o) Y4 i
如果不是特别说明,每个步骤中的方法同时适用于DDR1,DDR2和DDR3。PCB设计软件以cadence Allgro 16.3为例。
; n/ T7 O k- E" C& R* ]; O7 K$ i z& |" Z
第一步,确定拓补结构(仅在多片DDR芯片时有用)2 S {7 ? D, y! v
( U/ A5 j$ S! j# g首先要确定DDR的拓补结构,一句话,DDR1/2采用星形结构,DDR3采用菊花链结构。
6 h+ r! q: z& H5 v- g) D: M& t) L6 _0 N
拓补结构只影响地址线的走线方式,不影响数据线。以下是示意图。 ]) u# @ g; q
% @9 u! @8 }/ d4 y) C! q
, o+ ^4 ?5 {1 p# |
8 H8 U7 p/ l2 B }3 n3 H& K星形拓补就是地址线走到两片DDR中间再向两片DDR分别走线,菊花链就是用地址线把两片DDR“串起来”,就像羊肉串,每个DDR都是羊肉串上的一块肉,哈哈,开个玩笑。/ I4 n6 b% v4 ]% A: c1 ?! u3 B' L
5 ?( w" T# d) `8 W+ L
3 K" ?8 u$ X& N+ d+ B
( K3 f& M. L2 n3 l第二步,元器件摆放$ a9 Q2 _# W# s& x3 b9 N; l+ f# y
* b+ x! K9 w+ G+ K确定了DDR的拓补结构,就可以进行元器件的摆放,有以下几个原则需要遵守:/ e- X5 e' i; T, S/ ]" i
9 y( w% c7 r* O原则一,考虑拓补结构,仔细查看CPU地址线的位置,使得地址线有利于相应的拓补结构0 J) f3 r& q& E# z ?
- w8 H" i. G O, Q6 V1 I) i原则二,地址线上的匹配电阻靠近CPU
u& N+ |( O- x& p8 K
3 Z; V! f4 I' E! L" i- y7 w原则三,数据线上的匹配电阻靠近DDR
7 D, p, O9 ~ Q, A7 f. i2 P# ^. C. d( Y; R' {
原则四,将DDR芯片摆放并旋转,使得DDR数据线尽量短,也就是,DDR芯片的数据引脚靠近CPU
8 `; Z7 T# D0 H# m; G0 O! B# M
5 @; L) _* K; z9 r原则五,如果有VTT端接电阻,将其摆放在地址线可以走到的最远的位置。一般来说,DDR2不需要VTT端接电阻,只有少数CPU需要;DDR3都需要VTT端接电阻。
% n u; M) V$ D1 `6 D7 ]5 t& l+ C3 f, F: `+ f
原则六,DDR芯片的去耦电容放在靠近DDR芯片相应的引脚/ o9 G# j- v+ K; L" x2 n; ]( X+ ]
, V; [4 n3 i8 K8 k2 q% {0 ]$ _
以下是DDR2的元器件摆放示意图(未包括去耦电容),可以很容易看出,地址线可以走到两颗芯片中间然后向两边分,很容易实现星形拓补,同时,数据线会很短。
i! F6 n9 O7 j" ]6 X
: w4 d8 k+ ?6 M6 y# U
' j( l# H+ |" a e; w3 P# N) I5 g+ E2 c( I+ z% M
以下是带有VTT端接电阻的DDR2元器件摆放示意图,在这个例子中,没有串联匹配电阻,VTT端接电阻摆放在了地址线可以到达的最远距离。
4 Q% V/ B, p/ g" i/ r0 D1 B1 @" U& c- Q: L
2 h+ @, E; {+ X7 B$ O
" H( J# G) A6 U' }; F% C
以下是DDR3元器件摆放示意图,请注意,这里使用的CPU支持双通道DDR3,所以看到有四片(参考设计是8片)DDR3,其实是每两个组成一个通道,地址线沿着图中绿色的走线传递,实现了菊花链拓补。地址线上的VTT端接电阻摆放在了地址线可以到达的最远的地方。同样地,数据线上的端接电阻也放置在了靠近DDR3芯片的位置,数据线到达CPU的距离很短。同时,可以看到,去耦电容放置在了很靠近DDR3相应电源引脚的地方。/ u5 v" H& W; s T6 X$ @
' c# ~( t) C. b. P. z) h* s9 ]
4 x w' b9 h/ W) N' | q1 B2 _! ^0 q% D8 M; V3 y2 Z
第三步,设置串联匹配电阻的仿真模型
- p) z: S7 \6 ?1 _
6 H& s. z( o4 |8 D摆放完元器件,建议设置串联匹配电阻的仿真模型,这样对于后续的布线规则的设置是有好处的。- o% r6 M$ C, K, P
. R$ P' I+ B0 f$ H" K, A
点击AnalyzeSI/EMI SimModel Assignment,如下图。8 _; s+ s; D+ }+ Q/ z L
5 [/ E6 e4 ]. ^7 M
1 V9 o" I; J2 Q7 a6 s, R( u, t6 }" G6 A) l% n
然后会出来Model Assignment的界面,如下图8 G& i. Y' Y% F! [
1 _' |. F# g% B) Y& M5 L# a6 @
! V' X. G) ?- {0 d- q4 }
6 s L/ d+ j, a然后点击需要设置模型的器件,通常就是串联匹配电阻,分配或创建合适的仿真的模型,如果不知道如何创建,请在互联网上搜索或发邮件给无线时代。
3 i, i) p" H3 D2 S( s( H
& J- `0 c6 u2 \& M& j1 K1 I }
6 H; x$ G# n& K# L2 x, ]% p
+ D( ?& S/ |4 \4 F6 {3 v- f
分配好仿真模型之后的网络,使用Show Element命令,可以看到相关的XNET属性,如下图。! D! [) O0 U" Y# e0 x
8 T7 i( _+ g! U7 m# D0 W$ W: |
$ Q, H1 b& `/ @1 i; V+ i
; k ^6 C9 I( p5 }3 B( i7 }: z第四步,设置线宽与线距7 Y; x' x% E9 ^0 ]
3 a( R [; ~; q) X1. DDR走线线宽与阻抗控制密切相关,经常可以看到很多同行做阻抗控制。对于纯数字电路,完全有条件针对高速线做单端阻抗控制;但对于混合电路,包含高速数字电路与射频电路,射频电路比数字电路要重要的多,必须对射频信号做50欧姆阻抗控制,同时射频走线不可能太细,否则会引起较大的损耗,所以在混合电路中,本人往往舍弃数字电路的阻抗控制。到目前为止,本人设计的混合电路产品中,最高规格的DDR是DDR2-800,未作阻抗控制,工作一切正常。
F) D% R& D; ^/ u" d) `; T- M0 E* _3 ]: [( C
2. DDR的供电走线,建议8mil以上,在allegro可以针对一类线进行物理参数的同意设定,我本人喜欢建立PWR-10MIL的约束条件,并为所有电源网络分配这一约束条件,如下图。
% L& A' ~0 ~! k) y, G( k
) R* k) k4 O4 y/ G5 @ f
. X. W4 n# b/ o( }4 q2 z. ~
3 q2 T% H {$ F' H; q. }. W
3. 线距部分主要考虑两方面,一是线-线间距,建议采用2W原则,即线间距是2倍线宽,3W很难满足;二是线-Shape间距,同样建议采用2W原则。对于线间距,也可以在Allegro中建立一种约束条件,为所有DDR走线(XNET)分配这样的约束条件,如下图。' D$ A7 X9 t9 u. H# ~% H
0 p/ f" `! F$ f! u& s! A
( X2 j [7 ~' l5 u$ O% t4. 还有一种可能需要的规则,就是区域规则。Allegro中默认的线宽线距都是5mil,在CPU引脚比较密集的时候,这样的规则是无法满足的,这就需要在CPU或DDR芯片周围设定允许小间距,小线宽的区域规则,如下图。# J4 b% y) b4 p; _2 R* e
: @$ G* j1 w1 \( d
( L- z( t5 k! c( U
( F+ X: S) f) b4 z& g) D) R. @第五步,走线
2 S$ k( Y& j' w7 G8 j% O3 l x# a C% z$ q
走线就需要注意的内容比较多,这里只做少许说明。
4 R% t4 q! b* Y5 A
6 ~: Y4 n7 H6 O8 S) A! v- 所有走线尽量短
- 走线不能有锐角
- 尽量少打过孔
- 保证所有走线有完整的参考面,地平面或这电源平面都可以,对于交变信号,地与电源平面是等电位的
- 尽量避免过孔将参考面打破,不过这在实际中很难做到
- 走完地址线和数据后,务必将DDR芯片的电源脚,接地脚,去耦电容的电源脚,接地脚全部走完,否则在后面绕等长时会很麻烦的
- y3 f# f# `2 e, b& i
7 ]3 o# E/ s# _ D6 g下图是完成的DDR走线,但尚未绕等长。0 v2 P8 w: D; v- z5 z$ h/ K
# J) d# F. I2 `7 d& ]) i
7 K. X7 ^. r) W) V* C
' ~# w1 g) h' L! H; T% F5 f
第六步,设置等长规则* `. e; r, Q `9 e0 j
! [! v E( s" D, P9 u+ V
对于数据线,DDR1/2与DDR3的规则是一致的:每个BYTE与各自的DQS,DQM等长,即DQ0:7与DQS0,DQM。等长,DQ8:15与DQS1,DQM1等长,以此类推。
$ q1 r6 h9 y/ l. E& Y1 Z0 K" j8 \. ?3 D/ R" x
DDR2数据线等长规则举例" M/ i; H, [; d( `$ u
3 v9 f( L x3 K! N, i1 [+ {9 D& d E
+ w6 F" u# U; n" F* E( M' q, i* M3 _( w/ P4 s6 z' ?- R* E$ c
DDR3数据线等长规则举例9 a4 s4 |2 @5 \1 ~- c, j9 ?
/ e% T4 u0 x# D# F
* ]+ a& z3 x, U1 ?$ m
0 b) i' j z! b地址线方面的等长,要特别注意,DDR1/2与DDR是很不一样的。& h" B6 L# k, \# w. A. N0 X0 l6 |' |
; r% u+ w. v% P
对于DDR1/2,需要设定每条地址到达同一片DDR的距离保持等长,如下图。; s4 X: d. C, I, K. {3 }: `8 z
. ?/ p& Q! P2 f3 k4 Q) I
, d: l; j4 z! ^* ^* W
. Z( w, d. W0 U1 F* k
对于DDR3,地址线的等长往往需要过孔来配合,具体的规则均绑定在过孔上和VTT端接电阻上,如下图。可以看到,CPU的地址线到达过孔的距离等长,过孔到达VTT端接电阻的距离也等长。3 b p5 ^7 T$ _& j
" J* U8 V _7 g3 U1 ?
1 V+ m6 c+ z) {
6 t6 U" `0 [$ P7 O& V- D补充一点,很多时候,地址线的等长要求不严格,这一点我还没有尝试过。在本人设计的这些产品中,地址线,数据线都做了25mil的Relative Propagation Delay的等长规则设定。关于等长规则设定的细节在这里不再赘述,有兴趣的话,可以发邮件给无线时代。$ L) A( ~/ k9 |9 R( `3 C- e5 c
, G4 r: @$ T- [, M2 x/ q; W$ r/ t
第七步,绕等长
# E8 W1 `# T1 ]" P, M. j' ~/ A+ F) A* Q( u
完成等长规则的设定后,最后一步也是工作量最大的一步:绕等长。5 p- \( V K2 x, v, Y" ?
* f& e0 O$ R/ l. S( P9 N5 h% z
在这一步,我认为只有一点规则需要注意:尽量采用3倍线宽,45度角绕等长,如下图。
9 c* ?: j# y: p. c/ c6 {- E; a; n7 y$ J3 p9 r
( M1 R: [' q% e, C
3 e4 |6 n& f+ Q+ _1 ]+ E: Y* a绕等长完成后,最好把DDR相关网络锁定,以免误动。6 W2 [6 u! p5 _) H! w8 |
. y3 s7 X% k9 ]& d3 V
0 i2 f# P R' r# a7 H
' W5 y$ R# z" ^ \& ?到这里,DDR走线就已经完成了,在本人设计过的三,四十种产品中,都是按照上面的规则与过程完成的,DDR2最高规格是DDR2-800,512MB,DDR3最高规格是DDR3-1600,1GB,都可以很稳定的工作,无论性能还是可靠性,都未曾出过问题。# Z% E9 Y; L1 U3 C' h1 W# m! Q7 z- [/ @
$ E' _$ D4 K; }. H& ]0 k9 Z- P' t
1 V- a6 J2 r" l2 ^7 I |
评分
-
查看全部评分
|