|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Allegro 16.0以后版本的约束规则设置较之前有很大改变,对于用惯了15.x的人来说,很多不习惯新的约束管理器。和在对待女人的态度上,恰相反。80后说90后脑残,15.7说16.2脑残,Xp说Vista脑残。Vista确实很脑残。新事物取代旧事物是自然界发展的客观规律。
9 s/ U& A0 s5 G0 Y, Q说明:
4 a& x j. V: m H, |3 W4 X4 b/ ]1本文只介绍了Spacing约束的设置,因为Physical规则通常来说都设置的非常简单。掌握了Spacing规则Physical规则对你来说一定是小Case。另外,Physical规则的设置也写的话,一定显得都是在重复Spacing的设置; 0 A; L6 x7 p% {9 V8 _* X
2文中所有的规则(约束),如不特殊说明默认情况下均指Spacing规则(约束);
: G4 g# Q+ b# f! Q& {% `$ \3对于Electrical的约束,是另一种约束,本文不作讨论。 9 _) m) l5 o0 R. I9 Q
约束的设置方式: 1 k6 c) ^- s/ m* l
1直接的:Net中写数值,
8 S/ x: E: y( n* K2 间接的:创建Constraint Set,然后Assign给Net;
Y) H" e' \. z1 K2 H! u这两种都很常用,后者管理方便。在Physical和Spacing设置中用后者比较好,但是在Electrical中,我看到很多很多的人会混合使用。
4 \7 i i8 p2 J( x0 ]( z4 u使用第二种约束设置方式的约束设置步骤:
1 F2 |. K4 N% }# ^) U' S1约束的对象
/ i* K+ Y- a0 d; y3 ~' U$ ]* `2约束的内容 3 a5 o6 _. i) o9 ?' b
3给对象分配内容
. V5 J U1 A4 s, b这3个步骤默默的引导着所有间接约束的设置。
2 g& I' i4 m* Y$ y: H基本约束
. g" X. b/ Y5 ^% l预备 h4 {6 @+ j+ T. A3 E9 L
先理解:
8 Z' {: m. |1 Y* f4 H. iNet class 2 A y7 O& n' B. R: c7 b, W
Net class-class
' b* U" [# w Q- q' B( N0 C2 ]Region # Y- u* F) O" N( @5 h( A' H4 p3 Z
Region-class
" g5 D5 G4 Z: aRegion-class-class - S/ k; P/ ?8 w8 [! u4 J
Bus + @: V1 E, i/ V* A# {- B
…… 6 ^) N3 j m0 Y! b5 A; j9 @* W+ l1 W
现在不理解,想跳过去。没关系,你早晚都要理解的。
9 ~; ?) N# x# S) E; g \! ?最简单和稍微复杂一点的约束: + o# s; i V. t8 l/ l' d
最简单的就是default的约束,稍微复杂一点的就是修改了一点默认的约束。 / t( Q! @. S7 ?8 B" f7 |. W
再复杂一些的约束: 6 e* ^6 S. @" t, B& o
你可能会想让不断变化的CLK(我们不考虑是不是差分)和其他的线离的远一些。
; h" k& }3 t# u在Constraint Set中Create规则并设置规则的内容:
( m3 G' o X/ R q4 u9 M* gCreat & Set之后
/ Q9 |* l" a4 }' B给Net分配规则: % F4 X* |6 A& s& s9 ?
更高级的约束: 9 |. |) X: I: e1 y' `+ `8 [# f
What Can U Think?
. V7 K8 u, v6 I9 | x有了一根线的约束,贪婪的本性会使你你很快上升到两根线(通常是Diff)和更多线的约束。两根线(Diff)的约束是不敢称更高级约束的,顶多算一种特殊的约束。这里我们讨论更多线的约束。你会想到一组BUS。
" L( M; f A: E接下来,你会Create一组Bus,并且很自然你会在Referenced Spacing CSet里给这组Bus加上约束。那么,我问你,这个Spacing究竟是什么呢?是BUS内部的Space吗?还是BUS和其他线的Space?恐怕你自己也说不清楚。你可能会说是所有的线的Space,包括内部和外部。你似乎觉得自己是对的。那么我再问你:如果BUS_A的Space为Spac_XMIL,BUS_B的Space为Spac_YMIL(X!=Y),BUS_A和BUS_B之间的Space会是多少呢?X?Y?应该都不是。(X+Y)/2?亏你想的出来。 ! X9 z) R: a; Z8 v7 N H
其实你一开始就错了,问题不是这么Easy(当然也不复杂),否则怎么敢叫更高级的约束? + ? d1 |% e Q4 @: B) ?
Create Net Class: 8 D, z$ R! o3 b9 F6 ?! Y5 p
很多人不明白Net中Bus和Class的区别。
: O6 z L- {$ R: H" L相同:都是一组线, + n6 Q9 q( [% X3 O0 M1 q, u
不同:一种是按照功能划分,一种按照规则划分。
; E/ e+ r9 j) P* J7 ]/ p9 F有人会说Bus和Class也可以是一根线,我懒得理朝左右而不是前方,钻牛角尖的人。 ( z2 i5 t* M( k# ^7 y) l- l) o" M; F
这两种化划分是不是有点多此一举?NO,功能相同就规则相同吗? * K" n) d3 k1 ]0 Q- P1 C" F
Net Class是按照功能划分,所以这里我们需要先创建Net Class。 & |, R- ?) K- L% k
Net Class-Class
% x3 g. ^/ S5 c; P/ ?在左侧的Folder区域你可能早就注意到这个神秘的东西了。他将带给我们什么样的惊喜呢?毫无疑问它将成为化解我们之前疑问的有力工具。如何使用呢? 8 H+ T5 j, V6 ?- b! l% M
Net Class-Class:
0 t' D2 I, n9 X4 yBUS和其他线间距:
3 h% ]) \5 D/ w2 _7 h: S- dBUS内部线间距: " K2 W. `& Z3 Z/ H( [
BUS与BUS之间
p( y2 \+ F7 p2 A; uRegion约束 % J6 c; G* F; w7 k% C2 v7 I) J
没错,如你所想,这个约束就是15.X的Area约束。这是个很有意思,并且非常有用的约束。
; n3 M% D( n4 P. ?$ z创建Region: + T2 H/ D$ p2 P/ F1 M9 I
Assign to Region:
. G4 `6 X9 T9 G; VAssign What to Region?
4 \: }4 m4 H" ?0 v$ o+ GRegion!
3 G) X. _2 v5 F8 zAssign Region to Region?
2 }$ z( i5 a5 GFirst Region is具体(即能看得到的)的Region,Second Region is抽象的Region~ * ?7 {, K6 k4 M ^
这是个很有意思的地方。Allegro里面有Assign different pair,Assign Refdes,这里却是Assign()to Region。这个命令放在Logic中是很合理的,但是Cadence公司干脆一不做二不休把这个命令去掉,需要在绘制区域的时候,在control panel中Assign。这时候Assign你就不用说括号中的内容了,因为Assign的肯定是你正在画的东西。Assign Area to Region也有点不妥当吧? $ v2 q6 ^# [' r8 s: }) W
(本文所有操作除了这个绘制约束Region(即具体的Region)在AllegroPCB完成外,其他操作均在约束管理器中完成。)
' ?" @6 ~: a( I* vshape->Rectangular矩形,Control Panel 的option的active class 选Constraint Region, subclass选择all. ' X I6 e0 l1 g, c/ f
assgin to region刚刚在规则管理中建立的区域规则。
( A2 S1 M0 g! J4 Z7 @& r创建sapcing规则 , p1 j8 k/ P* p1 c& @9 Z
按层叠设置间距: 3 z$ [! S$ W) c4 j7 z
Spacing规则分配: ( r- Z$ A5 _7 D3 X/ b" z; H
最高级的约束: - F5 o; K G, K' ]6 Q* E5 K
听到“最高级”你一定很激动,仿佛感觉自己已经练到了九阳神功的第九层。指的是什么? ! B% y$ ^$ o! s: R0 m. r8 m3 M& ^4 Y- A
不要着急,先听我给你罗嗦几句话,这几句话你在除了这篇文章的任何资料上都看不到。 ' F' F0 H2 {: f7 X2 n5 @; [
规则可以分为Physical和Spacing规则,但是你有没有想过分成Line(这里的Line包括Bus,Bus也是Line)规则和Region规则也是很舒服呢?首先,这两个集合可以包括所有的规则而又没有冲突(真的没有冲突吗?);其次,这两个规则的划分会对更高级的约束设置带来意想不到的效果。Line和Region都是带规则的,Line的规则是流动的,Region的规则是固定的。当携带规则长驱直入的Line进入Region将怎么办呢?Region会觉得很爽吗?Line呢?究竟谁会更爽呢?比如一组线内部的间距是10mil,与其它线的间距是20mil,进入特殊的Region之后将使用何种规则? 其实你是导演,你想让谁爽谁就爽。他俩要是都爽了,你也就爽了。很河蟹。
/ a: Q+ N" w) \5 @7 i9 F那么作为导演,你该如何满足他们的需求呢?(说白了就是解决规则冲突,让大家相安无事,共建河蟹PCB。)
- G: L+ T5 F1 b( u3 s( L5 ?( P当不同规则的Class与Class在同一个Region不期而遇,或100个Class在同一个Region不期而遇,后果将怎么样呢?面对如此错中复杂的局面,你将何去何从?
+ W$ ~- l4 z. L. ?$ ICreate Net Class: 0 [/ B( u" Q! e3 L( Z( T. z" B
要是还不明白Class和Bus的区别,再琢磨琢磨。 1 G- D- D4 H- J4 h/ f! J2 p
Create Region-Class。 ; m9 ]; a& L3 L* m' `
创建之后: 3 h+ N* ?6 N1 {
到这里我们就可以给Region-Class分配规则了,我们先不分。 % O9 w, x& {1 f
Create Region-Class-Class / o1 P* [* ]4 o7 ?, f; D# _
Class与Class在同一个Region不期而遇了。
( c+ _7 p4 b& J创建之后:
* m' z4 p* I0 X7 U) D" X# K) D局部放大,相信你能看明白这个是什么意思。
^1 z* I9 O6 ^5 c& d3 \% Q, {8 OSpacing规则分配: 6 S" A+ g8 `0 }1 B# j2 G9 a1 y
包括Region-Class,Region-Class-Class
+ |3 D: V) p2 a% f( X# P/ e短短的时间之内,你就学会了九阳神功,从“欲渡黄河冰塞川,将登太行雪满山”的彷徨失措,摇身一变,你已经到了华山之巅,俨然一副“拔剑四顾心茫然”的独孤求败。
6 A9 ?) Q" i+ r/ V完。 |
|