|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
. H7 ]) V% Q$ D+ u7 i- F6 E多年前,无线时代发布了一篇文章关于DDR布线指导的一篇文章,当时在网络上很受欢迎,有很多同行参与了转载。如今看来,那篇文章写得不够好,逻辑性不强,可操作性也不强。在近几年的硬件产品开发中,本人总结出了一套DDR布线方法,具有高度的可行性,于是本人再次编写一份这样的文章,除了讲述DDR布线规则,还想讲述一下布线过程,采用本人的布线过程可以少走很多弯路。本文即将讲到的所有方法,无线时代都经过实际检验。
% L! u! M# v6 J% Q5 ?6 \9 S1 t. d5 U, N7 U$ a
DDR布线通常是一款硬件产品设计中的一个重要的环节,也正是因为其重要性,网络上也有大把的人在探讨DDR布线规则,有很多同行故弄玄虚,把DDR布线说得很难,我在这里要反其道而行之,讲一讲DDR布线最简规则与过程。
5 E. ?4 w/ k5 o4 W/ B- [# G1 `3 Y) G; t# o4 q/ z0 s6 }
如果不是特别说明,每个步骤中的方法同时适用于DDR1,DDR2和DDR3。PCB设计软件以cadence Allgro 16.3为例。( K4 p( r0 W8 v
, R, m5 F+ u) F7 ~1 {; M6 s! w
第一步,确定拓补结构(仅在多片DDR芯片时有用)
. D/ f( D- {- D# o; l; P* s! @' n; T% x3 i$ n% l& A1 X9 g7 }1 j
首先要确定DDR的拓补结构,一句话,DDR1/2采用星形结构,DDR3采用菊花链结构。: r; _. n) T, [/ T9 H' N
) F9 g+ Q" |5 I5 A拓补结构只影响地址线的走线方式,不影响数据线。以下是示意图。
4 l# \9 h! n# T l% V. G0 J5 `0 u0 n) L! G! e3 t6 q% z4 c
% d5 d# _" g7 v# @5 }7 `$ T
9 A: |" x x }5 `: j4 R9 v$ J' ~
星形拓补就是地址线走到两片DDR中间再向两片DDR分别走线,菊花链就是用地址线把两片DDR“串起来”,就像羊肉串,每个DDR都是羊肉串上的一块肉,哈哈,开个玩笑。' G) U2 }- I! g+ q0 X+ P, i6 F
0 s L e' Z' f
$ y- g, I% f; z8 |' P9 r) _: N w, Z9 }
第二步,元器件摆放3 t9 _& n% H1 H/ _% b8 D
9 S/ d; N2 a( D' H
确定了DDR的拓补结构,就可以进行元器件的摆放,有以下几个原则需要遵守:
2 `: M% p4 V5 O" T. b, V( G# o) i2 U! I2 T0 Z J+ L
原则一,考虑拓补结构,仔细查看CPU地址线的位置,使得地址线有利于相应的拓补结构
- }) ?8 b: g# |4 H# Q' D3 P( S/ w( B' ]' w& d: x$ R
原则二,地址线上的匹配电阻靠近CPU) }- ~, i5 D0 r" R# f7 ]
* A- f, V; t( I: v
原则三,数据线上的匹配电阻靠近DDR
4 Y% a. a" A# E3 A. G2 g- I8 V: r9 U6 |% }, X K
原则四,将DDR芯片摆放并旋转,使得DDR数据线尽量短,也就是,DDR芯片的数据引脚靠近CPU. X( o9 U4 W9 A( q8 _
- P% u2 k& r o0 ~4 P, W9 E原则五,如果有VTT端接电阻,将其摆放在地址线可以走到的最远的位置。一般来说,DDR2不需要VTT端接电阻,只有少数CPU需要;DDR3都需要VTT端接电阻。; W# R+ S0 X' h4 E
7 i# @+ ?; {3 _2 O/ c原则六,DDR芯片的去耦电容放在靠近DDR芯片相应的引脚; }3 Y: l1 Z9 R; e- `
; Y' U+ z$ s. A: I* ^, I# Y( O$ \
以下是DDR2的元器件摆放示意图(未包括去耦电容),可以很容易看出,地址线可以走到两颗芯片中间然后向两边分,很容易实现星形拓补,同时,数据线会很短。: d0 t3 {. p& r3 O! |
( V) u+ P" J$ x' j3 \0 _- ?
: ~! ^% z# x# e2 F& z$ o/ n4 D Z8 ?$ @2 E- W# Z4 A- M7 b o" N# ^
以下是带有VTT端接电阻的DDR2元器件摆放示意图,在这个例子中,没有串联匹配电阻,VTT端接电阻摆放在了地址线可以到达的最远距离。* { m% ]8 D% @& j1 j1 \0 c
# P3 j( s; m2 a2 H/ e' H+ A; {2 {
) I2 D* c9 y- Z" Q$ D+ b; t8 {( m2 G* ~
以下是DDR3元器件摆放示意图,请注意,这里使用的CPU支持双通道DDR3,所以看到有四片(参考设计是8片)DDR3,其实是每两个组成一个通道,地址线沿着图中绿色的走线传递,实现了菊花链拓补。地址线上的VTT端接电阻摆放在了地址线可以到达的最远的地方。同样地,数据线上的端接电阻也放置在了靠近DDR3芯片的位置,数据线到达CPU的距离很短。同时,可以看到,去耦电容放置在了很靠近DDR3相应电源引脚的地方。
! Z, F% k% M g$ Z1 l6 a# l
; D+ X5 F/ Z! H2 B
0 I% e2 S8 D5 |, v: J2 q" ~
4 ?! Z |' {$ d' f第三步,设置串联匹配电阻的仿真模型
9 L% m4 s+ U6 j* K5 b0 V9 e; t* h: ?! R* Y2 {
摆放完元器件,建议设置串联匹配电阻的仿真模型,这样对于后续的布线规则的设置是有好处的。
$ M9 o4 E+ r8 ?- @; ]# j. V, k6 M8 I S; h7 M: X
点击AnalyzeSI/EMI SimModel Assignment,如下图。! z. q$ }! t. Q5 ?0 d
3 d7 u0 L* h# M9 D# d- m; F' p
3 y; ^4 }7 H# W/ ]( S$ b$ j% @
% S8 F. u. a8 m& ^
然后会出来Model Assignment的界面,如下图
1 o# X) a5 i0 y$ i. c! | a5 Z( E( {$ j- y
1 N9 z* ?& C8 l0 X2 m
4 O) ]7 s. W$ _# G- t3 K
然后点击需要设置模型的器件,通常就是串联匹配电阻,分配或创建合适的仿真的模型,如果不知道如何创建,请在互联网上搜索或发邮件给无线时代。9 Z4 @' F4 _! H% p% x) N; g$ c
0 U& e# b. [' m- @9 e5 z8 m# V Z* o
N. _2 X/ q3 A$ i+ W
7 b6 }% F; f' X* _- v分配好仿真模型之后的网络,使用Show Element命令,可以看到相关的XNET属性,如下图。
/ r& V' p- M0 Z) l0 ?* y0 L- i$ i/ P) l
6 d( g8 S- P0 x( d" T5 d- l
. m4 P9 T" O6 b3 D/ J3 S0 Y
第四步,设置线宽与线距
9 p. g* R4 o& c. `2 r$ G8 v" S1 Y: L3 e" j
1. DDR走线线宽与阻抗控制密切相关,经常可以看到很多同行做阻抗控制。对于纯数字电路,完全有条件针对高速线做单端阻抗控制;但对于混合电路,包含高速数字电路与射频电路,射频电路比数字电路要重要的多,必须对射频信号做50欧姆阻抗控制,同时射频走线不可能太细,否则会引起较大的损耗,所以在混合电路中,本人往往舍弃数字电路的阻抗控制。到目前为止,本人设计的混合电路产品中,最高规格的DDR是DDR2-800,未作阻抗控制,工作一切正常。: f, i( a0 B4 o
8 T! [% E+ k0 O5 }2. DDR的供电走线,建议8mil以上,在allegro可以针对一类线进行物理参数的同意设定,我本人喜欢建立PWR-10MIL的约束条件,并为所有电源网络分配这一约束条件,如下图。( e- y4 ~$ h5 w% u
6 \8 y# m5 S( F( H5 a% b
& e" n) ]7 O/ t; }( F# J
# E U5 {: ?* g3. 线距部分主要考虑两方面,一是线-线间距,建议采用2W原则,即线间距是2倍线宽,3W很难满足;二是线-Shape间距,同样建议采用2W原则。对于线间距,也可以在Allegro中建立一种约束条件,为所有DDR走线(XNET)分配这样的约束条件,如下图。# G+ g; k/ p0 y1 W5 D
! w+ h8 M1 ^) F/ ~, ^; {( X% P- Q; ]. _3 V, A
4. 还有一种可能需要的规则,就是区域规则。Allegro中默认的线宽线距都是5mil,在CPU引脚比较密集的时候,这样的规则是无法满足的,这就需要在CPU或DDR芯片周围设定允许小间距,小线宽的区域规则,如下图。
: Q1 N: R3 f- ^* r* g& p. G3 m- f1 F. ^! z7 N8 X) u
& j6 G$ Q9 [/ K( K. j
2 U" z7 U6 i% v第五步,走线
6 K& G- ~3 r: F/ a
; \3 @2 d* @& n) v8 B走线就需要注意的内容比较多,这里只做少许说明。9 v4 U1 J! }, d: u' d4 m* x N9 w
* i% P" n7 V' Z- 所有走线尽量短
- 走线不能有锐角
- 尽量少打过孔
- 保证所有走线有完整的参考面,地平面或这电源平面都可以,对于交变信号,地与电源平面是等电位的
- 尽量避免过孔将参考面打破,不过这在实际中很难做到
- 走完地址线和数据后,务必将DDR芯片的电源脚,接地脚,去耦电容的电源脚,接地脚全部走完,否则在后面绕等长时会很麻烦的, U& b' J. \4 a2 f& M4 ~
/ U9 @/ c# c3 }: r6 r0 o5 O) T# d& u
下图是完成的DDR走线,但尚未绕等长。$ h6 t/ X0 H0 {2 j) y
) y) W w, N+ S
# ]1 ~& A8 c K. x* L! Q
( k8 X; h7 O. N! S7 U7 Z8 e/ ?6 y第六步,设置等长规则
+ L, `& D! c) g0 b m
' I* d- T8 A0 H+ b, j对于数据线,DDR1/2与DDR3的规则是一致的:每个BYTE与各自的DQS,DQM等长,即DQ0:7与DQS0,DQM。等长,DQ8:15与DQS1,DQM1等长,以此类推。
8 R: R8 X3 d: E" ^4 V7 N: g8 w' ^/ D$ ~2 `' H! u; ^, l8 z
DDR2数据线等长规则举例/ ^- L; m; {3 ]6 t# _1 H1 D+ v
W4 [3 m1 y' h5 \# z) d
! W8 V' P) {; H4 Q
8 n, A# L5 p! R) p) D- G
DDR3数据线等长规则举例
, c# j* u' v5 l) @3 i6 B m+ c, J4 x( T4 X; I
8 a+ j* U# r4 O( C7 p: H" b; u0 C X& s) c, n6 g
地址线方面的等长,要特别注意,DDR1/2与DDR是很不一样的。
; m" S- Y7 `0 v& A! i3 `3 o
; w8 W# \2 y2 \对于DDR1/2,需要设定每条地址到达同一片DDR的距离保持等长,如下图。" v" z5 s/ v6 h- \0 j
9 y, E: |( R) ^ y
, p! q, c& E. p4 s1 i3 @
3 }& @, T' g" F, F y对于DDR3,地址线的等长往往需要过孔来配合,具体的规则均绑定在过孔上和VTT端接电阻上,如下图。可以看到,CPU的地址线到达过孔的距离等长,过孔到达VTT端接电阻的距离也等长。+ {$ c' {+ o7 y" J. \8 n4 [
4 S( D* E- S, @. |* O8 G( d2 Y) E( c1 Q3 L
. b# K& [# @7 S: |; h4 z7 _
/ f) }& Y5 o9 l# V- @
补充一点,很多时候,地址线的等长要求不严格,这一点我还没有尝试过。在本人设计的这些产品中,地址线,数据线都做了25mil的Relative Propagation Delay的等长规则设定。关于等长规则设定的细节在这里不再赘述,有兴趣的话,可以发邮件给无线时代。
+ j$ I' I2 [4 b" E1 [5 x$ @1 E0 z0 D, F8 {1 \
第七步,绕等长% I% |) \. ?9 H
9 y2 X# s- e4 S$ i; R- L
完成等长规则的设定后,最后一步也是工作量最大的一步:绕等长。' ?% ^0 U7 O4 H- t$ B
: I6 x: |2 g" f. n* c# i在这一步,我认为只有一点规则需要注意:尽量采用3倍线宽,45度角绕等长,如下图。
4 n. A d2 _9 P# z) D6 _% D* _- o# b+ x! z' {7 i `
) t1 u+ |1 B# {$ A
. s7 `' M! T" o! e绕等长完成后,最好把DDR相关网络锁定,以免误动。$ @: I+ i& j+ s. T6 s! [6 H
) {' g" m9 ^. a
& u1 H( F @( U0 n. N0 J5 D" N( H; G
到这里,DDR走线就已经完成了,在本人设计过的三,四十种产品中,都是按照上面的规则与过程完成的,DDR2最高规格是DDR2-800,512MB,DDR3最高规格是DDR3-1600,1GB,都可以很稳定的工作,无论性能还是可靠性,都未曾出过问题。6 p+ d8 G* g [8 j% m4 l2 R& n1 {3 M% c) {
$ m- Y$ A$ m- \+ J: |- d& [1 [9 V1 J* D
) C" C, w& L1 j' J: S- _7 |
|
评分
-
查看全部评分
|