|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
4 @+ t) w$ g2 s, I7 Z, O# C- ?
多年前,无线时代发布了一篇文章关于DDR布线指导的一篇文章,当时在网络上很受欢迎,有很多同行参与了转载。如今看来,那篇文章写得不够好,逻辑性不强,可操作性也不强。在近几年的硬件产品开发中,本人总结出了一套DDR布线方法,具有高度的可行性,于是本人再次编写一份这样的文章,除了讲述DDR布线规则,还想讲述一下布线过程,采用本人的布线过程可以少走很多弯路。本文即将讲到的所有方法,无线时代都经过实际检验。3 s! ^4 w! M: y; G/ ^0 g
2 [ h, l( g J5 V: p2 ?
DDR布线通常是一款硬件产品设计中的一个重要的环节,也正是因为其重要性,网络上也有大把的人在探讨DDR布线规则,有很多同行故弄玄虚,把DDR布线说得很难,我在这里要反其道而行之,讲一讲DDR布线最简规则与过程。7 r; y& T- _! J2 [; A) K
: X# G6 _. V$ ^1 [) P6 H# [如果不是特别说明,每个步骤中的方法同时适用于DDR1,DDR2和DDR3。PCB设计软件以cadence Allgro 16.3为例。
( o6 d# n$ L7 b
; h& e1 @" i1 Q5 D+ e' {( x2 B第一步,确定拓补结构(仅在多片DDR芯片时有用)
2 L& j; e# W0 x& o: E
8 X1 s0 K, j5 k+ c8 N* h7 b首先要确定DDR的拓补结构,一句话,DDR1/2采用星形结构,DDR3采用菊花链结构。6 {. I8 o, g: `; N+ E1 W
1 P2 A: ?8 |7 q1 k& C+ s' Y
拓补结构只影响地址线的走线方式,不影响数据线。以下是示意图。
, E1 ~6 K, G( {: R) e3 Y. O8 y' M( e2 S: h6 q
: H9 y! C5 t: r. |, f$ c
0 ]# K: [1 `4 \$ b4 C
星形拓补就是地址线走到两片DDR中间再向两片DDR分别走线,菊花链就是用地址线把两片DDR“串起来”,就像羊肉串,每个DDR都是羊肉串上的一块肉,哈哈,开个玩笑。6 U/ v0 w2 {2 J
E+ o. m; g3 y4 O9 p/ O# @0 X4 D2 H) X
% i' d" n7 R' c# ?7 k' k第二步,元器件摆放! T1 n1 `% J' l: t' a5 n6 e4 B
1 T! G4 ]& L6 ~% s- N! j6 ^: g确定了DDR的拓补结构,就可以进行元器件的摆放,有以下几个原则需要遵守:; g3 T. l1 w/ y5 y4 E( k
- m2 a1 I# R; T) ^# c5 U% R原则一,考虑拓补结构,仔细查看CPU地址线的位置,使得地址线有利于相应的拓补结构( `& h# u* N9 a4 Q; ~# T2 R X% F% N
4 ]! r5 }0 Y6 c% }原则二,地址线上的匹配电阻靠近CPU* X9 X9 s. U D) Q
) k. s K5 t0 E" _ s# @原则三,数据线上的匹配电阻靠近DDR
; {+ t: R8 U9 J! t. w. |& N+ J: Z8 p* X5 r8 {) F
原则四,将DDR芯片摆放并旋转,使得DDR数据线尽量短,也就是,DDR芯片的数据引脚靠近CPU
2 l) K" V( H5 C1 O8 C0 x4 d; {6 x$ B6 J( R! y1 o( w0 b* r F
原则五,如果有VTT端接电阻,将其摆放在地址线可以走到的最远的位置。一般来说,DDR2不需要VTT端接电阻,只有少数CPU需要;DDR3都需要VTT端接电阻。, h& I% P: G; d# Q2 }. s8 r
: u+ z) a5 l( L: b5 I# V8 ]" I' ], @原则六,DDR芯片的去耦电容放在靠近DDR芯片相应的引脚3 ~3 }1 L; @* T
, F. R. @; _% U& R/ u$ Q3 Z1 [
以下是DDR2的元器件摆放示意图(未包括去耦电容),可以很容易看出,地址线可以走到两颗芯片中间然后向两边分,很容易实现星形拓补,同时,数据线会很短。7 ]% @: Z( e* q
- p/ A5 D- Z2 f1 J/ \, x9 c. s ~
* Z9 i* z# B# d
- m8 J7 K5 X5 M9 y! b8 e
以下是带有VTT端接电阻的DDR2元器件摆放示意图,在这个例子中,没有串联匹配电阻,VTT端接电阻摆放在了地址线可以到达的最远距离。
( @ G. r- w5 ?' P, W2 U
* [! a$ V: l- G( z, i5 R
' H0 K. Y6 Y1 P3 L3 x5 \
- t1 j5 {- ?; Q; J8 g5 B以下是DDR3元器件摆放示意图,请注意,这里使用的CPU支持双通道DDR3,所以看到有四片(参考设计是8片)DDR3,其实是每两个组成一个通道,地址线沿着图中绿色的走线传递,实现了菊花链拓补。地址线上的VTT端接电阻摆放在了地址线可以到达的最远的地方。同样地,数据线上的端接电阻也放置在了靠近DDR3芯片的位置,数据线到达CPU的距离很短。同时,可以看到,去耦电容放置在了很靠近DDR3相应电源引脚的地方。
$ z) e% r; S8 D
! t, I/ L* W- P* Z: L! G, ?4 D
$ |; {3 [; W: R
9 \$ h/ [* [+ c8 [第三步,设置串联匹配电阻的仿真模型
& z8 u/ O8 c$ r4 }7 J0 J* L
3 K! A9 I: y+ D1 p摆放完元器件,建议设置串联匹配电阻的仿真模型,这样对于后续的布线规则的设置是有好处的。! c5 C" O4 t. t3 X7 B8 o0 N
. h& h; r. c: t0 L. E6 x$ N
点击AnalyzeSI/EMI SimModel Assignment,如下图。* a F' f. t3 g; h! u
* V9 V, m/ v: f* _
1 Y( F5 Y: @0 y+ G. N' S A8 l* c1 W" r0 o* }% a
然后会出来Model Assignment的界面,如下图
: c5 C5 ]0 [! C
1 W9 X) \# _9 s, X8 \- k
* e( |3 X3 ?; X+ Q, A
6 _. M' G& W0 |然后点击需要设置模型的器件,通常就是串联匹配电阻,分配或创建合适的仿真的模型,如果不知道如何创建,请在互联网上搜索或发邮件给无线时代。" `- L% }" o+ C: d0 g" l+ C
, T/ W! M9 a& a- Y `1 X
) z4 X6 u4 N" a4 y- d. {: N3 e4 \( [5 I
分配好仿真模型之后的网络,使用Show Element命令,可以看到相关的XNET属性,如下图。
. Z9 t: T" R4 [
3 h. L8 F# _- h6 d2 q8 o
6 R% N1 Y7 u# O) G# _0 i
4 X" B! p& ~! [- {4 D2 ^
第四步,设置线宽与线距
) Z0 t g8 d. g/ d% A' f5 y
" S1 |# p0 }! q1. DDR走线线宽与阻抗控制密切相关,经常可以看到很多同行做阻抗控制。对于纯数字电路,完全有条件针对高速线做单端阻抗控制;但对于混合电路,包含高速数字电路与射频电路,射频电路比数字电路要重要的多,必须对射频信号做50欧姆阻抗控制,同时射频走线不可能太细,否则会引起较大的损耗,所以在混合电路中,本人往往舍弃数字电路的阻抗控制。到目前为止,本人设计的混合电路产品中,最高规格的DDR是DDR2-800,未作阻抗控制,工作一切正常。
4 M4 u% _3 [' [* \2 s1 S+ O" v& o% L, `' v
2. DDR的供电走线,建议8mil以上,在allegro可以针对一类线进行物理参数的同意设定,我本人喜欢建立PWR-10MIL的约束条件,并为所有电源网络分配这一约束条件,如下图。
# ]+ i: e/ _$ \0 j! Y. @1 k; \/ c# V
$ q- ^0 m7 d( N" l2 V" C: e, H1 v, M
2 p* V, V e% H7 m* X3. 线距部分主要考虑两方面,一是线-线间距,建议采用2W原则,即线间距是2倍线宽,3W很难满足;二是线-Shape间距,同样建议采用2W原则。对于线间距,也可以在Allegro中建立一种约束条件,为所有DDR走线(XNET)分配这样的约束条件,如下图。
# | m& c" A5 ], Y0 s* \
' r. j$ C5 X/ i
8 j/ I/ n& c% F% u3 x! A4. 还有一种可能需要的规则,就是区域规则。Allegro中默认的线宽线距都是5mil,在CPU引脚比较密集的时候,这样的规则是无法满足的,这就需要在CPU或DDR芯片周围设定允许小间距,小线宽的区域规则,如下图。
2 z: v: I6 @) j2 G/ F- G- j( n# E* U; H C2 q0 T- i
3 i6 u4 c, X6 f) S* d
! x- C' A& W, }第五步,走线
' o u/ |, i- {2 s9 A
) E. p# U6 _* M2 z% \, D! U/ u走线就需要注意的内容比较多,这里只做少许说明。
8 R. k; s/ E* N% v
5 D) x. ?8 G% S! ?% x8 _( n- 所有走线尽量短
- 走线不能有锐角
- 尽量少打过孔
- 保证所有走线有完整的参考面,地平面或这电源平面都可以,对于交变信号,地与电源平面是等电位的
- 尽量避免过孔将参考面打破,不过这在实际中很难做到
- 走完地址线和数据后,务必将DDR芯片的电源脚,接地脚,去耦电容的电源脚,接地脚全部走完,否则在后面绕等长时会很麻烦的) H8 f! p9 Y: ]/ u
5 [% r- U4 w# T# R: t- u下图是完成的DDR走线,但尚未绕等长。& i; Q; {3 n. D' u
! X% A1 V. I% t" e' K
$ X) P# y: ^7 `- u2 L
0 @0 F% _' P6 o7 r( I6 w9 {第六步,设置等长规则5 z" w L4 ]/ B" P
- {% A+ t# r0 I. F! l! S" r2 U9 E对于数据线,DDR1/2与DDR3的规则是一致的:每个BYTE与各自的DQS,DQM等长,即DQ0:7与DQS0,DQM。等长,DQ8:15与DQS1,DQM1等长,以此类推。; [; ~) d% B/ k: r( B
4 h& O3 W9 G0 _2 j5 x- o
DDR2数据线等长规则举例
: F* J# d# B5 g+ _$ K6 n1 Q8 s6 I: Q, A0 m+ v! e/ `
3 Z0 x( N& E5 [( Y2 O8 A$ a& s: u
9 j' u, {! |& |3 S9 a4 t' z* _DDR3数据线等长规则举例( U+ Z! O o2 }9 g0 B
6 e$ a1 ^) w& Z* G ]9 B) \! s- c' I
& g$ e8 V0 _$ b2 s2 e- F; c! Q7 Y4 Y# B7 k/ Q7 A
地址线方面的等长,要特别注意,DDR1/2与DDR是很不一样的。
* I5 }$ l7 ]% J% H6 E2 f# _
m; x- N' g: F7 y; \对于DDR1/2,需要设定每条地址到达同一片DDR的距离保持等长,如下图。 j+ C/ l5 j9 v
& `# z9 G( S8 U. \" w
- d, s! N+ {0 h' X4 k4 s$ B
/ T, I! \: b+ A! n$ v
对于DDR3,地址线的等长往往需要过孔来配合,具体的规则均绑定在过孔上和VTT端接电阻上,如下图。可以看到,CPU的地址线到达过孔的距离等长,过孔到达VTT端接电阻的距离也等长。* b8 R0 A6 o _9 P" ^
. V5 [& u# L- P# N
( @" K Y N3 n( a% V% N X- z$ @2 n3 h
补充一点,很多时候,地址线的等长要求不严格,这一点我还没有尝试过。在本人设计的这些产品中,地址线,数据线都做了25mil的Relative Propagation Delay的等长规则设定。关于等长规则设定的细节在这里不再赘述,有兴趣的话,可以发邮件给无线时代。- p; Q/ H3 X. g2 v6 m! X8 R- p' w# V
; \! u: T% U9 M' r: N9 e1 N
第七步,绕等长" o+ n! {: T, B# s, p- v
! _8 H7 t/ Q, N# y
完成等长规则的设定后,最后一步也是工作量最大的一步:绕等长。! d- z" \3 A" w/ ]: t! t8 V" J# H* L
7 o. y) g; g3 t( R
在这一步,我认为只有一点规则需要注意:尽量采用3倍线宽,45度角绕等长,如下图。
# i" j* v1 X2 A" {: z3 A3 o( u; z2 y- g; [1 s( F# w$ s
3 u b2 Q; Q$ _$ B
: W$ R3 o. g( t5 m) c x绕等长完成后,最好把DDR相关网络锁定,以免误动。8 U+ y: L: F( e7 r1 |9 s) @& X
" k5 b i2 [$ k$ a8 M4 J
( d6 G2 O6 o$ E- L/ c7 s
& o- C( Z% X0 ^2 j到这里,DDR走线就已经完成了,在本人设计过的三,四十种产品中,都是按照上面的规则与过程完成的,DDR2最高规格是DDR2-800,512MB,DDR3最高规格是DDR3-1600,1GB,都可以很稳定的工作,无论性能还是可靠性,都未曾出过问题。
@5 J9 p* Z3 @
; D* D5 e8 ?; d% c% G2 ~. [5 ^) s4 y3 y- `
|
评分
-
查看全部评分
|