|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
* O8 i9 ~# U* q9 Z q* x多年前,无线时代发布了一篇文章关于DDR布线指导的一篇文章,当时在网络上很受欢迎,有很多同行参与了转载。如今看来,那篇文章写得不够好,逻辑性不强,可操作性也不强。在近几年的硬件产品开发中,本人总结出了一套DDR布线方法,具有高度的可行性,于是本人再次编写一份这样的文章,除了讲述DDR布线规则,还想讲述一下布线过程,采用本人的布线过程可以少走很多弯路。本文即将讲到的所有方法,无线时代都经过实际检验。/ K M# t6 g4 Q, N, e/ E
$ j( j/ B- e: r7 dDDR布线通常是一款硬件产品设计中的一个重要的环节,也正是因为其重要性,网络上也有大把的人在探讨DDR布线规则,有很多同行故弄玄虚,把DDR布线说得很难,我在这里要反其道而行之,讲一讲DDR布线最简规则与过程。8 q) l `% ?4 L. n' E" {3 c
' R9 z7 b4 L' y# X如果不是特别说明,每个步骤中的方法同时适用于DDR1,DDR2和DDR3。PCB设计软件以cadence Allgro 16.3为例。
. |. w2 j3 k1 R; `
& E+ w. m L2 m( d) n$ x8 B第一步,确定拓补结构(仅在多片DDR芯片时有用)3 o- U+ ]( f7 @: q* T2 ]! ?
" x! L+ S3 g' Z首先要确定DDR的拓补结构,一句话,DDR1/2采用星形结构,DDR3采用菊花链结构。
. M# P- M L1 s8 h) s, q" ^: [8 p; |) e! J% o7 j
拓补结构只影响地址线的走线方式,不影响数据线。以下是示意图。
' _4 c/ f' J* a) B8 A+ q
: v$ M+ K8 K- Y& Q, U
4 G6 s# _' H. H' c6 H- Y5 n( _( M
9 H0 W( d) S* k6 S. T3 B星形拓补就是地址线走到两片DDR中间再向两片DDR分别走线,菊花链就是用地址线把两片DDR“串起来”,就像羊肉串,每个DDR都是羊肉串上的一块肉,哈哈,开个玩笑。$ m+ W- k. h- u: e" f0 ]
7 N! g$ b* J+ O4 `5 v$ E
/ |& n+ d" ~5 t; C" R
. y5 t% }. X; z0 N9 u$ Z第二步,元器件摆放8 Y* I8 Y* S2 w/ J6 u1 R7 O3 A
0 `" H3 F$ k) }7 T# o确定了DDR的拓补结构,就可以进行元器件的摆放,有以下几个原则需要遵守:+ U; c) t4 q5 @* h/ S* O
( i, L, M/ T6 v- Y7 I原则一,考虑拓补结构,仔细查看CPU地址线的位置,使得地址线有利于相应的拓补结构2 r5 C8 b0 ?, h' z* ?, y% h
. [! }0 x1 ?4 q$ C# J原则二,地址线上的匹配电阻靠近CPU
4 j( _0 u- l1 m/ \2 q# c
* d D9 ?5 ^0 ^5 `4 _3 c1 h; U原则三,数据线上的匹配电阻靠近DDR
0 H1 W5 H5 A7 R
4 U) {3 ?; |& D' L" T原则四,将DDR芯片摆放并旋转,使得DDR数据线尽量短,也就是,DDR芯片的数据引脚靠近CPU! o8 c7 o' S# m3 L( Q- [/ a3 A# o6 G
% Y" X+ \ `6 r9 y9 ^
原则五,如果有VTT端接电阻,将其摆放在地址线可以走到的最远的位置。一般来说,DDR2不需要VTT端接电阻,只有少数CPU需要;DDR3都需要VTT端接电阻。' R$ [4 x; l9 O, L/ U
6 S0 `+ j. F( n9 k# h k原则六,DDR芯片的去耦电容放在靠近DDR芯片相应的引脚
) m$ T( x- d& W" }9 J
/ j" k& |$ _" r8 n+ p. N+ ^+ R4 p5 ?以下是DDR2的元器件摆放示意图(未包括去耦电容),可以很容易看出,地址线可以走到两颗芯片中间然后向两边分,很容易实现星形拓补,同时,数据线会很短。
, ^$ f( U$ G9 m, I: X+ t* n/ d# n3 A' f# G+ c( E3 }
( Y# o' c+ n5 \( p0 q( {& t, f- M8 Z% K7 Y4 p! G; b( x0 `
以下是带有VTT端接电阻的DDR2元器件摆放示意图,在这个例子中,没有串联匹配电阻,VTT端接电阻摆放在了地址线可以到达的最远距离。7 U% A7 ~3 O& T
! m `0 Q2 e4 h
$ |1 R: e5 S; `
: s. _1 I" S2 D+ Z& j8 W以下是DDR3元器件摆放示意图,请注意,这里使用的CPU支持双通道DDR3,所以看到有四片(参考设计是8片)DDR3,其实是每两个组成一个通道,地址线沿着图中绿色的走线传递,实现了菊花链拓补。地址线上的VTT端接电阻摆放在了地址线可以到达的最远的地方。同样地,数据线上的端接电阻也放置在了靠近DDR3芯片的位置,数据线到达CPU的距离很短。同时,可以看到,去耦电容放置在了很靠近DDR3相应电源引脚的地方。
. H2 Z8 N+ q7 h, ^7 ?' F- {$ s* `0 `# |
" W) |( U+ Y2 z( h& u
, o- F% d7 E. ^3 I
第三步,设置串联匹配电阻的仿真模型' \6 Z: G: E2 T6 y7 R* F
5 P' _# l4 O" d摆放完元器件,建议设置串联匹配电阻的仿真模型,这样对于后续的布线规则的设置是有好处的。
1 A/ w, i7 F, h
3 E3 r( _- {- c7 C5 |4 j点击AnalyzeSI/EMI SimModel Assignment,如下图。
$ i" P7 T# x# V, {5 p5 y9 @( g; K( @* q. d6 M
+ D/ f- h4 M6 G2 o1 `- `; A1 ?( ^; `
! d) f' F: W5 d8 ?" z8 j: L6 P然后会出来Model Assignment的界面,如下图
) q S" B" U: ^/ f( `* l& O% q9 N- q
% l. k8 Q& Y) |! v6 [# W' [$ l5 h$ ?( S7 j
然后点击需要设置模型的器件,通常就是串联匹配电阻,分配或创建合适的仿真的模型,如果不知道如何创建,请在互联网上搜索或发邮件给无线时代。5 Y$ ]6 U% S2 Y* N% `) V
- y4 D3 C; D4 ^: s# `
) w$ |* R! q, U! D
6 Y# h, h+ s& k
分配好仿真模型之后的网络,使用Show Element命令,可以看到相关的XNET属性,如下图。
, `3 {3 L( t2 b( C$ y- c9 s; t- \* y- Y
/ M* K7 v2 h4 v/ ?7 J y" a
( A* Y+ {( `% L9 B第四步,设置线宽与线距. _! L/ s+ D8 }5 \, i3 b. l) W9 O
" {! j. }" m& ]1. DDR走线线宽与阻抗控制密切相关,经常可以看到很多同行做阻抗控制。对于纯数字电路,完全有条件针对高速线做单端阻抗控制;但对于混合电路,包含高速数字电路与射频电路,射频电路比数字电路要重要的多,必须对射频信号做50欧姆阻抗控制,同时射频走线不可能太细,否则会引起较大的损耗,所以在混合电路中,本人往往舍弃数字电路的阻抗控制。到目前为止,本人设计的混合电路产品中,最高规格的DDR是DDR2-800,未作阻抗控制,工作一切正常。
; U% s' U! Z* l7 N' d& G/ n) Z" |& |2 w: i$ s: W' e" S! _
2. DDR的供电走线,建议8mil以上,在allegro可以针对一类线进行物理参数的同意设定,我本人喜欢建立PWR-10MIL的约束条件,并为所有电源网络分配这一约束条件,如下图。
: \, N3 f- I g8 J
* E y) r) Z8 |) L; H b' q6 _
( J( l& W/ {9 _- k- Q8 M9 O5 p; f# F/ C: T( m6 L3 A& `
3. 线距部分主要考虑两方面,一是线-线间距,建议采用2W原则,即线间距是2倍线宽,3W很难满足;二是线-Shape间距,同样建议采用2W原则。对于线间距,也可以在Allegro中建立一种约束条件,为所有DDR走线(XNET)分配这样的约束条件,如下图。5 @5 Z- V% D+ u. k0 k
7 U. ?$ |) J# X* w1 v1 k8 M! N: Y
% y5 L- f: ?. J7 ~4. 还有一种可能需要的规则,就是区域规则。Allegro中默认的线宽线距都是5mil,在CPU引脚比较密集的时候,这样的规则是无法满足的,这就需要在CPU或DDR芯片周围设定允许小间距,小线宽的区域规则,如下图。
! f* V8 Y$ |9 G6 k& o
8 e) q* S* P) A: E3 v( M6 D0 r
7 |3 c: q* q* I h
+ N3 j9 l, A' p+ H第五步,走线
+ \6 N& S! {' {& Q3 R( e$ { T, E. o- \" G+ G! v
走线就需要注意的内容比较多,这里只做少许说明。2 H' E8 v) B' C
5 d4 s) K6 Y5 c+ V0 E) z$ M- O- 所有走线尽量短
- 走线不能有锐角
- 尽量少打过孔
- 保证所有走线有完整的参考面,地平面或这电源平面都可以,对于交变信号,地与电源平面是等电位的
- 尽量避免过孔将参考面打破,不过这在实际中很难做到
- 走完地址线和数据后,务必将DDR芯片的电源脚,接地脚,去耦电容的电源脚,接地脚全部走完,否则在后面绕等长时会很麻烦的" P# ?! t7 G' S, u6 X3 N
% l' [) t- P; b4 ~, y% m
下图是完成的DDR走线,但尚未绕等长。: r" q1 E5 f" d3 X7 t* o
9 _, s8 Z7 J3 g# Y" [. c* G
6 U2 [; R# U/ O$ O, _4 U! \3 j W' y, S; z, L
第六步,设置等长规则
1 x y+ L7 k6 }6 ~ g) Z* @
# @) t. ]8 T; A2 B; u! p3 x/ j, O对于数据线,DDR1/2与DDR3的规则是一致的:每个BYTE与各自的DQS,DQM等长,即DQ0:7与DQS0,DQM。等长,DQ8:15与DQS1,DQM1等长,以此类推。8 G/ a. L: }& |( w
9 Z! D8 x& ?' C# J) O5 R' lDDR2数据线等长规则举例
; ~8 S) P4 g! [8 a
* Z$ m- q5 Q4 }/ G
$ G! d2 Q( Z, B) L1 b2 i/ F8 M* y1 y& j' z- q! c4 r7 Y$ x& n
DDR3数据线等长规则举例) }8 _% x1 Z3 i/ p& p
8 ]6 g# R0 o" R8 u" W7 V, B; j2 D2 P9 a2 j
7 h9 w2 n& ], K! [0 ?, N
3 Z5 s0 e, W' j' [# L' Y
地址线方面的等长,要特别注意,DDR1/2与DDR是很不一样的。1 P4 g- g0 x2 k+ U: I% b* z
6 S9 o- Y0 g% x. i" g5 H1 Q对于DDR1/2,需要设定每条地址到达同一片DDR的距离保持等长,如下图。
" E5 T/ z ]$ r0 J7 ?/ B' I$ u2 X A6 {$ J9 a" J
3 J0 }( ~5 Z& q
& M1 f7 E( s5 K2 `: M/ g4 T$ `9 x8 A对于DDR3,地址线的等长往往需要过孔来配合,具体的规则均绑定在过孔上和VTT端接电阻上,如下图。可以看到,CPU的地址线到达过孔的距离等长,过孔到达VTT端接电阻的距离也等长。; p8 u5 y" K8 {; g/ C6 t
. p+ y! L- ]9 P4 D. n6 I
- i$ v* P! k) u. n+ z: W
% ]7 F, T1 @) A! y补充一点,很多时候,地址线的等长要求不严格,这一点我还没有尝试过。在本人设计的这些产品中,地址线,数据线都做了25mil的Relative Propagation Delay的等长规则设定。关于等长规则设定的细节在这里不再赘述,有兴趣的话,可以发邮件给无线时代。
+ Q7 p* L4 C2 a" c6 Q3 ?
( @1 m% I, u6 x: e, N' A+ d第七步,绕等长
l( ?9 f9 m: A/ k9 R
, u" q. z4 O: |" }+ \完成等长规则的设定后,最后一步也是工作量最大的一步:绕等长。$ x8 S0 y! _# i/ g& v5 c
7 q! n5 N3 q1 r q. Z/ y在这一步,我认为只有一点规则需要注意:尽量采用3倍线宽,45度角绕等长,如下图。
3 V5 K# x0 L6 B# ^5 ]( l' T7 X1 Q. M$ l9 J" ~3 }, ]& J
; ]$ i8 l: E" ~5 G- l0 }6 t" Y5 e7 w8 x) s
绕等长完成后,最好把DDR相关网络锁定,以免误动。4 n* a- |; Q+ P3 s0 n3 Q
6 L) L7 n6 B* }9 G( K' o# `
7 i2 a5 b$ R$ }( `
7 V+ t9 b3 I- X! {2 U9 Z到这里,DDR走线就已经完成了,在本人设计过的三,四十种产品中,都是按照上面的规则与过程完成的,DDR2最高规格是DDR2-800,512MB,DDR3最高规格是DDR3-1600,1GB,都可以很稳定的工作,无论性能还是可靠性,都未曾出过问题。 W6 x4 I0 @! o
" r7 X2 J; |, f" c& V% i7 s6 X
; q; f' V8 c( G/ B9 u3 r |
评分
-
查看全部评分
|