|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, [! o/ Q2 B3 w3 G4 b
多年前,无线时代发布了一篇文章关于DDR布线指导的一篇文章,当时在网络上很受欢迎,有很多同行参与了转载。如今看来,那篇文章写得不够好,逻辑性不强,可操作性也不强。在近几年的硬件产品开发中,本人总结出了一套DDR布线方法,具有高度的可行性,于是本人再次编写一份这样的文章,除了讲述DDR布线规则,还想讲述一下布线过程,采用本人的布线过程可以少走很多弯路。本文即将讲到的所有方法,无线时代都经过实际检验。
- n2 n/ {8 J4 t, i" J, ]- D
! O' M! q( v: I9 XDDR布线通常是一款硬件产品设计中的一个重要的环节,也正是因为其重要性,网络上也有大把的人在探讨DDR布线规则,有很多同行故弄玄虚,把DDR布线说得很难,我在这里要反其道而行之,讲一讲DDR布线最简规则与过程。+ m- H5 s0 `0 F+ v" a
3 t/ i. A4 G" F6 d如果不是特别说明,每个步骤中的方法同时适用于DDR1,DDR2和DDR3。PCB设计软件以cadence Allgro 16.3为例。' o, O, X# L6 C7 H
) b e G6 S) y% s% z第一步,确定拓补结构(仅在多片DDR芯片时有用)" p- ^+ e2 \7 N/ Y8 H
9 {* J( K6 i4 S. d首先要确定DDR的拓补结构,一句话,DDR1/2采用星形结构,DDR3采用菊花链结构。; x2 d' I4 P; W' v( a5 V
* p& c7 n3 t6 A4 c& i
拓补结构只影响地址线的走线方式,不影响数据线。以下是示意图。9 w3 a2 d+ t9 K- o) f0 B
& p, `4 F* O$ `: G0 b
! P0 J/ J& j# r6 U6 m
2 U% S+ g1 r, ^5 W- ?, s星形拓补就是地址线走到两片DDR中间再向两片DDR分别走线,菊花链就是用地址线把两片DDR“串起来”,就像羊肉串,每个DDR都是羊肉串上的一块肉,哈哈,开个玩笑。
/ s8 S$ o2 V% z: D$ o; f0 c- ^% R3 A& i3 H
# _8 g) T4 M! c, s& h+ `/ z- `, K0 b7 v! Y5 W: j
第二步,元器件摆放
5 }$ E3 }) Q; S$ ^# u/ b9 C8 u* I4 p3 ?2 ~$ D5 a
确定了DDR的拓补结构,就可以进行元器件的摆放,有以下几个原则需要遵守:
" Q8 y5 U2 D( o8 |% d7 e V5 e+ L" U5 s
原则一,考虑拓补结构,仔细查看CPU地址线的位置,使得地址线有利于相应的拓补结构
! i6 \) `, @3 b6 o" Z" E) s
5 S: L- F6 S' U& @/ ?0 v原则二,地址线上的匹配电阻靠近CPU7 S# }& u% L6 z+ m% X. w
- V' z/ b8 ^/ z4 H原则三,数据线上的匹配电阻靠近DDR
8 ~8 u) G: J( b% y& k: i$ J, P, H: F, y% @* z! [2 F7 o
原则四,将DDR芯片摆放并旋转,使得DDR数据线尽量短,也就是,DDR芯片的数据引脚靠近CPU
, p5 Z. C" Q4 x8 ^0 J! [
* e% m! q" m6 d( }原则五,如果有VTT端接电阻,将其摆放在地址线可以走到的最远的位置。一般来说,DDR2不需要VTT端接电阻,只有少数CPU需要;DDR3都需要VTT端接电阻。1 S3 S5 a" [4 H* ]+ x. m! \4 X
% _, H t w S9 Q1 I
原则六,DDR芯片的去耦电容放在靠近DDR芯片相应的引脚 G' A N* l2 @' {% y. C
) }3 N3 p; n t以下是DDR2的元器件摆放示意图(未包括去耦电容),可以很容易看出,地址线可以走到两颗芯片中间然后向两边分,很容易实现星形拓补,同时,数据线会很短。
& `0 X6 S8 m8 L4 e
1 t) Y/ N. e0 n% _ ?
4 ?, n; f' r3 A: B9 N7 T
% M$ T! ~6 ~7 o& P9 b7 M; `4 k' e以下是带有VTT端接电阻的DDR2元器件摆放示意图,在这个例子中,没有串联匹配电阻,VTT端接电阻摆放在了地址线可以到达的最远距离。
# \1 o( n$ \ L1 [& d7 m# j! U' m9 Y% e3 ]$ G0 B/ ]
+ ^7 Q, A: q1 |6 f
, _9 v4 E) t k; i5 _以下是DDR3元器件摆放示意图,请注意,这里使用的CPU支持双通道DDR3,所以看到有四片(参考设计是8片)DDR3,其实是每两个组成一个通道,地址线沿着图中绿色的走线传递,实现了菊花链拓补。地址线上的VTT端接电阻摆放在了地址线可以到达的最远的地方。同样地,数据线上的端接电阻也放置在了靠近DDR3芯片的位置,数据线到达CPU的距离很短。同时,可以看到,去耦电容放置在了很靠近DDR3相应电源引脚的地方。7 Z7 k2 P. s3 I% @, k K3 W
& i6 P& {4 K6 T' C: ]
# i3 Q4 K. j2 \: t
6 q3 v* r, C5 K/ k& I4 r第三步,设置串联匹配电阻的仿真模型
8 E$ \* J7 {3 I( ?, X) W
2 \3 e6 h: q, s摆放完元器件,建议设置串联匹配电阻的仿真模型,这样对于后续的布线规则的设置是有好处的。
: J: c+ k' V2 D& P9 k! ?5 \: a: y7 Z1 x8 ]* m- o
点击AnalyzeSI/EMI SimModel Assignment,如下图。' W/ G" s$ a- B: }5 l
7 R" `0 Z8 X- c
5 ^7 l; I ]0 ]8 c, r) A7 k- }
2 U2 C4 U& v1 V% C7 a, T' b5 r @
然后会出来Model Assignment的界面,如下图$ A# V: M. U6 }2 H
2 N8 k9 `6 s9 j
# i& \5 N! B7 ^& M: F3 W- D+ w
# [0 m1 k+ \/ {! j! z& W5 d
然后点击需要设置模型的器件,通常就是串联匹配电阻,分配或创建合适的仿真的模型,如果不知道如何创建,请在互联网上搜索或发邮件给无线时代。/ B. e8 @1 W! q( O* @; \
+ A- t6 ^# K8 r( [9 y
$ e- [! K4 {, D# N" M' I a1 Z7 b
e: }$ J. N3 o# C- B
分配好仿真模型之后的网络,使用Show Element命令,可以看到相关的XNET属性,如下图。
: A y8 Q" H' ]# F6 s. F- n7 w; b3 n4 P, l5 [; S& I7 L- b
' f. F: W) m; I8 E1 p. q5 H1 l
; @' D& c) L: y
第四步,设置线宽与线距
9 ?# d! n0 b# i" |, Y8 m+ Z. k" N: P% @1 A6 g# b+ E
1. DDR走线线宽与阻抗控制密切相关,经常可以看到很多同行做阻抗控制。对于纯数字电路,完全有条件针对高速线做单端阻抗控制;但对于混合电路,包含高速数字电路与射频电路,射频电路比数字电路要重要的多,必须对射频信号做50欧姆阻抗控制,同时射频走线不可能太细,否则会引起较大的损耗,所以在混合电路中,本人往往舍弃数字电路的阻抗控制。到目前为止,本人设计的混合电路产品中,最高规格的DDR是DDR2-800,未作阻抗控制,工作一切正常。
& }2 {! Z$ O! |' w) h0 F& B9 R5 Z4 b& V( f* _
2. DDR的供电走线,建议8mil以上,在allegro可以针对一类线进行物理参数的同意设定,我本人喜欢建立PWR-10MIL的约束条件,并为所有电源网络分配这一约束条件,如下图。5 n. ?2 D) q* a) }1 Y5 p
! `% p+ l2 U- U3 u! N$ ^
; }+ p6 o- P. @- u2 i5 [8 y0 J
+ [' p5 y! H; c |$ m1 A
3. 线距部分主要考虑两方面,一是线-线间距,建议采用2W原则,即线间距是2倍线宽,3W很难满足;二是线-Shape间距,同样建议采用2W原则。对于线间距,也可以在Allegro中建立一种约束条件,为所有DDR走线(XNET)分配这样的约束条件,如下图。
' ~; C. A: C2 U& e
4 g0 J" U: H1 h6 U0 X3 u2 O
( F! i7 A9 U' r9 S
4. 还有一种可能需要的规则,就是区域规则。Allegro中默认的线宽线距都是5mil,在CPU引脚比较密集的时候,这样的规则是无法满足的,这就需要在CPU或DDR芯片周围设定允许小间距,小线宽的区域规则,如下图。2 [: d" A+ n7 p3 Q+ M3 @2 x! f$ l% l
7 x1 z& s. w6 @& b4 A
# F, W; y" z; `7 d6 b( d4 N( n+ Q% K' _ g/ X8 s
第五步,走线% U7 |7 ^; i0 N9 ^3 _% n0 p: n2 b
3 ?+ m! W9 T+ a) [
走线就需要注意的内容比较多,这里只做少许说明。1 z5 D7 [! u8 n4 [$ ]
& ^3 Z- w \! X' e1 D- 所有走线尽量短
- 走线不能有锐角
- 尽量少打过孔
- 保证所有走线有完整的参考面,地平面或这电源平面都可以,对于交变信号,地与电源平面是等电位的
- 尽量避免过孔将参考面打破,不过这在实际中很难做到
- 走完地址线和数据后,务必将DDR芯片的电源脚,接地脚,去耦电容的电源脚,接地脚全部走完,否则在后面绕等长时会很麻烦的
! U5 N3 N1 D9 T" P. }+ {* Y+ v 7 C3 S0 e7 V# K/ j
下图是完成的DDR走线,但尚未绕等长。
$ R2 r. w+ Q" \9 X4 i2 ^0 L3 x- {. @$ B* B! t
- q$ O. M$ P0 z) b9 V! L" U' L. w" U& F& p- u& `# R/ N# }
第六步,设置等长规则
3 J% `; z# k* V/ D: g& y Z' f" P) _ w s# k' ]
对于数据线,DDR1/2与DDR3的规则是一致的:每个BYTE与各自的DQS,DQM等长,即DQ0:7与DQS0,DQM。等长,DQ8:15与DQS1,DQM1等长,以此类推。
. c# N. y4 c' A% A4 W6 R: W4 Q7 G
/ r5 I6 l" j8 q) \2 oDDR2数据线等长规则举例
( ?( v# }4 {. A) S) n: o9 ?) W, |6 w6 w' J. |0 [/ {$ P
4 B' H5 K+ ]- I" m* p
7 F$ S# M1 v N+ W+ `6 Q- P
DDR3数据线等长规则举例, ]( g- F( x& a! a
( C+ w9 \- {2 L' }- i- L
4 S% x7 P, U; |8 @+ P
( O) N) ?2 j* e) ~+ ^, o地址线方面的等长,要特别注意,DDR1/2与DDR是很不一样的。3 Q* c o7 X3 [4 I
r" Z- Z, s3 Q7 ^9 V* n对于DDR1/2,需要设定每条地址到达同一片DDR的距离保持等长,如下图。
. H: E, E* p5 n- ?& g# y9 N
. Z! I8 H( H. p+ T% {
. b$ t# g& g& |7 A7 j' c
3 x( M) h5 Q* m5 f2 }" d对于DDR3,地址线的等长往往需要过孔来配合,具体的规则均绑定在过孔上和VTT端接电阻上,如下图。可以看到,CPU的地址线到达过孔的距离等长,过孔到达VTT端接电阻的距离也等长。
# v8 B# Z7 N% I4 w+ h9 J+ Y: u5 P) W+ _3 C% v% X
# O) S* I1 w0 J0 U* Y% }
' x. B8 T. n( H* P- q* ^ o补充一点,很多时候,地址线的等长要求不严格,这一点我还没有尝试过。在本人设计的这些产品中,地址线,数据线都做了25mil的Relative Propagation Delay的等长规则设定。关于等长规则设定的细节在这里不再赘述,有兴趣的话,可以发邮件给无线时代。2 N+ g# t" z( \+ h2 z3 F
' K8 O! t* ~8 d% x9 \第七步,绕等长
* v$ }3 F% a7 ]. y9 e
' P; v; q* a6 P" k完成等长规则的设定后,最后一步也是工作量最大的一步:绕等长。
) q& O5 E8 c# ^( L+ i* r" @8 U$ i2 i3 i3 j X* o! o
在这一步,我认为只有一点规则需要注意:尽量采用3倍线宽,45度角绕等长,如下图。, s+ T% g- H- T, w7 D. _
9 j3 T0 b- k: i* G- R
# F3 Z5 ~! \. u* d5 i% q2 K; ?3 ]: Z
. z7 `/ M( U6 f/ m- h" n$ J绕等长完成后,最好把DDR相关网络锁定,以免误动。
! o/ Y2 t9 H: z: @( I2 i- b4 o
# ]3 \! w0 _+ r% ^
. G1 T: H6 {, Z9 U6 f1 @5 @
& q0 i F4 V( q0 _' |' h
到这里,DDR走线就已经完成了,在本人设计过的三,四十种产品中,都是按照上面的规则与过程完成的,DDR2最高规格是DDR2-800,512MB,DDR3最高规格是DDR3-1600,1GB,都可以很稳定的工作,无论性能还是可靠性,都未曾出过问题。
5 v: G9 |- q1 G; @7 n6 P/ M9 L/ q' R- k
7 k% g+ H/ U% N' L# \: z& B# r; J% P' E( ]2 K8 D2 j- r2 M
|
评分
-
查看全部评分
|