Allegro 绘制过程()
--作者:秦绪彬 2004-02-20
(一) 器件库的制作
由已有 PCB 文件生成库
File※Export※Libraries… 所有类型库文件将保存到 PCB 文件所在目录中
新建元件库
1. 使用 Pcb Editor 为通孔焊盘制作*.fsm 热焊盘文件;使用 Pad designer 制作*.pad 焊盘文件
2. 使用 Pcb Editor 制作*.psm 元件封装(推荐使用 Wizard 向导制作)
(二) 新建 PCB layout 文件
File※new…※drawing name(drawing type: layout)※OK.
(三) 基本参数设置
1. 设计单位选择(英寸/毫米);设计单位精度;设计图纸尺寸
Setup※Drawing Parameters
※在 PCB 设计过程中,禁止在英寸与毫米间切换,否则在每次切换过程中将引入误差,次数越
多误差越大,这也是 Allegro 不尽如人意的地方.
2. [DRC]是否在线 DRC/DRC 标示符号尺寸;[Display]鼠线(即飞线)的几何形状
{当鼠线为水平或垂直时,选择鼠线显示方式为直线或 jogged;当鼠线为斜线时,选择无区别};
热焊盘(Thermal pads)是否显示;设计栅格(Grid)是否显示;打孔(drill)是否显示(包括过
孔或焊盘的孔);焊盘或过孔是否填充显示;[Text]添加文本时的默认大小值(block size);文本
相对鼠标定位点延伸摆放方向(left/right/center)[Line Lock]走线转弯时线的形式(线/弧)、角度
Setup※Drawing Options
3. 自定义文本 block
Setup※Text sizes
4. 定义栅格显示
Setup※Grids
5. 设置默认走线间距;设置默认走线宽度
Setup※Constraints…※ Spacing rule set※Set values…
※ Physical rule set※Set values…
6. 向设计添加过孔(将在走线换层时使用)
Setup※Constraints…※ Physical rule set※Set values…※Via List Property
注:只有列在 Current Via List 中的 Via 才能在 PCB 设计中实用
在 Available Padstacks 栏中的 Via 都位于 Padpath 所设定的默认目录中
凡已位于该默认目录中但未在 Available Padstacks 列表中显示的 Via
可通过在 Name 栏中键入该 Via 名称后点击 Add 按钮添加到 Current Via List
7. 设置默认工作目录(焊盘存放路径 padpath;封装存放路径 psmpath;Gerber 输出存放路径 artpath
等)
Setup※User Preferences…※Design_paths
(四) 画板框(Board Outline)、布线区(Route Keepin)及零件摆放区(Package Keepin)
Add※Line (在 Add Line 状态下,控制面板中 Class 选择 Board Geometry;SubClass 选择 Outline)
Setup※ Areas※Route Keepin(必须绘制 Route Keepin,否则内层贯铜将无法进行,系统将 Route Keepin
作为内层贯铜的边界)
Setup※ Areas※Package Keepin
(五) 定义板层
Setup※ Cross-section
(六) 调入网表(netlist)
File->Import…※ logic… 在 Cadence 标签页内进行设置:Import logic type 选 Design entry CIS;
Place changed component 选 Always;Import directory 指定 allegro netlist 网表所在位置。
设置完毕后,点击 Import Cadence 按钮即可完成网表的导入。
注:Other 标签页用于导入非 Cadence 类型的网表。
也可由 Capture CIS 在执行 Create Netlist 时,直接新建或更新 brd 文件
(此时设计第二步可省略)。Capture CIS 执行 Create Netlist 时,如下:
(七) 调入器件(Placement)
手工调入(Manually)---通过器件标号有选择的调入器件
Place※Manually…(单击选项 Components by redes,在其下列出的器件为还未放到板上的器件,在
待放器件前打勾后将鼠标移至工作区,器件会附着在鼠标上,点击鼠标左键即
可完成放置动作)
自动调入(Quickplace)---可一次性调入所有器件,也可有选择的调入器件
Place※Quickplace(在 Quickplace 设置菜单中,Edge 表示将器件摆放在板框外面的位置<上、下、
左、右>;Slide 设置器件放置在顶层还是底层)
注:在调入器件前,所有元件封装都已制作并放于 Psmpath 所指定工作目录中.
(八) 布线(Route)
1. 内层分割(以 GND 层分割为例)
① 用ANTI ETCH线在待分割层面上画好分割线(ANTI ETCH/GND)
注意:画ANTI ETCH时,边界要超出Route Keepin
※. Add※Line
※. Option里选择ANTI ETCH/GND
※. 画好分割线
① 在控制栏的Option里选择需要分割的层面(ETCH/GND)
① 点选菜单Edit※Split Plane※Create
出现提示菜单后,选择“是”
① 依次选择高亮区域的讯号名称(Net Name)
注:过孔与内层的安全间距是在设计过孔时由Anti Pad项决定的。
过孔(与所在内层为同一网络)与内层的热焊盘连接形状是在设计过孔时由Thermal Relief项
决定的。
2. 在正片上铺铜(Top or Bottom Layer)
① 点选菜单 Add※shapes※Solid Fill
① 选择所要加 shape 的层面
① 按所需路径画好 Shape 封闭路径
① 如果需要可再次修改 shape 外形
Edit※Vertex
① 定义 shape 的网络 net
Edit※Change Net(Name)
① 进行 shape parameter 的设定
Shape※Parameters…
① Void
Void※Auto
① Check
Shape※Check
① 如有错误,修改
① 灌铜(Fill)
Shape※Fill
3. (略)
4. (略)
(九) 后检查
1. 运行 DRC 检查
Tools※Update DRC
2. 生成未放器件报告(此步骤验证元件是否已完全放入板中)
Tools※Reports…※Unplaced Components
3. 生成未连管脚报告(此步骤验证所有连接关系的布线是否完成)
Tools※Reports…※Unconnected Pins
4. 生成 DRC 检测报告
Tools※Reports…※Design Rules Check
(十) 生产文件输出
1. 生成 Gerber 文件
① Manufactrue※ArtWork※Film Control
A. 在 Available Films 中通过鼠标右键添加或删除文件夹和其下的 Subclass 最终形
成要输出的底片.输出时每个文件夹为一张底片,每张底片中包含要输出的子类
B. 用鼠标单击每一个文件夹(底片),在右侧为其设置 Plot mode(正负片)和
Undefined Line Width(丝印字符线宽等)(一般设为7mil)
C. 其他保留默认值,不作修改
① Manufactrue※ArtWork※General Parameters
A. 在 Device Type 中选 Gerber RS274X
B. 其他保留默认值,不作修改
① Manufactrue※ArtWork※Film Control※Create Artwork
(执行此步前不要忘记勾中要输出的文件夹)
2. 生成钻孔(drill)坐标文件(*.tap)
① Manufactrue※NC※Drill Tape…
① 在 NC TAPE 设置菜单中,Scale Factor 设为1
① Manufactrue※NC※Drill Tape…※Run
注:钻孔坐标文件名可在 Manufactrue※NC※Drill Parameters…中设定
3.{在 PCB 中添加钻头表}
① Manufactrue※NC※Drill Legend
① 点 OK,钻头表附着在鼠标上
① 将表放在 PCB 中合适的地方
{在 PCB 中删除钻头表}
① Manufactrue※NC※Drill Legend
① 点 OK,钻头表附着在鼠标上
① 按鼠标右键选 Cancel,钻头表随即消失
(十一)向制板厂提交制板文件
根据为尚阳设计的四层板为例,最终提交文件如下:
※关于底片参数文件 的说明:
设定底片参数档
底片参数档 会纪录底片的类型及格式。在你设定好 Artwork Parameter Form 之后 Allegro 会把
您所宣告的所有设定参数存成 。如果出底片之后您把这个底片参数档也给下游厂商,那么他们
会更确切的知道您的底片格式、小数位数、补零设定等值,在您处理您的档案时减少错误的发生。
※关于钻孔坐标文件 的说明:
钻孔坐标档是一个以孔径为分类,列出板上钻孔位置的 XY 坐标的文字文件,可以直接输入到数值控制
Nemueric Control 的机台上钻出所要的孔.不同于先前的钻孔图只是一个图面标示.现在多用来做钻孔后
检查用.
Allegro 设计心得()
--作者:秦绪彬 2007-02-06
======================================================================
创建焊盘——在设计中,每个器件封装引脚是由与之相关的焊盘构成的,焊盘描述了器件引脚如何与设
计中所设计的每个物理层发生联系,每个焊盘包含以下信息:
焊盘尺寸大小和焊盘形状
钻孔尺寸和显示符号
焊盘还描述了引脚在表层(顶层和底层)的 SOLDERMASK、PASTEMASK 和 FILMMASK 等
相关信息。同时,焊盘还包含有数控钻孔数据,Allegro 用此数据产生钻孔符号和钻带文件。
Allegro 在创建器件封装前必须先建立焊盘,建立的焊盘放在焊盘库里,在做器件封装时从焊盘
库里调用。Allegro 创建的焊盘文件名后缀为.pad。Allegro 用 Pad Designer 创建并编辑焊盘。
(一)通孔焊盘或过孔在 PCB 中的叠层结构(top、内层信号层、内层电源层、bottom)
为了描述上的方便,约定如下:
1. 把通孔焊盘简称为焊盘。
2. 把通孔焊盘(或过孔)位于 Top 和 Bottom 层用于焊接的环形面(或方形等,依具体设计而
定)称作焊环。
3. 下文只提及焊盘,过孔的情况与焊盘相同
各种情况下焊盘或过孔在每一层的情况如下:
Top 层(正片):任何情况下,焊盘在该层都有焊环(形状及尺寸由此焊盘制作时为该层指定的
Regular Pad 决定)
如果在 top 层敷铜,有两种情况:※当焊盘与敷铜属于同一网络时,焊盘通过正
十字导线与周围敷铜相连(并不由制作焊盘时为 top 层指定的 Thermal Relief 决定
焊盘与敷铜的连接形状),其中焊盘与周围敷铜间的间距由 allegro 间距规则设置
中的 Shape-Pin 项决定(并不由制作焊盘时为 top 层指定的 Anti Pad 决定);※当
焊盘与敷铜不属于同一网络时,焊盘会避让周围铜皮,挖出一个隔离同心圆(但
敷铜操作类型必须选择动态敷铜 Dynamic Copper,如果选择静态敷铜焊盘将不会
避让,即使不属于同一网络也与周围铜皮连接在一起),其中焊盘焊环与周围敷
铜间的间距由 allegro 间距规则设置中的 Shape To Pin 项决定(并不由制作焊盘时
为 top 层指定的 Anti Pad 决定)。
注: 1、Shape To Pin 间距设置。[Setup->Constrains->physiscal rule set 中 Set values]
2、对于过孔,需要设置 Shape To Via 项
内层信号层(正片):有两种情况:※如果该层有连接到焊盘的导线,则焊盘在该层具有焊环(形
状及尺寸由制作焊盘时为该层指定的 Regular Pad 参数项决定),用于导线与焊盘
的电连接(因为是正片不用考虑 Anti Pad);※如果该层没有连接到焊盘的导线则
没有焊环,仅有焊盘的孔壁通过该层,即焊环的环宽为零(当该层没有任何电连
接情况下,焊盘设计时即使为该层指定了 Regular Pad 也不存在焊环,即 Regular
Pad。所指定的 Regular Pad 仅是为当该层有导线连接焊盘即上述第一种情况时而
定的)。
内层电源层(负片):有两种情况:※如果焊盘与内层为同一网络属性,则焊盘通过 Thermal Relief
与内层铜皮相连接(该 Thermal Relief 在制作焊盘时设定)。※如果焊盘与内层不
属于同一网络,则仅有焊盘的孔壁通过该层,没有焊环,即焊环的环宽为零。焊
盘在该层会避让周围铜皮,挖出一个隔离同心圆。因此在设计焊盘为该层指定 Anti
Pad 项各参数时,考虑隔离间距时应从钻孔即焊盘内径算起,而不应从 Regular Pad
外沿算起,因为此种情况下焊盘在该层根本就不存在 Regular Pad(即焊环)。
Bottom 层(正片):同 Top 层。
(二)建立零件库时,其说明要点如下:
(1) 在Allegro 系统中,建立一个零件(Symbol)之前,必须将会使用到的零件脚(Pin) 的档案先建好,
才能建立此零件。
(2) Padstack 包括零件脚(Pin) 及贯穿孔(Via)两种应用的分类,其档案的副档案均为.pad。
(3) 每一个零件(Symbol)的档案共有2 个:
Drawing File – 仅用于建立或编修零件,其档案的副档案均为.dra。
Symbol File – 当使用者在放置零件于板内时,是使用到此档案,此档案是无法进行编修的,目前
零件共有下列5 种:
Package Symbol 一般零件,即电子零件、螺丝孔、定位孔等,其副档案为.psm。
Mechanical Symbol 机构零件,由板外框及螺丝孔等所组成的零件,其副档案为.bsm。
Format Symbol 图框零件,由图框及图文件说明所组成的零件,其副档案为.osm 。
Shape Symbol 特殊外形零件,仅用于建立特殊外形的Padstack,其副档案为.ssm。
Flash Symbol 特殊图形零件,仅用于建立Padstack 的Thermal Relief(防止散热用),其副
档案为.fsm。
(4) Allegro 捉取零件库的路径,使用者可在pcbenv 目录下(本书的范例为C:\project\allegro\pcbenv)的
env 文本文件中设定:
捉取Padstack 的路径,由padpath 环境变量来设定,例如:
set padpath = . symbols .. ../symbols
捉取Symbol 的路径,由psmpath 环境变量来设定,例如:
set psmpath = . symbols C:\MyLib\symbols
注:也可通过下面方法设定 Setup->User Preferences,Categories中点击Design_paths,随后在
菜单右侧,可配置系统要使用的pad路径、psm封装路径等
(5) 关于文件名称部份,只能使用英文(a 至z、“_”及“-”),且不可使用特殊符号,在此并建议尽量使
用小写字体。
(三)Allegro 中焊盘命名规则说明
本文档主要目的是:对目前所制作使用的焊盘库进行规范、整理,以便焊盘库的管理和使用。下面对
其进行详细说明。(注:所有数字的单位均为mil.)
一、金手指焊盘
本设计库为金手指这类异形焊盘作了单独的命名、
二、钻孔焊盘
1)钻孔焊盘——命名格式为:p38c18(圆形)【 p40s26(方形)、p40x140r20(矩形)】
说明: p:表示是金属化(plated)焊盘(pad);
38:表示的是焊盘外经为38mil;
c:表示的是圆形(circle)焊盘;
18:表示焊盘内经是18mil。
根据焊盘外型的形状不同,我们还有正方型(Square)、长方型(Rectangle)和椭圆型焊盘(Oblong)等,
在命名的时候则分别取其英文名字的首字母来加以区别,例如: 外经为40mil、内经为26mil
的方型焊盘。
在长方形焊盘设计中,由于存在不同的长宽尺寸,所以我们在其名中给予指定,起方法是:将焊盘
尺寸用数学方式表示出来即(width×height),当然在输入名字时不能输入数学符号“×”,因此我们
用字母“x”来代替。
例如: 表示width 为40mil、height 为40mil、内经为20mil的长方型焊盘。
2)定位孔——命名格式为:h138c126p/u
说明: h:表示的是定位孔(hole);
138:表示的是定位孔(或焊盘)的外经为138mil;
c:表示的是圆形(circle);
126:表示孔经是126mil;
p:表示金属化(plated)孔;
u:表示非金属化(unplated)孔。
注:在实际使用中,焊盘也可以做定位孔使用,但为管理上的方便,在此将焊盘与定位孔作了区别。
※ 焊盘与过孔在制作上还是有不小区别的,后面的章节会讲,详见‘焊盘与过孔的区别’
三、表面贴焊盘
1、长方形焊盘
命名格式为:sr15x60
说明: s :表示表面贴(Surface mount)焊盘;
15:表示width 为15mil;
60:表示height 为60mil。
2、方形焊盘
命名格式为:ss040
说明: 第一个s:表示表面贴(Surface mount)焊盘;
第二个s:表示方型(Square)焊盘;
040:表示width 和height 都为40mil。
3、圆形焊盘
命名格式为:sc040
说明: s :表示表面贴(Surface mount)焊盘;
c :表示圆型(Circle)焊盘;
040:表示width 和height 都为40mil。
注意:
1)width 和height 是指Allegro 的Pad_Designer 工具中的参数,用这两个参数来指定焊盘的长和
宽或直径。
2)如上方法指定的名称均表示在top 层的焊盘,如果所设计的焊盘是在Bottom 层时,我们在名
称后加一字母“b”来表示。
四、过孔
命名格式为:v24_12
说明: v :表示过孔(via);
24:表示过孔外经为24mil;
12:表示过孔的内孔径为12mil。
※ 另外我们还专门设计了针对BGA 封装用的过孔:
五、热焊盘(即 Thermal Relief)
命名格式为:TR52x66x15-45
说明: TR :表示热焊盘(Thermal Relief);
52 :表示内径尺寸;
66 :表示外径尺寸;
15 :表示开口尺寸;
45 :表示开口角度。
(四)在 Pad Designer 中制作表贴或通孔器件焊盘时,如何设定‘SOLDERMASK_TOP’和
‘SOLDERMASK_BOTTOM’?
SOLDERMASK:用于定义顶层或底层焊盘的去阻焊窗的大小。如果不定义 SOLDERMASK,焊
盘将上绿油,因此无法用于焊接。
Protel 中表贴和通孔焊盘默认值为比焊盘大出 8mil(即焊盘两边各多出 4mil)。
Allegro 设计中,建议采用如下数据: (金佰泽提供)
① 表贴焊盘
※. 电阻、电容等焊盘间距较大的,阻焊可设的大一些。在焊盘尺寸基础上加 6mil 或 8mil
(即焊盘两边各加上 3mil 或 4mil)。
※. IC、BGA 间距较密焊盘,设的小一点。在焊盘尺寸基础上加 4mil(即焊盘两边各加上
2mil)
① 通孔焊盘
在焊盘尺寸基础上加 6mil 或 8mil(即焊盘两边各加上 3mil 或 4mil),由于通孔器件焊盘之间
的间距不会很密,因此建议采用 8mil。
① 走线过孔
通常情况下,过孔只用于导线连接而不用于焊接,via 位于 Top 和 Bottom 层部分均做阻焊上
绿油处理,所以不设置 SOLDERMASK_TOP 和 SOLDERMASK_BOTTOM 项 (Geometry
设为 Null,Width 和 Height 值设为 0)。
特殊说明:有时在 PCB 调试初期过孔用作测试点等特殊目的,此时设计过孔时可以开阻焊。
注:IC 相邻两焊脚边沿间距大于 12mil 才能进绿油;如果小于 12mil,PCB 生产商就直接开
通窗了(依据厂家的生产工艺水平而定)
( 五 ) 在 Pad Designer 中 制 作 表 贴 焊 盘 时 , 如 何 设 定 ‘PASTEMASK_TOP’ 和
‘PASTEMASK_BOTTOM’?
PASTEMASK:用于定义顶层或底层焊盘的涂胶开窗的大小,用于 PCB 的钢网制作。
PASTEMASK 仅用于表贴焊盘。
① 表贴焊盘
PASTEMASK 值一般比‘Regular Pad’(长、宽或直径)小一些。Protel 中默认值为 0mil(即
与焊盘大小相等),Allegro 设计中建议也采用与焊盘大小相等。
① 通孔焊盘
通孔焊盘不用于制作钢网,也就不存在 PASTEMASK 的概念,因此不需要设定(置为 Null)。
※ 走线过孔
走线过孔不用于制作钢网,也就不存在 PASTEMASK 的概念,因此不需要设定(置为 Null)。
(六)在 Pad Designer 中制作焊盘时,如何设定‘Anti Pad’参数?
‘Anti Pad’:仅用于负片,隔离不需连接的 PIN or VIA。用于设定焊盘与周围铜皮之间的间隔距离,
即挖掉铜皮部分的环宽外径。如内层电源层中通孔焊盘周围铜皮被挖掉部分的环宽外径。
在 8 层或小于 8 层 PCB 设计中,满足 PCB 生产良率情况下的设计参数和方法如下:
① 表贴焊盘
不用设置 Anti Pad(表贴焊盘总是位于正片 Top 或 Bottom 层),设为 Null。
① 通孔焊盘
焊盘与内层(负片)不属于同一网络,因此才会用到 Anti Pad。此种情况下,在该内
层仅有焊盘的钻孔孔壁穿过,并不存在 Regular Pad,因此考虑焊盘的 Anti Pad 隔离间
距时,应把焊盘钻孔孔径作为计算基点,而不能把 Regular Pad 作为基点。计算公式
如下:
※. 焊盘钻孔孔径(即焊盘内径)+30mil,即单边距离钻孔孔壁间距 15mil。『推荐』
※. 厂家(金佰泽)允许的通孔器件焊盘单边最小间距为 12mil,因此也可用如下公式
焊盘钻孔孔径(即焊盘内径)+24mil,即单边内层铜皮距离钻孔孔壁间距 12mil。
注:protel 中,内层焊盘隔离带默认值为 20mil,Top 和 Bottom 层敷铜则由设计规则
中布线最小间距决定。
① 走线过孔
过孔与内层(负片)不属于同一网络,因此才会用到 Anti Pad。此种情况下,在该内
层仅有过孔的钻孔孔壁穿过,并不存在 Regular Pad,因此考虑过孔的 Anti Pad 隔离间
距时,应把过孔钻孔孔径作为计算基点,而不能把 Regular Pad 作为基点。计算公式
如下:
※. 在布线密度不大,可以使用较大过孔情况下:钻孔孔径(即过孔内径)+30mil,即
单边距离钻孔孔壁间距 15mil。
※. 厂家(金佰泽)允许的过孔单边最小间距为 10mil。因此当布线密度较大,如 BGA
等需要使用小尺寸走线过孔时,可以采用:钻孔孔径(即过孔内径)+20mil。
即单边内层铜皮距离钻孔孔壁间距 10mil。
注:由于过孔在 PCB 上的使用数量较大,所以 via 位于内层的 Regular pad(用于
内层信号层)、Anti Pad(用于内层电源层)值应设置的尽可能小些,对于内层布
线层,可加大布线的空间;对于内层电源层,可避免 via 密集的地方形成孤岛,
造成断连。因此建议:在 PCB 上使用两种过孔,BGA 等布线密集区域使用上述
第※种方法构造的过孔(Anti Pad),同时布线密度稀疏区域使用第※种方法构造的
过孔(Anti Pad),这样既可满足设计要求,又可以提高 PCB 的生产良率。
说明:由上面第※、※点比较可知,厂家对于通孔器件焊盘和过孔在最小隔离距离的要求
上是不一样的:焊盘是单边最小 12mil;过孔是单边最小 10mil。其原因:通孔器
件焊盘的钻孔孔壁的上锡厚度要大于过孔,因此在镀完锡的成品孔径相同的情况下,
用于打焊盘孔的钻头要稍微粗于过孔使用的钻头(因为焊盘孔径镀的锡要比过孔厚
一些,所以要打的大一些),因此厂家要求 PCB 工程师设计焊盘时,AntiPad 间隔距
离要设置的大一些。
补充说明:
regular pad:用正片生成的焊盘,可供选择的形状有圆形、方形等。(用于正片)
thermal relief :以热隔离的方式替代焊盘。可用于正片或负片,产生花瓣连接铜箔。
anti pad :与正片的焊盘相对,为负片焊盘,一般为圆圈,用于阻止引脚与周围的
铜箔相连。(用于负片,隔离不需连接的 PIN or VIA)
如果只是以正片制图,只需建 regular pad。
如果有用负片制图,则三种皆需要建。
(七)在 Pad Designer 中制作焊盘 pad 时,如何设定‘Thermal Relief’参数?
‘Thermal Relief’:以热隔离的方式替代焊盘。在制作通孔焊盘或过孔前,需要先制作好适用于该焊
盘或过孔的 Thermal Relief 文件,其扩展名为.fsm。
注:上图阴影部分表示铜皮挖掉部分(负片)
设定方法:
1. 内径尺寸等于钻孔尺寸加上16 mil;
2. 外径尺寸等于钻孔尺寸加上30 mil;
3. 开口尺寸一般设为15mil;
4. 开口角度一般设为45度。
注:布线密集区域(如BGA)使用的过孔,其Thermal Relief 的内径、外径值可以设置得小一些,
避免内层(负片)形成孤岛。如:
内径=钻孔+10mil;外径=钻孔+24mil 或
内径=钻孔+8mil;外径=钻孔+20mil(最小极限取值方法:过孔Anti-pad单边最小间距10mil)
(八)通孔焊盘(allegro 中称为 pin)与过孔(via)的区别
via:只用于导线连接不用于焊接。所以不用设置 SOLDERMASK_TOP 和 SOLDERMASK_BOTTOM
项(Geometry 设为 Null,Width 和 Height 值设为 0),via 位于 top、bottom 层部分均做阻
焊(也可以开阻焊用于调试等特殊目的)。
via 不 用 于 制 作 钢 网 , 因 此 无 PASTEMASK 概 念 , 因 此 PASTEMASK_TOP 和
PASTEMASK_BOTTOM 的值都设为 Null。
另外,via 在 PCB 上使用的数量较大,所以 via 位于内层的 Regular pad、Thermal Relief、Anti
Pad 值应设的尽可能小,对于内层布线层,可加大布线的空间;对于内层电源层,可避免 via
密集的地方形成孤岛,造成断连。
pad:主要目的用于焊接。对于通孔焊盘,top 和 bottom 层焊盘部分阻焊需开窗,因此必须正确
设置 SOLDERMASK_TOP 和 SOLDERMASK_BOTTOM 的值;对于表贴焊盘,top 层焊盘
部分阻焊需开窗,需设置 SOLDERMASK_TOP。
对于通孔焊盘,因为不用于制作钢网,因此无 PASTEMASK 概念,也就不用设置 PASTEMASK_TOP
和 PASTEMASK_BOTTOM 的值(Geometry 设为 Null,Width 和 Height 值设为 0)。对于
表贴焊盘,要用于制作钢网,需要设置 PASTEMASK_TOP。
(九)表贴焊盘的制作方法
范例:长方形表贴焊盘 sr50x25 的制作(宽度:50mil ; 高度:25mil)
规格说明
① 名称定义
s 代表它是一个SMD 的Padstack,单一层面且没有钻孔
r 代表 Padstack 的外形为长方形
50 代表 Padstack 的宽度为 50mil
x 代表数字间的分隔符
25 代表 Padstack 的高度为 25mil
① 钻孔规格
无(钻孔)
① 内部规格
Regular Pad Padstack 的外形大小为50X25 mil 的长方形
Thermal Relief 无
Anti Pad 无
Soldermask Padstack 的防焊Pad,其尺寸为56X31 mil 的长方形 (等于Regular
Pad 50X25 mil各边加上6 mil)
Pastemask Padstack 的钢板Pad,其尺寸为50X25 mil 的长方形(等于Regular
Pad 的尺寸)
建立方法
【Parameters Tab】页设置内容:
① Type 点选Single,表示Padstack 为单一层面。
① Internal layer 点选Optional,表示由底片定义去设定未连接的内层Pad 是否出现
① Unit 部份:Units 选择Mils,Decimal places 输入0,表示使用单位为mil,小数点后
没有小数,即为整数。
① Multiple drill 部份:请不要勾选Enabled,表示只有一个钻孔。
① Drill hole 部份:不用输入。
① Drill symbol 部份:不用输入。
下图为输入各计算值后的Parameters Tab页:
【Layers Tab】页设置内容:
① 设定BEGIN LAYER
BEGIN LAYER 即为Top 层面,设定方法如下:
1) 选到BEGIN LAYER
以鼠标左键按一下在Padstack layers 内的BEGIN LAYER 方格,在最下方的中
间Current layer 变为BEGIN LAYER,表示目前的Regular Pad、Thermal Relief
及Anti Pad 是属于BEGIN LAYER。
2) 在Regular Pad 部份:
Geometry 点选Rectangle,表示Padstack 的外形为长方形;
Width 输入50,表示长方形的宽度为50 mil;
Height 输入25,表示长方形的高度为25 mil。
3) 在Thermal Relief 部份:不用输入
4) 在Anti Pad 部份:不用输入
① 设定SOLDERMASK_TOP
1) 选到SOLDERMASK_TOP
以鼠标左键按一下在Padstack layers 内的SOLDERMASK_TOP 方格,在最下
方的中间Current layer 变为SOLDERMASK_TOP,表示目前的Regular Pad 是
属于SOLDERMASK_TOP。
2) 在Regular Pad 部份:
Geometry 点选Rectangle,表示Padstack 的正面防焊Pad 为长方形;
Width 输入56,表示长方形的宽度为56 mil;
Height 输入31,表示长方形的高度为31 mil。
① 设定PASTEMASK_TOP
1) 选到PASTEMASK_TOP
以鼠标左键按一下在Padstack layers 内的PASTEMASK_TOP 方格,在最下方
的中间Current layer 变为PASTEMASK_TOP, 表示目前的Regular Pad 是属
于PASTEMASK_TOP。
2) 在Regular Pad 部份:
Geometry 点选Rectangle,表示Padstack 的正面钢板Pad 为长方形;
Width 输入50,表示长方形的宽度为50 mil;
Height 输入25,表示长方形的高度为25 mil。
下图为输入各计算值后的Layers Tab页:
(十)圆形通孔器件焊盘的制作方法
范例:建立圆形有钻孔的焊盘 p60c36
规格说明
① 名称定义
p 代表它是一个有钻孔的Padstack
60 代表 Padstack 的直径大小 60mil
c 代表 Padstack 的外形为圆形
36 代表 Padstack 的钻孔尺寸为 36mil
① 钻孔规格
Plating Type Plated (钻孔的孔壁必须上锡)
Size 36 mil (钻孔的尺寸)
Drill Symbol 50 mil 的六角形,内有字母A 的图形 (由使用者为每一种钻孔尺
寸定义一个相对应的图形,将来在钻孔图的底片可以看到此图形)。
① 内部规格
Regular Pad Padstack 的外形大小为60 mil 的圆形。
Thermal Relief Padstack 的防散热Pad 为TR52X66X15-45:
TR 代表Thermal Relief;
52 内径尺寸等于钻孔尺寸(36 mil)加上16 mil;
X 数字的分隔符;
66 外径尺寸等于钻孔尺寸(36 mil)加上30 mil;
X 数字的分隔符;
15 开口尺寸等于15 mil;
- 数字的分隔符;
45 开口角度等于45 度。
Anti Pad Padstack 的隔离Pad,其尺寸为66 mil 的圆形 (等于钻孔尺寸36 mil
加上30 mil)。
Soldermask Padstack 的防焊Pad,其尺寸为66 mil 的圆形 (等于Regular Pad 60
mil 加上6 mil)。
Pastemask Padstack 的钢板Pad,其尺寸为0 mil,表示不需要钢板Pad。
建立方法
【Parameters Tab】页设置内容:
① Type 点选Through,表示Padstack 有钻孔。
① Internal layer 点选Optional,表示由底片定义去设定未连接的内层Pad 是否出现
① Unit 部份:Units 选择Mils,Decimal places 输入0,表示使用单位为mil,小数点后
没有小数,即为整数。
① Multiple drill 部份:请不要勾选Enabled,表示只有一个钻孔。
① Drill hole 部份:
1) Plating type 点选Plated,表示孔壁要上锡;
2) Size 输入36,表示钻孔尺寸为36 mil;
3) Offset X:钻孔的X 轴不偏移;
4) Offset Y:钻孔的Y 轴不偏移。
① Drill symbol 部份:
1) Figure 点选Hexagon X,表示为六角形的图形;
2) Character 输入A,表示为图形内有一个字母A;
3) Width 输入50,表示为图形的宽度为50 mil;
4) Hieght 输入50,表示为图形的高度为50 mil。
下图为输入各计算值后的Parameters Tab页:
【Layers Tab】页设置内容:
① 设定BEGIN LAYER
BEGIN LAYER 即为Top 层面,设定方法如下:
1) 选到BEGIN LAYER
以鼠标左键按一下在Padstack layers 内的BEGIN LAYER 方格,在最下方的中
间Current layer 变为BEGIN LAYER,表示目前的Regular Pad、Thermal Relief
及Anti Pad 是属于BEGIN LAYER。
2) 在Regular Pad 部份:
Geometry 点选Circle,表示Padstack 的外形为圆形;
Width 输入60,表示圆形的直径为60 mil;
Height 会自动填入60。
3) 在Thermal Relief 部份:
Flash 输入TR52X66X15-45,表示使用 作为防散热Pad。
Geometry、Width 及Height 会根据指定的Flash自动填入,设计者不需输入。
4) 在Anti Pad 部份:
Geometry 点选Circle,表示Padstack 的隔离Pad 为圆形;
Width 输入66,表示圆形的直径为66 mil;
Height 会自动填入66。
① 设定DEFAULT INTERNAL 及END LAYERS
DEFAULT INTERNAL 即为全部的内层层面,END LAYERS 为Bottom 层面,由
于DEFAULT INTERNAL 及END LAYERS 的内容与BEGIN LAYER完全相同,所
以将采用复制的方法来完成:
1) 以鼠标右键按一下在Padstack layers 最左边的Bgn 按钮,在弹出式选单选择
Copy to all,出现Copy BEGIN LAYER 的对话框,确认勾选Regular layers 及
Regular pad、Thermal relief pad 及Antipad,如下图所示。
2) 按下 OK 按钮后,Allegro 就将BEGIN LAYER 的数据复制到DEFAULT
INTERNAL 及END LAYERS。
① 设定SOLDERMASK_TOP
1) 选到SOLDERMASK_TOP
以鼠标左键按一下在Padstack layers 内的SOLDERMASK_TOP 方格,在最下
方的中间Current layer 变为SOLDERMASK_TOP,表示目前的Regular Pad 是
属于SOLDERMASK_TOP。
2) 在Regular Pad 部份:
Geometry 点选Circle,表示Padstack 的正面防焊Pad 为圆形;
Width 输入66,表示圆形的直径为66 mil;
Height 会自动填入66。
① 设定SOLDERMASK_BOTTOM
1) 选到SOLDERMASK_ BOTTOM
以鼠标左键按一下在Padstack layers 内的SOLDERMASK_ BOTTOM方格,在
最下方的中间Current layer 变为SOLDERMASK_ BOTTOM,表示目前的
Regular Pad 是属于SOLDERMASK_ BOTTOM。
2) 在Regular Pad 部份:
Geometry 点选Circle,表示Padstack 的背面防焊Pad 为圆形;
Width 输入66,表示圆形的直径为66 mil;
Height 会自动填入66。
① 设定PASTEMASK_TOP
不设置。因为通孔焊盘不用于制作钢网。
① 设定PASTEMASK_BOTTOM
不设置。因为通孔焊盘不用于制作钢网。
下图为输入各计算值后的Layers Tab页:
(十一)正方形通孔器件焊盘的制作方法
范例:建立正方形有钻孔的焊盘 p60s36
规格说明
① 名称定义
p 代表它是一个有钻孔的Padstack
60 代表 Padstack 的外形大小 60mil
s 代表 Padstack 的外形为正方形
36 代表 Padstack 的钻孔尺寸为 36mil
① 钻孔规格
Plating Type Plated (钻孔的孔壁必须上锡)
Size 36 mil (钻孔的尺寸)
Drill Symbol 50 mil 的六角形,内有字母A 的图形 (由使用者为每一种钻孔尺
寸定义一个相对应的图形,将来在钻孔图的底片可以看到此图形)。
① 内部规格
Regular Pad Padstack 的外形大小:
1. Top 及Bottom 层面的Pad 为60 mil 的正方形(通常作为零件
的第1脚,以方便辨识零件的脚位)。
2. 内层的Pad 为60 mil 的圆形(因为看不到在内层的Pad,所以
不需要辨识脚位的功能,改用圆形会有较多的走线空间)。
Thermal Relief Padstack 的防散热Pad 为TR52X66X15-45:
TR 代表Thermal Relief;
52 内径尺寸等于钻孔尺寸(36 mil)加上16 mil;
X 数字的分隔符;
66 外径尺寸等于钻孔尺寸(36 mil)加上30 mil;
X 数字的分隔符;
15 开口尺寸等于15 mil;
- 数字的分隔符;
45 开口角度等于45 度。
Anti Pad Padstack 的隔离Pad,其尺寸为66 mil 的圆形 (等于钻孔尺寸36 mil
加上30 mil)。
Soldermask Padstack 的防焊Pad,其尺寸为66 mil 的正方形 (等于Regular Pad 60
mil 加上6 mil)。
Pastemask Padstack 的钢板Pad,其尺寸为0 mil,表示不需要钢板Pad。
建立方法
【Parameters Tab】页设置内容:
① Type 点选Through,表示Padstack 有钻孔。
① Internal layer 点选Optional,表示由底片定义去设定未连接的内层Pad 是否出现
① Unit 部份:Units 选择Mils,Decimal places 输入0,表示使用单位为mil,小数点后
没有小数,即为整数。
① Multiple drill 部份:请不要勾选Enabled,表示只有一个钻孔。
① Drill hole 部份:
1) Plating type 点选Plated,表示孔壁要上锡;
2) Size 输入36,表示钻孔尺寸为36 mil;
3) Offset X:钻孔的X 轴不偏移;
4) Offset Y:钻孔的Y 轴不偏移。
① Drill symbol 部份:
1) Figure 点选Hexagon X,表示为六角形的图形;
2) Character 输入A,表示为图形内有一个字母A;
3) Width 输入50,表示为图形的宽度为50 mil;
4) Hieght 输入50,表示为图形的高度为50 mil。
下图为输入各计算值后的Parameters Tab页:
【Layers Tab】页设置内容:
① 设定BEGIN LAYER
BEGIN LAYER 即为Top 层面,设定方法如下:
1) 选到BEGIN LAYER
以鼠标左键按一下在Padstack layers 内的BEGIN LAYER 方格,在最下方的中
间Current layer 变为BEGIN LAYER,表示目前的Regular Pad、Thermal Relief
及Anti Pad 是属于BEGIN LAYER。
2) 在Regular Pad 部份:
Geometry 点选Square,表示Padstack 的外形为正方形;
Width 输入60,表示正方形的边长为60 mil;
Height 会自动填入60。
3) 在Thermal Relief 部份:
Flash 输入TR52X66X15-45,表示使用 作为防散热Pad。
Geometry、Width 及Height 会根据指定的Flash自动填入,设计者不需输入。
4) 在Anti Pad 部份:
Geometry 点选Circle,表示Padstack 的隔离Pad 为圆形;
Width 输入66,表示圆形的直径为66 mil;
Height 会自动填入66。
① 设定DEFAULT INTERNAL 及END LAYERS
DEFAULT INTERNAL 即为全部的内层层面,END LAYERS 为Bottom 层面,由
于DEFAULT INTERNAL 及END LAYERS 的内容与BEGIN LAYER完全相同,所
以将采用复制的方法来完成:
1) 以鼠标右键按一下在Padstack layers 最左边的Bgn 按钮,在弹出式选单选择
Copy to all,出现Copy BEGIN LAYER 的对话框,确认勾选Regular layers 及
Regular pad、Thermal relief pad 及Antipad,如下图所示。
2) 按下 OK 按钮后,Allegro 就将BEGIN LAYER 的数据复制到DEFAULT
INTERNAL 及END LAYERS。
3) 修正DEFAULT INTERNAL 为圆形
以鼠标左键按一下在Padstack layers 内的DEFAULT INTERNAL 方格,在最下
方的中间Current layer 变为DEFAULT INTERNAL,在RegularPad 部份的
Geometry 点选Circle,表示Padstack 的外形为圆形。
① 设定SOLDERMASK_TOP
1) 选到SOLDERMASK_TOP
以鼠标左键按一下在Padstack layers 内的SOLDERMASK_TOP 方格,在最下
方的中间Current layer 变为SOLDERMASK_TOP,表示目前的Regular Pad 是
属于SOLDERMASK_TOP。
2) 在Regular Pad 部份:
Geometry 点选Square,表示Padstack 的正面防焊Pad 为正方形;
Width 输入66,表示正方形的边长为66 mil;
Height 会自动填入66。
① 设定SOLDERMASK_BOTTOM
1) 选到SOLDERMASK_ BOTTOM
以鼠标左键按一下在Padstack layers 内的SOLDERMASK_ BOTTOM方格,在
最下方的中间Current layer 变为SOLDERMASK_ BOTTOM,表示目前的
Regular Pad 是属于SOLDERMASK_ BOTTOM。
2) 在Regular Pad 部份:
Geometry 点选Square,表示Padstack 的背面防焊Pad 为正方形;
Width 输入66,表示正方形的边长为66 mil;
Height 会自动填入66。
① 设定PASTEMASK_TOP
不设置。因为通孔焊盘不用于制作钢网。
① 设定PASTEMASK_BOTTOM
不设置。因为通孔焊盘不用于制作钢网。
下图为输入各计算值后的Layers Tab页:
(十二)走线过孔的制作方法
(十三)安装孔的制作方法
基本步骤如下:
1. 启动 Allegro PCB Editor,File->New… ,Drawing Type 选 Package symbol
2. Layout->Pins,在坐标原点添加事先做好的安装孔孔径焊盘(非金属化孔)。在 Option
中点选 Mechanical,选择 Mechanical 后添加的焊盘无 pin number
注:在 Pad Designer 中制作安装孔孔径焊盘时,需要在 SOLDERMASK_TOP 层定义覆
盖整个安装孔的阻焊区,目的是使安装孔 TOP 层金属部分露锡,保证安装螺丝与其保
持电连接。根据具体应用情况,也可在 SOLDERMASK_BOTTOM 层定义一个阻焊区,
使安装孔底层金属部分也露锡。参见下面的安装孔爆炸图。
3. 围绕原点分别在 Etch/Top 和 Etch/Bottom 绘制 shape 图形,可利用如下两种方法绘制:
i. Shape->Polygon/Rectangular/Circular
ii. 先利用 Line 和 Arc 绘制需要的封闭图形,再利用命令 Shape->Compose Shape 将
封闭图形转化成 Shape
4. 在 Shape 上添加若干过孔,用于连接 Etch/Top 和 Etch/Bottom 的 shape。方法如下:
※ 制作过孔。在 Pad Designer 中制作
※ 向设计中添加过孔。Setup->Constraints,Physical rule set 中的 Set Values…
※ 在工作区添加过孔。Layout ->Connections,双击添加过孔
※ 调整过孔的位置。Edit ->Move,在 Console window 中输入坐标实现精确定位
5. 在 Shape 上添加一个 pin,用于该安装孔连接到指定网络。该 pin 可共用第 4 步中的过
孔,只不过添加方法与其不同,利用该方法添加的就是 pin 而不是 via。方法如下:
Layout ->Pins,在 Options 中的 Padstack 项点击浏览按钮指定(第 4 步制作的 via)
说明:为什么要加一个 pin?安装孔是作为一个器件被调入 PCB 中的,pin 有 pin
number,因此可用于连接到 net。绘制原理图时有可能指定安装孔连接到某一网络例
如 chasis ground,因此安装孔的 PCB 封装需要有一个 pin 与原理图 symbol 对应。
6. 在 REF DES / SILKSCREEN_TOP 添加安装孔的器件位号。例如 M* 。
7. 在 PACKAGE GEOMETRY / SILKSCREEN_TOP 绘制丝印层外形框和辅助信息。
安装孔爆炸图:
(十四)名词解释
1)阻焊层(Solder Mask):又叫绿油层,是电路板的非布线层,用于制成丝网漏印板,将不需
要焊接的地方涂上阻焊剂。由于焊接电路板时焊锡在高温下的流动性,所以必须在不需要焊接
的地方涂一层阻焊物质,防止焊锡流动、溢出引起短路。
在阻焊层上预留的焊盘大小,要比实际焊盘大一些,其差值一般为10~20mil,在Pad_Design 工
具中可以进行设定。
在制作PCB 时,使用阻焊层来制作涓板,再以涓板将防焊漆(绿、黄、红等)印到电路板上,
所以电路板上除了焊盘和过孔外,都会印上防焊漆。
2)锡膏防护层(Paste Mask):为非布线层,该层用来制作钢膜(片),而钢膜上的孔就对应
着电路板上的SMD 器件的焊点。在表面贴装(SMD)器件焊接时,先将钢膜盖在电路板上(与
实际焊盘对应),然后将锡膏涂上,用刮片将多余的锡膏刮去,移除钢膜,这样SMD 器件的焊
盘就加上了锡膏,之后将SMD 器件贴附到锡膏上去(手工或贴片机),最后通过回流焊机完成
SMD 器件的焊接。
通常钢膜上孔径的大小会比电路板上实际的焊点小一些,这个差值在Pad_Design 工具中可以进
行设定。
(十五)定义TEXT_BLOCK# 时各个参数的含义
Text Blk (字体编号由最小的1 至最大的64 号,并可再新增字体)
Identifies the text block by number. When you add text to a design, you enter the number of
the text block you want to use in the Options tab of the Control Panel.
Width (Text 中单个字符的宽度)
Sets the width of each character.
Height (Text 中单个字符的高度)
Sets the height of each character.
Line Space (Text 中行与行之间的上下行距)
Sets the distance between the bottom of the characters in one line to the top of the characters in
the line below.
Photo Width (画在底片上的字体线宽,即 Text 中字符的线宽)
Sets the width of the line used to photoplot and display the characters. If this is 0, the text
displays at 1 pixel width on your screen.
Char Space (Text 中的字符与字符之间的间距)
Sets the amount of space between characters (kerning).
(十六)涉及TEXT 操作的几点说明
1. 向设计中添加文本时默认字号(block size)的设置方法
Setup※Drawing Options。。。,点击Text标签页,其中‘Parameter block’项决定
补充:‘Justification’项决定所添加的文本相对鼠标定位点的延伸摆放方向(left/right/center)
2. 如果Text选择的字号(Text Blk#),其Photo Width项被设置为0,则该Text使用1个象素宽度
的线显示。
3. 同时修改同一类(the same class and subclass)Text字号的方法
举例:
同时修改PCB上所有器件标号的字号
① 在allegro中打开电路板。
① 执行命令:Edit->Change。
① 在控制面板Find页,只勾选Text项,其它不勾选。
① 在控制面板Option页,Class选择‘Ref Des’,Subclass选择‘Silkscreen_Top’,勾选Text
block项同时在其右侧下拉菜单中选择更改后的字号。
注:字号可以在Setup->Text Sizes…中查看、修改、新增
① 按住鼠标左键,框选整个PCB,则位于PCB上的所有器件标号就同时被更改成想
要的字号。
(十七)修改同一类(the same class and subclass)Line线宽的方法
方法如下:
1. 执行命令:Edit->Change
2. 在控制面板Find页勾选需要修改什么类型的线(Lines or Clines)
3. 在控制面板Option页,正确选择需要修改线所属的Class和Subclass,勾选Line width项同时
在其右侧输入目标线宽。
4. 用鼠标左键点击想要修改的线即可完成修改。
举例:
修改器件丝印外框的线宽
① 在allegro中打开电路板。
① 执行命令:Edit->Change。
① 在控制面板Find页,仅勾选Lines项,其它不勾选。
① 在控制面板Option页,Class选择‘Package Geometry’,Subclass选择
‘Silkscreen_Top’,勾选Line width项同时在其右侧输入目标线宽。
① 用鼠标左键点击想要修改的线即可完成修改。也可以按住鼠标左键,框选所需修
改区域,则位于该区域内的所有器件丝印外框的线宽被更改成目标线宽。
修改布线层线宽
① 在allegro中打开电路板。
① 执行命令:Edit->Change。
① 在控制面板Find页,仅勾选Clines项,其它不勾选。
① 在控制面板Option页,Class选择‘Etch’,Subclass选择‘Top’(或其他布线层),勾
选Line width项同时在其右侧输入目标线宽。
① 用鼠标左键点击想要修改的导线即可完成修改。也可以按住鼠标左键,框选所需
修改区域,则位于该区域内的所有导线线宽被更改成目标线宽。
(十八)手动设计PCB封装的步骤
原则上尽量利用向导设计PCB封装。
1. 执行‘File/New’命令,出现New Drawing对话框,在Drawing Type 中点选Package Symbol,
在Drawing Name中输入文件名,点OK即可。如果想要更改新建文件保存的路径,点
‘Browse’选择目的路径。注意:在Browse菜单下方一定要勾选‘Change Directory’,新设置的
目的路径才能生效。
2.
(十九)利用向导设计PCB封装的步骤
(二十)设计 PCB 封装时几点注意事项
1. 不要误将焊盘标号当作 Text 删掉
[Group]Geometry->[Class]Package Geometry->[subclass]Pin_Number
在 allegro 中,针对焊盘标号的操作,控制面板 Find 页都是勾选‘Text’项,但其类属于 Package
Geometry-Pin_Number。
每个焊盘都应具有焊盘标号,用于映射原理图元件的 pin 号。如果 PAD 没标号,表示原
理图不关心这个 pin 或是机械孔。
2. PCB 元件封装(Symbol)的必要的 CLASS/SUBCLASS
序
号
CLASS SUBCLASS 元件要素 备注
1 Etch Top
PAD/PIN(通孔或表贴焊盘)
Shape(贴片 IC 下的散热铜箔)
必要、有电导性
2 Etch Bottom PAD/PIN(通孔或盲孔)
视需要而定、有
电导性
3
Package
Geometry
Pin_Number
映射原理图元件的 pin 号。如果 PAD
没标号,表示原理图不关心这个 pin
或是机械孔。
必要
4 Ref Des Silkscreen_Top 元件的位号。例如 R*、C* 等 必要
5 Component Value Silkscreen_Top 元件型号或元件值。 必要
6
Package
Geometry
Silkscreen_Top
元件外形和说明:线条、弧、字、Shape
等。
必要
7
Package
Geometry
Place_Bound_Top 元件占地区和高度。 必要
8 Route Keepout Top 禁止布线区 视需要而定
9 Via Keepout Top 禁止放过孔 视需要而定
(二十一)Allegro 中怎样直观地显示焊盘的网络名(just as Protel)
后的版本, 在 Add connect 的时候在右边控制面板的 options 里面就有显示当前 route 的 net
名. 别的方法暂时还没找到.
(二十二)Allegro 中的组(Group)、类(Class)、子类(Subclass)
Allegro 把相同性质之数个Subclasses 组合成一个Class,然后再把相同性质之数个Classes 组合
成一个Group,目前共分7 个Groups (20 个Classes):
[Allegro 把层面(Layer)称为Subclass]
(二十三)如何设计不规则形状的表贴焊盘
首先使用 shape 做出所需图形并生成*.ssm 文件,然后在 PAD DESIGNER 里指定给 BEGIN
LAYER 的 Regular Pad ; 再 使 用 shape 做 出 对 应 防 焊 图 形 并 生 成 *.ssm 文 件 , 指 定 给
SOLDERMASK_TOP 的 Regular Pad。
(二十四)Xnet 概念
概念:通常把连续的几断由无源元件(电阻,电容或电感)连接的 NET 合称为 Xnet。
Xnet 是通过给无源分离元件赋予信号模型(Signal Model)建立的。
用途:在 Allegro 系统中可以透过 XNET 的定义将 R、L、C 等小型零件两端的不同讯号视为
相同的讯号,并可跨过此小型零件,一次设定两端的走线长度,以方便使用者同时计算小
型零件两端的走线长度。
应用:数据总线中的串联匹配电阻往往将整个走线分为几个 NET,而 Allegro 中常用的走线长
度设置 propagation_delay 和 relative_propagation_delay 只能针对同一 NET
设置。Allegro 提供了一种方法,将整根走线被电阻等分立器件分隔后形成的各部分线
段相加后再进行等长比对,这就要用到 Xnet。
设置 Xnet 的 4 个步骤: [详细步骤参见《Allegro Book II》Page199]
1. 定义层面叠层结构的方式 [此布骤可跳过]
在Allegro 系统中有两种方法可以定义层面叠层结构的方式:
1) 使用Setup>Cross Section…命令
2) 使用Setup Advisor 的Edit Cross-section 功能
一般而言,我们会建议使用者利用Setup Advisor 命令去定义XNET 的相关设定,因
为Allegro 系统将相关的功能整合在一起,并以Step By Step 的方式引导使用者去完成
每一项设定,其间并辅以文字的说明,以协助使用者的操作,这对使用者而言是一项
很好用的利器。
2. 定义电源及接地讯号 [此布骤可跳过]
在Allegro 系统中有3 种方法可以定义电源及接地讯号的方式:
1) 使用Edit>Properties 命令
2) 使用Logic>Identify DC Nets 命令
3) 使用Setup Advisor 的Identify DC Nets 功能
3. 定义零件的类别及其接脚型式
必须将小型被动零件的类别 (Class) 设定为DISCRETE,及其零件脚的接脚型式 (Pin
Type,即Pinuse 属性) 设定为UNSPEC,如此才能使XNET的设定正确。
在Allegro 系统中可以使用Setup Advisor 的Device Setup 功能,可以定义零件的类别
及其接脚型式。
4. 指定零件的Signal Model。
必须将小型的被动零件加上Signal_Model 属性,并建立此小型被动零件的Signal
Model,如此才能让小型的被动零件拥有XNET 的特性。
在Allegro 系统中可以使用Setup Advisor 命令的SI Model Assignment 功能,可以建立
小型被动零件的Signal Model,并将Signal Model 属性设定于此零件上。
验证 Xnet 设置正确性:
经由上述的步骤完成XNET的设定,接下来要确认XNET是否可以正常运作。
1. 使用Display>Element 命令,在右边的控制面板上按一下Find Tab,再按一下All Off
按钮,仅勾选Nets 选项。
2. 用鼠标左键分别点击已赋予Xnet属性的分立元件的两个管脚查看其net属性,如果两边
NET都添加了同一Xnet属性(两个管脚都具有相同的‘Member of Xnet’值)说明Xnet已
设置正确。
例如:串接在 A2 地址线上的 33 欧姆电阻,赋予其 Xnet 属性后查看其两个管脚 net 属性分
别如下图所示:
(二十五)Xnet 等长设置步骤
1. 建立 Xnet 的 pin pair:在 Allegro 中打开 constraint manager(Allegro 中打开约束管理器的
方法:Setup->Electrical Constraint Spreadsheet...),选择 relative_propagation_delay 属性,
选中一个 Xnet,Allegro 提供整个项目中该 Xnet 关联的起始 pin 和结束 pin ,选择需要等
长设置的起始 pin 和结束 pin 建立 pin pair。
2. 建立等长 group:选中所有需要设置等长的 pin pair,点右键 Create->Match Group 创建名为
R_IDE_DATA 的 MATCH GROUP。在与 relative_propagation_delay 对应的工作窗体选择区
中出现了刚创建的 R_IDE_DATA,其内含建立的 pin pair,按照 IDE 总线走线等长要求设置
走线误差 10mil 以内,一般选择最长走线为基准线(target)。
3. 走线完成后,重新打开 constrait manager 对实际走线进行分析,Allergo 自动显示分析结果,
绿色表示走线以基准线为标准,走线误差在 10mil 以内,红色表示走线误差超过 10mil,如
果分析结果,大部分走线都为红色,可以适当调整基准线的选择。
此外,Allegro 在等长走线时,会实时显示走线长度是否在误差范围内,可以使用蛇型线调
整走线长度(Route->Delay Tune),这些都极大的确保了布线可靠性。
(二十六)Pin Pairs 的概念
A pin pair represents a pair of logically connected pins, often a driver-receiver connection. Pin Pairs
may not be directly connected but they must exist on the same net or Xnet.
You use pin pairs to capture specific pin-to-pin constraints for a net or an Xnet. You can also use pin
pairs to capture generic pin-to-pin constraints for ECSets. Generic pin pairs are used to automatically
define net- or Xnet-specific pin pairs when the ECSet is referenced.
概念:Pin Pairs 代表一对逻辑相连的管脚。Pin Pairs 一般是直接相连的,具有相同的 net 属性;Pin
Pairs 也可以是不直接相连的(通过电阻、电容、电感等相连),但必须具备相同的 Xnet
属性。换言之,具有相同的 net 或 Xnet 属性的一对管脚才能被定义成 Pin Pairs.
补充:T 点可用来定义管脚对(Pin-Pair),但定义管脚对前首先为 net 添加好 T 点
(二十七)T点的概念 (Rat Ts or Ratsnest T-point)
A Tpoint (also called a Ratsnest T) is a point in the physical layout of
a net that indicates the signal path splits into multiple paths.
T 点的作用
1. 可用作管脚对(Pin-Pair)的一个端点,用来定义管脚对。
例如: 管脚对‘:’表示——Pin Pair 的起点为
Pin Pair 的终点为T点
2. 通过给 net 添加 T 点,可控制走线的分支长度。
为 net 添加 T 点的方法
1. Logic-> Net Schedule
2. 鼠标左键点中该 net 中作为信号布线路径源端的管脚 Pin
3. 鼠标右键,在弹出菜单中选择 ‘Insert T’
4. 用鼠标左键点击 T 点将要放置的位置
5. 对于该 net 中剩下的管脚 Pin,反复采用如下方法定义起始于 T 点的各分支线的布线次
序:
① 点击一下 T 点
① 点击一个管脚 Pin
6. 鼠标右键,在弹出菜单中选择 ‘Done’
Example of Creating Branches from a Tpoint
This series of illustrations shows how you connect pins to a Tpoint.
1. After you enter the net schedule command, choose the source pin for the net and then the
location of the Tpoint.
Selecting Source Pin and Tpoint Location
2. Choose the Tpoint and a pin (P2) on the net to create the second branch.
Selecting Tpoint and Second Pin(P2)
详细情况参见 Allegro 在线帮助“Net Schedule”章节
方法:运行命令 Logic-> Net Schedule,按 F1 启动在线帮助文档。
(二十八)Allegro 中尺寸测量的方法
操作方法:
※ Display->Measure (或 shift+F5)
※ 在控制面板中 Find 页,先清除所有项,再选中需要测量对象所属的类,如 Pins、Cline Segs、
Other Segs、Text、Shapes、Vias、Figures
※ 用鼠标单击第一个测量对象,Allegro 显示 Measure 对话框并识别对象和位置
※ 用鼠标单击第二个测量对象,Allegro 更新 Measure 对话框,识别第二个对象和其位置,并
显示所选两点的距离及 Air Gap 值(下图中白线长度)。
其中,Manhattan Dist 为 X 轴(Dx)的直线距离加上 Y 轴(Dy)的直线距离;Air Gap 为
两个测量对象边缘之间的距离。
Allegro 提供了测量命令使设计这可获得设计对象及物体之间间距的信息。Allegro 的测量操作限
定在 ETCH、PIN、和 VIA 等类定义的子类的间距。在显示测量结果时,一个重要的数据是 Air Gap
(气隙),在 Allegro 中,Air Gap 指的是测量两个目标元素时它们之间最短的距离(即,边缘到
边缘的距离)。Allegro 在测量时会显示一个短线,这个短线的长度等于 Air Gap 的长度。
Allegro 可以测量的内容如下:
测量元件与元件之间的距离
测量焊盘与焊盘之间的距离
测量文字到其他类之间的距离
测量焊盘到其他类之间的距离
测量过孔到其他类之间的距离
测量连线的宽度
测量连线的长度
测量两个目标元素之间边缘到边缘的间距(Air Gap)
※ 补充说明:
有时测量器件的两个焊盘,不能得到它们之间的 Air Gap 值,系统提示”No air gap -- both
elements are not defined on TOP. Common subclasses for air gap are BOTTOM”.
其原因就是所测量器件位于 BOTTOM,但测量时控制面板 Options 标签页中 ActiveClass 和
Subclass 没有相应设置成 Etch/Bottom,所以会出现上述的情况。
※ 要根据被测量对象,正确设置 Options 标签页中 ActiveClass 和 Subclass
举例:
测量两个焊盘(Pin)之间的中心距
※ Display->Measure (或 shift+F5)
※ 在控制面板中 Find 页,先清除全部的勾选,再勾选中 Pins 项
※ 用鼠标分别点击需要测量的两个焊盘,allegro 会弹出测量结果菜单
测量两个焊盘(Pin)之间的边沿距离
操作方法同上一步,测量结果菜单中 Air Gap 项即为两焊盘的边沿距离
测量 Clines 之间的距离
※ Display->Measure (或 shift+F5)
※ 在控制面板中 Find 页,先清除全部的勾选,再勾选中 Cline Segs 项
※ 用鼠标分别点击两条 Cline,allegro 会弹出测量结果相关信息
测量焊盘(Pin)于过孔(Via)之间的距离
※ Display->Measure (或 shift+F5)
※ 在控制面板中 Find 页,先清除全部的勾选,再勾选中 Pins 和 Vias 项
※ 用鼠标分别点击 Pin 和 Via,allegro 会弹出测量结果相关信息
测量一根丝印层线段的长度
※ Display->Measure (或 shift+F5)
※ 在控制面板中 Find 页,先清除全部的勾选,再勾选中 Other Segs 项
※ 用鼠标分别点击线段的两个端点,allegro 会弹出测量结果菜单
(二十九)为内层电源层绑定网络方法(实际上就是阴板铺铜)
内层为单一网络
※ 首先保证已经绘制好了 Route Keepin 外形框,它用作内层灌铜的边界。
Setup->Areas->Route Keepin (ActiveClass/Subclass:Route Keepin/All;Shape Fill
栏的 Type 项设置为 Unfilled),在工作区画出一个比外形框向内缩进的 Shape
※ Edit->Split Plane->Create ,出现‘Create Split Plane’对话框,选择要进行阴板铺铜的
层面,同时 Shape type desired 项设置为 Dynamic;单击 Create 按钮,出现‘Select
Net’对话框,选择要给层面绑定的网络,单击 OK 结束操作。此时系统自动以刚才
绘制的 Route Keepin 区域外形框为边界进行阴板铺铜。
内层为多个网络共用,需要内层分割
※ 首先保证已经绘制好了 Route Keepin 外形框,它用作内层灌铜的边界。
Setup->Areas->Route Keepin (ActiveClass/Subclass:Route Keepin/All;Shape Fill
栏的 Type 项设置为 Unfilled),在工作区画出一个比外形框向内缩进的 Shape
※ 设置各个网络之间的间隔区域,在 Allegro PCB 设计中就是进行 Anti Etch 的设计。
Add->Line (ActiveClass/Subclass:Anti Etch/需要进行分割的内层;Line font:设
置为 Solid;Line width:绘制线宽,实际上就是设置不同网络之间的间隔距离的宽
度)
※ 在工作区不同网络的分界处画出分割平面的 Anti Etch 线。
※ Edit->Split Plane->Create ,出现‘Create Split Plane’对话框,选择要进行阴板铺铜并
分割的层面,同时 Shape type desired 项设置为 Dynamic;单击 Create 按钮,出现
‘Select Net’对话框,依次为各个分割后的区域指定网络,单击 OK 结束操作。 (执
行该步操作时可以将要分割的内层 Visibility 打开,以方便观察)
(三十)后处理——Gloss 优化命令
无论手工布线还是采用 Specctra 自动布线,总会产生一些布线效果不好、多余过孔等问题,此时
可利用 Allegro 提供的 Gloss 命令对设计进行优化和调整。
1)优化前的准备工作
※ 检查设计以确定是整个板子都需要进行优化还是只对某个区域或者某个网络优化
※ 保护方法
如果某些网络有特殊需求,应对其进行设置以保护优化过程中不改变这些网络的特
殊性。保护设置方法就是给网络增加 NO_GLOSS 或者 FIXED 属性。NO_GLOSS 属
性确保网络不在优化过程中改变;FIXED 属性确保网络在任何布线或优化过程中都
不会发生变化。
如果要保护设计中的某个区域不被优化,则应设置一个 NO_GLOSS 的多边形。
NO_GLOSS 的 多 边 形 应 该 设 置 在 MANUFACTURE 层 , 它 的 子 层 可 以 是
NO_GLOSS_TOP、NO_GLOSS_BOTTOM、NO_GLOSS_ALL、NO_GLOSS_INTERNAL。
Allegro 还提供了几种不同的优化命令可以针对不同的区域进行优化操作,分别是
Route->Gloss 菜单中的‘Design’、‘Room’、‘Window’、‘Highlight’、‘List’。
‘Design’:用于对整个实际进行优化
‘Room’:用于对选定的 Room 进行优化
‘Window’:用于对选定的窗口进行优化
‘Highlight’:用于对高亮显示的单个网络或者元件进行优化
‘List’:用于对所设定的列表项目进行优化
2)选择优化的内容和相应参数设置
Route->Gloss->Parameters,出现‘Glossing Controller’对话框,该对话框列出了可进行优化的
内容。如下图所示:
点击每一项左边的复选框会弹出相应的参数配置菜单。
3)勾中需要执行单项的右侧复选框并配置好相应优化参数后,点击 Gloss 按钮即可执行优化
操作。
(三十一)后处理——丝印调整
(三十二)锁定元器件的方法(即给器件添加 Fixed 属性使其不能再被移动或删除)
1) 在工作区内按 F12 或执行 Edit->Properties,进入属性编辑状态
2) 在控制面板 Find 标签页,清除全部的勾选,仅选中 Comps 项(选 Symbols 项也可)
使 Component 可以被作用
3) 在工作区鼠标左键点击需要添加 Fixed 属性的器件,出现‘Show Properties’当前属性列表和
‘Edit Property’属性编辑对话框。如下图所示:
‘Show Properties’属性列表:可获知该元件当前已被赋予的所有属性
‘Edit Property’修改属性对话框:进行元件属性的添加、删除
<说明>通过上图可知,RN11 当前具有一项属性:SIGNAL_MODEL。即被赋予了信号模型
RESISTOR_DIP_4_SMD_RPX4_0402_47_47
4) 在 Edit Property(修改属性)对话框中,于 Available Properties 列表中点选 FIXED 选项,在
此对话框的右边会出现 FIXED 属性,在其下拉列表设置为 TRUE。
5) 在Edit Property(修改属性)对话框中,按一下 Apply 按钮,将FIXED 属性加入器件,此时
在Show Properties(列出属性)的对话框中,可以看到器件已有FIXED 属性,如下图所示。
6) 在Edit Property(修改属性)对话框中,按下 OK 按钮,最后在设计区中按鼠标右键,点选Done
选项,完成将器件加入Fixed 属性的动作。
补充:器件解除锁定的方法
前 3 步同上,在第 4 步,勾选中 Edit Property(修改属性)对话框右边 Fixed 属性左
侧的‘Delete’复选框,点击 Apply 按钮,观察 Show Properties(列出属性)对话
框,发现器件原来具有的 FIXED 属性没有了,说明器件已解除锁定。
(三十三)为元件或网络设定属性
Allegro 可以设定属性(Property) 在元件(Component)或讯号线(Net)上面,用以控制这
些对象。元件和网络常用的属性如下:(还有很多其他属性)
常用元件属性
属性名称 说明
HARD_LOCATIO
N
执行自动重新编排零件序号的功能(Auto Rename)时,Allegro
不可以改变该零件的序号(RefDes)。
FIXED 将该零件固定住,例如:使用者将无法使用 “Edit/Move” 命令
去搬移这个零件。
常用网络属性
属性名称 说明
NO_RAT 将该Net 的鼠线(Ratsnest)关掉。
FIXED 将该Net 固定住,例如:使用者将无法使用“Route/Slide”命
令去搬移这个零件。
MIN_LINE_WIDTH 设定最小走线的宽度。例如:MIN_LINE_WIDTH = 20,表
示最小走线的宽度为20 mil。
NET_PHYSICAL_TYP
E
用来设定走线宽度的分组名称。例如:
NET_PHYSICAL_TYPE = 8,表示该分组的最小走线的宽
度为8 mil。
NET_SPACING_TYPE 设定走线间距的分组名称。
例如:NET_SPACING_TYPE = ( 6 / 10 )
NET_SPACING_TYPE = CLK ( 8 / 12 )
NET_SPACING_TYPE = DPAIR ( 5 : 10 / 15 )
NET_SPACING_TYPE = T 6
设定属性方法:
1. 在工作区内按 F12 或执行 Edit->Properties,进入属性编辑状态
2. 在控制面板 Find 标签页,清除全部的勾选。如果要设置元件属性,选中 Comps 项使
Component 可以被作用;如果要设置网络属性,选中 Nets 项使网络可以被作用。
3. 用鼠标左键点选要设置属性的元件或网络,系统会弹出‘Show Properties’当前属性列表
和‘Edit Property’属性编辑对话框。
4. 在‘Edit Property’属性编辑对话框右边列出了元件或网络当前所具有的属性(为空表示
还没有被赋予任何属性)。可以在‘Edit Property’属性编辑对话框中添加、删除或修改元
件或网络的属性;
在‘Show Properties’属性列表中可实时查看元件或网络当前具有的属性。
(在‘Edit Property’对话框中点击 Apply 按钮后,系统会实时更新‘Show Properties’属性
列表中的内容)
利用上述方法为网络指定属性后,在约束管理器的 Net/General Properties 工作表中会同步
显示,当然也可通过该工作表直接设置网络属性。
(三十四)Swap 交换
(三十五)如何添加限制区 Constraint Area(例如线进入这个区域线宽、线距会有变化)
※ 绘制规则区。规则区必须绘制在 BoardGeometry 的 Constraint_Area 字类。方法有两种:
Setup->Constraints…, 点击 Contraints areas 区域中的 Add 按钮, 绘制 area
Shape->Rectangular (Shape Fill Type:unfilled),注意控制面板中 Options 标签页中
选择 Class:BoardGeometry 和 Subclass:Constraint_Area.
注:BoardGeometry/Constraint_Area 的 visibility 必须打开,否则看不到绘制的 Area。
※ 定义线宽、间距规则组
Setup->Constraints…,出现 Constraint System 对话框。分别点击 Spacing rule set 和
Physical (lines/vias) rule set 中的‘Set values’…定义间距和线宽规则组。
下图为建立一个名字为‘10’(表示走线间距为 10mil)的间距规则组:
※ 给规则区添加约束属性 Net_Physical_Type 和 Net_Spacing_Type,并分别起个名字
Edit->Properties,控制面板 Find 标签页勾选中 Shapes,左键点击规则区,弹出属性编
辑窗口,在窗口左侧的 Available Properties 栏内找到并点击 Net_Physical_Type 和
Net_Spacing_Type 项使其添加到窗口右侧的属性列表中,分别给二者起一个名字,最好
能表现他的属性,填入‘Value’栏内。点击 Apply 按钮,完成属性添加。如下图:
其中,Net_Spacing_Type 对应的名字‘DATA(10/15)’表示与同组走线的间距 10mil,
与其他走线的间距为 15mil;Net_Physical_Type 对应的名字‘8’表示走线线宽为 8mil。
※ 给约束属性名(已由第 3 步定义)指定规则组(已由第 2 步定义)
Setup->Constraints…,出现 Constraint System 对话框。点击 Spacing rule set 域的
Assignment table…指定间距规则组;点击 Physical rule set 域的 Assignment table…指
定走线线宽规则组。
(三十六)如何为总线(或一组网络)添加走线线宽、走线间距(包括组内、组外)约束
走线线宽约束设定
※ 列出总线走线线宽需求
如:8mil
※ 根据线宽起一个线宽约束名(如:‘8’),将 Net_Physical_Type 属性添加到总线
内的每一根讯号线上,同时将线宽约束名赋值给 Net_Physical_Type 属性。
方法:Edit->Properties,Net_Physical_Type = 线宽约束名(8)
※ 定义线宽规则
方法:Setup->Constraints…,点击 Physical (lines/vias) rule set 的 Set values
※ 绑定线宽规则至线宽约束名
方法:Setup->Constraints…,点击 Physical (lines/vias) rule set 的 Assignment table
※ 设定线宽 DRC 检查模式
若要能够进行线宽的检查,必须打开相关的DRC 开关。
方法:Setup->Constraints…,点击Physical (lines/vias) rule set 的Set DRC modes
走线间距约束设定
※ 列出间距设计需求
如:‘8/10’表示组内 8mil 组外 10mil
※ 根据间距起一个间距约束名(如 DATA(8/10)),将 Net_Spacing_Type 属性添加
到总线内的每一根讯号线上,同时将间距约束名赋值给 Net_Spacing_Type 属性。
方法:Edit->Properties,Net_Spacing_Type = 间距约束名(DATA(8/10))
※ 定义间距规则
涉及到几种间距就要定义几种规则。一般以间距值作为规则名。
方法:Setup->Constraints…,点击 Spacing rule set 的 Set values(因为涉及到 8 和
10 两种间距,所以需要定义名为 8mil 和 10mil 的两种间距规则)
※ 为每一对具有相同或不同间距约束名属性的网络之间指定间距规则(相同的表示组内
间距,不同表示组外间距)
方法:Setup->Constraints…,点击 Spacing rule set 的 Assignment table…
※ 设定间距 DRC 检查模式
若要能够进行间距的检查,必须打开相关的DRC 开关。
方法:Setup->Constraints…,点击 Spacing rule set 的 Set DRC modes…
细节参见《Allegro Book I》第 265 页“第 11 章 设定设计规范”
(三十七)如何实现元件对齐功能
PCB 布局时往往需要将成组的分立器件(如电阻电容等)或 IC 水平或垂直方向对齐,该功能在
Allegro 中是通过向系统添加并运行 skill 文件实现的。步骤如下:
1. 在 PCBENV 目录下,新建一个 文件.
说明:PCBENV 为默认环境变量目录。该目录位于安装 allgro 时设置的系统工作目录下
2. 将实现元件对齐功能的 skill 源码拷贝进 文件中,保存并关闭。该源码
内容参见附表 4.该源码可实现水平和垂直对齐功能,还有按原点和按 PIN 对齐.
3. 在 PCBENV 目录下,新建一个 文件.
(或将..\Cadence\\share\local\pcb\skill 下 拷贝至 PCBENV 目录下,
并重命名为 )
4. 向 文件中添加如下一行:load("")并保存. 也可以在 ENV 中加入快
捷键,调用更加方便:打开 ENV,在里面添加一行 alias F3 align_sym 保存,再打开 Allegro
即可使用 F3 调用.
注意:如果使用系统提供的 作蓝本,需要将该文件中所有代码删除,否则启
动 Allegro 时 Console window 会报错
5. 启动 Allegro,在 Console window 中敲入 align_sym 回车即可使用对齐功能了.
以后添加其它 SKILL 也可以参照上述方法
6. 在 Allegro 的 Console window 中敲入 align_sym 回车后,弹出如下菜单:
Direction:Horizontal——本次操作执行水平对齐
Vertical——本次操作执行垂直对齐
Alignment Point:Pin1——所选器件按 1 脚对齐
Origin——所选器件相对原点对齐
注:当几个电阻的 pin1 不在同一侧而又要将它们垂直对齐时,应选用‘Origin’方式.如果选择
‘Pin1’方式则会按 1 脚对齐出现下图所示情形,不能到达电阻对齐的目的:
(红色圈框中的是三个电阻的 1 脚)
Select Mode:Group——先点选目标器件(其他器件根据目标器件的位置对齐)再分别
点选要参与对齐的器件,然后右键选 Complete 执行对齐动作
Window——先点选目标器件(其他器件根据目标器件的位置对齐),再用
鼠标框选要参与对齐的器件,对齐动作随即执行
附表1 Allegro 文件类型参照表
Allegro根据不同性质功能的文件类型保存不同的文件后缀,主要的类型可以参照下表:
1、Package Symbol
一般元件的封装符号, 后缀名为*.psm。PCB 中所有元件像电阻、电容、电感、IC 等的封装类型即为
Package Symbol。
2、Mechanical Symbol
由板外框及螺丝孔所组成的机构符号, 后缀名为*.bsm。有时我们设计PCB 的外框及螺丝孔位置都是一
样的, 比如显卡, 电脑主板, 每次设计PCB时要画一次板外框及确定螺丝孔位置, 显得较麻烦。这时我们可
以将PCB的外框及螺丝孔建成一个Mechanical Symbol, 在设计PCB 时, 将此Mechanical Symbol 调出即可。
3、Format Symbol
Creates a drawing symbol such as a legend or a company logo。
由图框和说明所组成的元件符号, 后缀名为*.osm。比较少用。
4、Shape Symbol
供建立特殊形状的焊盘用, 后缀为*.ssm。像显卡上金手指封装的焊盘即为一个不规则形状的焊盘, 在建
立此焊盘时要先将不规则形状焊盘的形状建成一个Shape Symbol, 然后在建立焊盘中调用此Shape Symbol。
5、Flash Symbol
焊盘连接铜皮导通符号, 后缀名为*.fsm。在PCB 设计中, 焊盘与其周围的铜皮相连, 可以全包含, 也可
以采用梅花辨的形式连接, 我们可以将此梅花辨建成一个Flash Symbol, 在建立焊盘时调用此Flash Symbol。
附表 2 Allegro 设计流程:
附表 3 Allegro 基本概念
Clines 与 Lines Clines 为具有导电特性的连线;Lines 为非导电,如丝印层线
Clines 与 Cline Segs Clines 指整条连线;Cline Segs 指连线中没有转折的一段线段
Symbols 指所有板中的 Allegro 零件,不管其是否带有零件序号(RefDes)
Comps 带有零件序号(RefDes)的 Allegro 零件
Functions 指 Component 中的 Gate,例如:排阻中的一个电阻。
Nets 指1条信号线
Pins 指零件脚
Vias 走线过孔
Shapes 指空心或实心的任意形状的Shape
Voids 指Shape中的挖空部分
Other Segs 指Line中没有转折的一段线段
Figures 指图形符号,例如:钻孔符号
DRC Errors 指出违反设计规范的位置及其相关信息
Text 指文字
Ratsnests 指鼠线 ( 即讯号线未完成的联接关系 )
控制
面板
Find
Tab
Rat Ts 指T点,为呈T型的Ratsnest
Oop 取消上一步动作(Undo)
Next 开始下一条(布线)操作
右键
Pop
Menu Cancel 退出此类操作
附表 4 实现元件对齐功能的 skill 源码()
;+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;
; Author: Edward B. Acheson
; Sr Division AE
; SPG Division
; Benchmark Center
; Cadence Design Systems
; 270 Billerica Road
; Chelmsford MA 01824
; (508) 262-6465
;
; File Name:
; Revision 0: December 20,1993
;
;
; Purpose: To allow the User to align Component
; Package symbols by Component Origin or
; by component pin 1.
; Usage: Once this file is loaded into the Allegro database
; enter align_sym<ret> and a form will display
; Items may be picked by top, bottom or both. Items
; may be selected by window, group or tolerance. In
; selecting by group or window, the user may specify
; choice by class. The tolerance value is the distance
; to each side of the alignment axis.
; 1. Select Form Options
; 2. Select "Key Componen" to align other symbols to.
; 3. If Group or window is selected, define the window or
; define group elements, and pick complete in
; popup window ( middle mouse button).
; 4. Go on to next or hit done.
; Special notes:
; 1. All Symbol definitions must exist in a Library Path.
; 2. Shape in symbols not recognized.
; 3. Any etch connected will be deleted.
; 4. Symbol definition as found in library will
; be maintained. (this includes alt_symbols).
;
;
; Other files required:
;=========================================================
;==================== MAIN ROUTINE =======================
;=========================================================
axlCmdRegister(
"align_sym"
'align_sym
)
procedure( align_sym( )
(prog ()
when( axlOKToProceed()
_ASInitVar()
_ASCreateFormFile()
_ASInitParmForm()
while( fini == nil
_ASsetsymmaster()
if( _ASFormData->group == t && fini == nil then
_ASselectGrp()
if( _ASFormData->horizontal == t then
_ASMoveHorzComp( cmpgrp)
else
_ASMoveVertComp( cmpgrp)
)
)
if( _ASFormData->tolerance == t && fini == nil then
if( _ASFormData->horizontal == t then
_ASHorzSelTol()
_ASMoveHorzComp( cmpgrp)
else
_ASVertSelTol()
_ASMoveVertComp( cmpgrp)
)
)
if( _ASFormData->window == t && fini == nil then
_ASWindSel()
if( _ASFormData->horizontal == t then
_ASMoveHorzComp( cmpgrp)
else
_ASMoveVertComp( cmpgrp)
)
)
cmpgrp = nil
);end-while
axlUIPopupSet( nil)
);endwhen
);end-prog
);endprocedure
;-----------------------define master component location-------------------
(defun _ASsetsymmaster ( )
(prog ()
_ASPopUpA()
setq( efound nil)
while( (efound == nil) && (fini == nil)
axlMsgPut("Select Key Component.")
good = nil
mpinl = nil
pnloc = nil
axlSetFindFilter( ?enabled (list "symbols" )
?onButtons (list "symbols"))
axlOpenFindFilter()
if( fini == nil && axlSingleSelectPoint( ) then
elem = axlGetSelSet()
axlMsgPut( "Key Component %L Selected." car(elem)->refdes)
else
if( fini == nil then axlMsgPut( "Nothing Found, Select Again."))
);end-if
if( fini == nil then
axlHighlightObject( elem)
if(_ASFormData->top == t && (car elem)->isMirrored == nil then
good = t
);endif
if(_ASFormData->bottom == t && (car elem)->isMirrored == t then
good = t
);endif
if(_ASFormData->both == t then good = t)
if(good == t then
;---------stor current data
setq(locat (car elem)->xy)
setq(cmpid (car elem)->refdes)
setq(cmpname (car elem)->name)
setq(cmptype (car elem)->type)
setq(cmprot (car elem)->rotation)
setq(cmpmir (car elem)->isMirrored)
efound = t
if( _ASFormData->pin == t then
r = 1
setq( mpinl car(elem)->pins)
while( nthelem( r mpinl) != nil
if( nthelem( r mpinl)->number == "1" then
setq( pnloc nthelem( r mpinl)->xy)
)
++r
)
if( pnloc == nil then
efound == nil
axlMsgPut("Component Selected Has No Pin 1.")
axlMsgPut("Reset Parameters And Try Again.")
)
)
else
axlDehighlightObject( elem)
axlMsgPut( "Selected Component is not on Selected Layer.")
axlSubSelectAll()
);endif
);endif
);end-while
axlCancelEnterFun()
);end-prog
);end-defun
;-------------------select components by group-----------------------
(defun _ASselectGrp ()
(prog ()
if( efound == t && cmpgrp == nil then
grsel = nil
_ASPopUpB()
axlSetFindFilter( ?enabled (list "symbols" )
?onButtons (list "symbols"))
axlOpenFindFilter()
while( (grsel == nil && efound == t)
axlMsgPut("Select Component to be Aligned.")
good = nil
if( grsel == nil then
if( axlSingleSelectPoint( ) then
setq( gelem axlGetSelSet())
axlMsgPut( "Component %L Group Selected." car(gelem)->refdes)
else
if( grsel == nil then axlMsgPut( "Nothing Found, Select Again."))
);end-if
);end-if
if(_ASFormData->top == t && (car gelem)->isMirrored == nil then
good = t
);endif
if(_ASFormData->bottom == t && (car gelem)->isMirrored == t then
good = t
);endif
if(_ASFormData->both == t then good = t)
if( grsel == nil then
if(good == t then
if( (car gelem)->type == "PACKAGE" then
cmpgrp=cons( nthelem( 1 gelem) cmpgrp)
axlHighlightObject( cons( car(elem) cmpgrp))
else
axlMsgPut( "Component Not A PACKAGE Type")
axlDehighlightObject( gelem)
);end-if
else
axlMsgPut( "Component Is Not On Appropriate Layer")
axlDehighlightObject( gelem)
);endif
);endif
);end-while
return( cmpgrp)
);end-if
axlCancelEnterFun()
);end-prog
);end-defun
;-------------------select by vertical orientation------------------
(defun _ASVertSelTol ()
(prog ()
if( efound == t then
i = 1
good = nil
if( _ASFormData->pin == t then
mlocat = pnloc
else
mlocat = locat
)
setq(allsym axlDBGetDesign()->symbols)
setq(allcmp axlDBGetDesign()->components)
while( nthelem( i allsym) != nil
if( nthelem( i allsym)->type == "PACKAGE" && nthelem( i allsym)->refdes != car(elem)->refdes then
if( _ASFormData->pin == t then
r = 1
setq( tpinl nthelem( i allsym)->pins)
while( nthelem( r tpinl) != nil
if( nthelem( r tpinl)->number == "1" then
setq( tlocat nthelem( r tpinl)->xy)
)
++r
)
else
setq( tlocat (nthelem(i allsym)->xy))
)
if( (car tlocat) <= ( car mlocat)+_ASFormData->tol && (car tlocat) >= ( car mlocat)-_ASFormData->tol then
if(_ASFormData->top == t && (car gelem)->isMirrored == nil then
good = t
);endif
if(_ASFormData->bottom == t && (car gelem)->isMirrored == t then
good = t
);endif
if(_ASFormData->both == t then good = t)
setq( srefdes (nthelem(i allsym)->refdes))
h = 1
while( nthelem( h allcmp) != nil
if( (nthelem( h allcmp)->name) == srefdes && good == t then
if( _ASFormData->class == "Any" || nthelem( h allcmp)->class == _ASFormData->class then
cmpgrp=cons(nthelem( i allsym) cmpgrp)
axlHighlightObject( cons( car(elem) cmpgrp))
axlMsgPut( "Component %L Selected." srefdes)
);end-if
);endif
++h
);end-while
);end-if
good = nil
);end-if
++i
);endwhile
efound = nil
fini = nil
);end-if
return( cmpgrp)
);end-prog
);end-defun
;-------------------select by horizontal orientation------------------
(defun _ASHorzSelTol ()
(prog ()
i = 1
good = nil
if( _ASFormData->pin == t then
mlocat = pnloc
else
mlocat = locat
)
setq(allsym axlDBGetDesign()->symbols)
setq(allcmp axlDBGetDesign()->components)
while( nthelem( i allsym) != nil
if( nthelem( i allsym)->type == "PACKAGE" then
if( _ASFormData->pin == t then
r = 1
setq( tpinl nthelem( i allsym)->pins)
while( nthelem( r tpinl) != nil
if( nthelem( r tpinl)->number == "1" then
setq( tlocat nthelem( r tpinl)->xy)
)
++r
)
else
setq( tlocat (nthelem(i allsym)->xy))
)
if((cadr tlocat) <= ( cadr locat)+_ASFormData->tol && (cadr tlocat) >= ( cadr locat)-_ASFormData->tol then
if(_ASFormData->top == t && (car gelem)->isMirrored == nil then
good = t
);endif
if(_ASFormData->bottom == t && (car gelem)->isMirrored == t then
good = t
);endif
if(_ASFormData->both == t then good = t)
setq( srefdes (nthelem(i allsym)->refdes))
h = 1
while( nthelem( h allcmp) != nil
if( ( nthelem( h allcmp)->name) == srefdes && good == t then
if( _ASFormData->class == "Any" || nthelem( h allcmp)->class == _ASFormData->class then
cmpgrp=cons(nthelem( i allsym) cmpgrp)
axlHighlightObject( cons( car(elem) cmpgrp))
axlMsgPut( "Component %L Selected" srefdes)
);end-if
);end-if
++h
);end-while
);end-if
);end-if
++i
);end-while
efound = nil
fini = nil
return( cmpgrp)
);end-prog
);end-defun
;-------------------select by window ---------------------------------
(defun _ASWindSel ()
(prog ()
if( efound == t then
i = 1
good = nil
axlSetFindFilter( ?enabled (list "symbols" )
?onButtons (list "symbols"))
axlOpenFindFilter()
axlSingleSelectBox()
allsym = axlGetSelSet()
if( allsym == nil then axlMsgPut( "No Elements Found."))
setq(allcmp axlDBGetDesign()->components)
while( nthelem( i allsym) != nil
if( nthelem( i allsym)->type == "PACKAGE" then
if(_ASFormData->top == t && (car gelem)->isMirrored == nil then
good = t
);endif
if(_ASFormData->bottom == t && (car gelem)->isMirrored == t then
good = t
);endif
if(_ASFormData->both == t then good = t)
setq( srefdes (nthelem(i allsym)->refdes))
h = 1
while( nthelem( h allcmp) != nil
if( ( nthelem( h allcmp)->name) == srefdes && good == t then
if( _ASFormData->class == "Any" || nthelem( h allcmp)->class == _ASFormData->class then
cmpgrp=cons(nthelem( i allsym) cmpgrp)
axlHighlightObject( nthelem( i allsym))
axlMsgPut( "Component %L Window Selected." srefdes)
);end-if
);end-if
++h
);end-while
);end-if
good = nil
++i
);end-while
);endif
efound = nil
return( cmpgrp)
);end-prog
);end-defun
;-------------------relocate vertical position -----------------------
(defun _ASMoveVertComp (cmpgrp)
(prog ()
i = 1
tmpnew= nil
ocmpdata=nil
ocmpmir=nil
ocmprot=nil
olocat=nil
while( nthelem( i cmpgrp) != nil
if( nthelem( i cmpgrp)->refdes != cmpid then
cmpdata=nil
tlocat = nil
setq(tlocat nthelem( i cmpgrp)->xy)
setq(tcmpid nthelem( i cmpgrp)->refdes)
setq(tcmpname nthelem( i cmpgrp)->name)
setq(tcmptype nthelem( i cmpgrp)->type)
setq(tcmprot nthelem( i cmpgrp)->rotation)
setq(tcmpmir nthelem( i cmpgrp)->isMirrored)
cmpdata=cons(tcmpid cmpdata)
cmpdata=cons(tcmptype cmpdata)
cmpdata=cons(tcmpname cmpdata)
ocmpdata = cons( cmpdata ocmpdata)
ocmpmir = cons( tcmpmir ocmpmir)
olocat = cons( tlocat olocat)
ocmprot = cons( tcmprot ocmprot)
nlocat=nil
plocat = nil
npinl = nil
axlMsgPut("%L " npinl)
;-------------define the new vertical orientation
if( _ASFormData->pin == t then
r = 1
npinl=nthelem( i cmpgrp)->pins
while( nthelem( r npinl) != nil
if( nthelem( r npinl)->number == "1" then
plocat= nthelem( r npinl)->xy
nlocat=cons(nthelem( 2 tlocat) nlocat)
voffs = (nthelem( 1 tlocat) - nthelem(1 plocat))
nlocat=cons(( car(pnloc) + voffs) nlocat)
)
++r
)
else;
nlocat=cons(nthelem( 2 tlocat) nlocat)
nlocat=cons(nthelem( 1 locat) nlocat)
)
;-------------delete present stuff
z = 1
setq( pindat nthelem( i cmpgrp)->pins)
while( nthelem( z pindat) != nil
h=1
setq(pinsel nthelem( z pindat)->branch->children)
while( nthelem( h pinsel) != nil
if( nthelem( h pinsel)->objType == "via" then
dellst = cons( nthelem( h pinsel) dellst)
)
if( nthelem( h pinsel)->objType == "path" then
dellst = cons( nthelem( h pinsel) dellst)
)
++h
);endwhile
axlDeleteObject(dellst)
dellst = nil
++z
);endwhile
axlDehighlightObject(nthelem( i cmpgrp))
axlDeleteObject(nthelem( i cmpgrp))
if( _ASFormData->pin == t then
r = 1
while( nthelem( r npinl) != nil
axlDBRefreshId( nthelem( r npinl))
++r
);end-while
)
;-------------add newer symbol
tmpnew = cons( car(axlDBCreateSymbol( cmpdata nlocat tcmpmir tcmprot)) tmpnew)
);endif
++i
);endwhile
axlDehighlightObject( elem)
setq( elem nil)
setq( grsel nil)
setq( cmpgrp nil)
);end-prog
);end-defun
;-------------------relocate Hoizontal position ----------------------
(defun _ASMoveHorzComp (cmpgrp)
(prog ()
i = 1
tmpnew= nil
ocmpdata=nil
ocmpmir=nil
ocmprot=nil
olocat=nil
while( nthelem( i cmpgrp) != nil
if( nthelem( i cmpgrp)->refdes != cmpid then
cmpdata=nil
setq(tlocat nthelem( i cmpgrp)->xy)
setq(tcmpid nthelem( i cmpgrp)->refdes)
setq(tcmpname nthelem( i cmpgrp)->name)
setq(tcmptype nthelem( i cmpgrp)->type)
setq(tcmprot nthelem( i cmpgrp)->rotation)
setq(tcmpmir nthelem( i cmpgrp)->isMirrored)
cmpdata=cons(tcmpid cmpdata)
cmpdata=cons(tcmptype cmpdata)
cmpdata=cons(tcmpname cmpdata)
ocmpdata = cons( cmpdata ocmpdata)
ocmpmir = cons( tcmpmir ocmpmir)
olocat = cons( tlocat olocat)
ocmprot = cons( tcmprot ocmprot)
nlocat=nil
;-------------define the new horizontal orientation
if( _ASFormData->pin == t then
r = 1
setq( npinl nthelem( i cmpgrp)->pins)
while( nthelem( r npinl) != nil
if( nthelem( r npinl)->number == "1" then
setq( plocat nthelem( r npinl)->xy)
voffs= nthelem( 2 tlocat) - nthelem(2 plocat)
nlocat=cons( ( cadr(pnloc) + voffs ) nlocat)
nlocat=cons( nthelem( 1 tlocat) nlocat)
);endif
++r
);endwhile
else
nlocat=cons(nthelem( 2 locat) nlocat)
nlocat=cons(nthelem( 1 tlocat) nlocat)
);endif
;-------------delete present stuff
z = 1
setq( pindat nthelem( i cmpgrp)->pins)
while( nthelem( z pindat) != nil
h=1
setq(pinsel nthelem( z pindat)->branch->children)
while( nthelem( h pinsel) != nil
if( nthelem( h pinsel)->objType == "via" then
dellst = cons( nthelem( h pinsel) dellst)
)
if( nthelem( h pinsel)->objType == "path" then
dellst = cons( nthelem( h pinsel) dellst)
)
++h
)
axlDeleteObject(dellst)
dellst = nil
++z
)
axlDehighlightObject(nthelem( i cmpgrp))
axlDeleteObject(nthelem( i cmpgrp))
if( _ASFormData->pin == t then
r = 1
while( nthelem( r npinl) != nil
axlDBRefreshId( nthelem( r npinl))
++r
);end-while
)
;-------------add newer symbol
tmpnew = cons( car(axlDBCreateSymbol( cmpdata nlocat tcmpmir tcmprot)) tmpnew)
);endif
++i
);endwhile
axlDehighlightObject( elem)
setq( elem nil)
setq( grsel nil)
);end-prog
);end-defun
;-------------------Parameter form data ------------------
defun( _ASInitParmForm () ;
(prog ()
(let ( form)
form = axlFormCreate( (gensym) "" '(se outer) '_ASParmCallBk t )
_ASFormPtr = form
if( ( _ASFormData == nil ) then
setq( _ASFormData t)
(axlFormBuildPopup form "class" '(("Any" "Any") ("IC" "IC") ("IO" "IO") ("DISCRETE" "DISCRETE")))
(axlFormSetField form "class" "Any")
putprop( _ASFormData "Any" 'class)
(axlFormSetField form "horizontal" t)
putprop( _ASFormData t 'horizontal)
(axlFormSetField form "vertical" nil)
putprop( _ASFormData nil 'vertical)
(axlFormSetField form "pin" nil)
putprop( _ASFormData nil 'pin)
(axlFormSetField form "origin" t)
putprop( _ASFormData t 'origin)
(axlFormSetField form "top" t)
putprop( _ASFormData t 'top)
(axlFormSetField form "bottom" nil)
putprop( _ASFormData nil 'bottom)
(axlFormSetField form "both" nil)
putprop( _ASFormData nil 'both)
(axlFormSetField form "group" t)
putprop( _ASFormData t 'group)
(axlFormSetField form "window" nil)
putprop( _ASFormData nil 'window)
(axlFormSetField form "tolerance" nil)
putprop( _ASFormData nil 'tolerance)
(axlFormSetField form "tol" )
putprop( _ASFormData 'tol)
axlFormDisplay( form)
);end-if
);end-let
);end-prog
);end-defun
;---------------Form Call Back-----------------------------------------------
defun( _ASParmCallBk (form)
case( get(_ASFormPtr 'curField)
( "class" putprop( _ASFormData get(_ASFormPtr 'curValue) 'class))
( "horizontal" putprop( _ASFormData get(_ASFormPtr 'curValue) 'horizontal))
( "vertical" putprop( _ASFormData get(_ASFormPtr 'curValue) 'vertical))
( "pin" putprop( _ASFormData get(_ASFormPtr 'curValue) 'pin))
( "origin" putprop( _ASFormData get(_ASFormPtr 'curValue) 'origin))
( "top" putprop( _ASFormData get(_ASFormPtr 'curValue) 'top))
( "bottom" putprop( _ASFormData get(_ASFormPtr 'curValue) 'bottom))
( "both" putprop( _ASFormData get(_ASFormPtr 'curValue) 'both))
( "group" putprop( _ASFormData get(_ASFormPtr 'curValue) 'group))
( "window" putprop( _ASFormData get(_ASFormPtr 'curValue) 'window))
( "tolerance" putprop( _ASFormData get(_ASFormPtr 'curValue) 'tolerance))
( "tol" putprop( _ASFormData get(_ASFormPtr 'curValue) 'tol))
( "done" _ASDone() )
( "cancel" _ASCancel() )
);case
);end-defun
;--------------- Pop up while selecting but not by group --------------------
defun( _ASPopUpA ()
popupA = axlUIPopupDefine( nil
(list (list "Done" '_ASDone)
(list "Oops" '_ASoops)
(list "Cancel" '_ASCancel)))
axlUIPopupSet( popupA )
);end-defun
;--------------- Pop up for group selection --------------------------------
defun( _ASPopUpB ()
popupB = axlUIPopupDefine( nil
(list (list "Complete" '_AScomplete)
(list "Oops" '_ASoops)
(list "Cancel" '_ASCancel)))
axlUIPopupSet( popupB )
);end-defun
;--------------- Cancel Call--------------------------------
defun( _ASCancel ()
(prog ()
i=1
pindat = nil
pinsel = nil
dellst = nil
while( nthelem( i tmpnew) != nil
z = 1
setq( pindat nthelem( i tmpnew)->pins)
while( nthelem( z pindat) != nil
h=1
setq(pinsel nthelem( z pindat)->branch->children)
while( nthelem( h pinsel) != nil
if( nthelem( h pinsel)->objType == "via" then
dellst = cons( nthelem( h pinsel) dellst)
)
if( nthelem( h pinsel)->objType == "path" then
dellst = cons( nthelem( h pinsel) dellst)
)
++h
)
axlDeleteObject(dellst)
dellst = nil
++z
);endwhile
axlDeleteObject(nthelem( i tmpnew))
if( _ASFormData->pin == t then
r = 1
while( nthelem( r npinl) != nil
axlDBRefreshId( nthelem( r npinl))
++r
);end-while
)
++i
);end-while
i = 1
while( nthelem( i ocmpdata) != nil
axlDBCreateSymbol(
nthelem(i ocmpdata)
nthelem(i olocat)
nthelem(i ocmpmir)
nthelem(i ocmprot)
)
++i
);end-while
elem = nil
cmpgrp = nil
_ASDone()
);end-prog
);endfun
;----------------- DONE Call--------------------------------
defun( _ASDone ()
(prog ()
setq( grsel t)
if( elem != nil then axlDehighlightObject( elem))
if( cmpgrp != nil then axlDehighlightObject( cmpgrp))
setq( grsel t)
setq( fini t)
if(isFile("") then
deleteFile("")
)
setq( elem nil)
setq( cmpgrp nil)
axlFormClose(_ASFormPtr)
axlCancelEnterFun()
axlClearSelSet()
axlCloseFindFilter()
axlUIPopupSet( nil)
)
);end-fun
;--------------- Complete Picks ----------------------------
defun( _AScomplete ()
(prog ()
setq( grsel t)
axlCancelEnterFun()
_ASPopUpA()
setq( efound nil)
)
);end-defun
;--------------- Oops command-------------------------------
defun( _ASoops ()
(prog ()
if( cmpgrp != nil then
axlDehighlightObject( car( cmpgrp))
cmpgrp = cdr(cmpgrp)
good = nil
gelem = nil
else
axlDehighlightObject( elem)
elem = nil
efound = nil
);end-if
if( elem == nil then axlMsgPut( "Nothing In Buffer To Oops."))
axlCancelEnterFun()
return( cmpgrp)
);endprog
);end-defun
;--------------- initialize variables -------------------
defun( _ASInitVar ()
(prog ()
elem = nil
mpinl = nil
pnloc = nil
plocat = nil
mlocat = nil
gelem = nil
dellst = nil
pindat = nil
pinsel = nil
tmpnew = nil
ocmpdata=nil
ocmpmir=nil
ocmprot=nil
olocat=nil
_ASFormData = nil
_ASFormPtr = nil
fini = nil
tol = 0
axlUIPopupSet( nil)
fini = nil
cmpgrp = nil
);end-prog
);end-defun
;-----------------create form file -------------
defun( _ASCreateFormFile ()
frmfle = outfile("")
fprintf( frmfle "FILE_TYPE=FORM_DEFN VERSION=2\nFORM\nFIXED\n")
fprintf( frmfle "PORT 67 13\nHEADER \"Component Alignment Form\"\n")
fprintf( frmfle "POPUP <CURSPOP>\"Any\"\"1\",\"IC\"\"2\",\"IO\"\"3\",\"DISCRETE\"\"4\".\n")
fprintf( frmfle "POPUP <PRINTP>\"to File\"\"0\",\"to Printer\"\"1\",\"to Script\"\"2\".\n")
fprintf( frmfle "\nTILE\n\n")
fprintf( frmfle "TEXT \"Class:\"\nTLOC 32 18\nTGROUP \"Select Mode\"\nENDTEXT\n")
fprintf( frmfle "FIELD top\nFLOC 3 12\n FGROUP\"Alignment Layer\"\nCHECKLIST\"Top\" \"alg\"\n ENDFIELD\n\n")
fprintf( frmfle "FIELD bottom\nFLOC 3 14\nFGROUP \"Alignment Layer\"\nCHECKLIST \"Bottom\" \"alg\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD both\nFLOC 3 16\nFGROUP \"Alignment Layer\"\nCHECKLIST \"Both\" \"alg\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD horizontal\nFLOC 3 5\nFGROUP \"Direction\"\nCHECKLIST \"Horizontal\" \"dirg\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD vertical\nFLOC 3 7\nFGROUP \"Direction\"\nCHECKLIST \"Vertical\" \"dirg\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD origin\nFLOC 35 7\nFGROUP \"Alignment Point\" \nCHECKLIST \"Origin\" \"alpg\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD pin\nFLOC 35 5\nFGROUP \"Alignment Point\" \nCHECKLIST \"Pin 1\" \"alpg\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD group\nFLOC 25 12\nFGROUP \"Select Mode\"\nCHECKLIST \"Group\" \"slmg\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD window\nFLOC 25 14\nFGROUP \"Select Mode\"\nCHECKLIST \"Window\" \"slmg\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD tolerance\nFLOC 25 16\nFGROUP \"Select Mode\"\nCHECKLIST \"Tolerance\" \"slmg\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD tol\nFLOC 40 16\nFGROUP \"Select Mode\"\nREALFILLIN 10 10\n DECIMAL 4\nENDFIELD\n\n")
fprintf( frmfle "FIELD class\nFLOC 40 18\nFGROUP \"Select Mode\"\nENUMSET 12\nPOP \"CURSPOP\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD done\nFLOC 2 22\n MENUBUTTON \"Done\" 9 3\nENDFIELD\n\n")
fprintf( frmfle "FIELD print\nFLOC 28 22\n MENUBUTTON \"Print\" 9 3\n POP \"PRINTP\"\nENDFIELD\n\n")
fprintf( frmfle "FIELD cancel\nFLOC 55 22\n MENUBUTTON \"Cancel\" 9 3\nENDFIELD\n\n")
fprintf( frmfle "GROUP \"Alignment Layer\"\nGLOC 2 10\nGSIZE 20 11\nENDGROUP\n\n")
fprintf( frmfle "GROUP \"Direction\"\nGLOC 2 2\nGSIZE 30 8\nENDGROUP\n\n")
fprintf( frmfle "GROUP \"Alignment Point\"\nGLOC 34 2\nGSIZE 30 8\nENDGROUP\n")
fprintf( frmfle "GROUP \"Select Mode\"\nGLOC 24 10\nGSIZE 40 11\nENDGROUP\n\n")
fprintf( frmfle "\nENDTILE\n\nENDFORM\n")
close(frmfle)
);end-defun
附录 5 Allegro 应用技巧
1. setup->drawing options,选 display 标签页,勾选 Display plated holes 和 Filled pads 项。
可以比较形象具体的显示 via 和 through pad;同时在单独打开 VCC 或 GND 内层时,可看
到 via 或 pad 对内层的具体影响情况(热焊盘和隔离带)
2. Allegro 中查阅帮助文档的方法
按 F1 启动 cdsdoc 帮助文档(html 格式)—>点击主页面左上角的‘Library’(图 1)—>选择
相关主题查阅(图 2)
<图 1>
<图 2>
3. Allegro 中尺寸测量的方法
操作方法:
※ Display->Measure (或 shift+F5)
※ 在控制面板中 Find 页,先清除所有项,再选中需要测量对象所属的类,如 Pins、Cline Segs、
Other Segs、Text、Shapes、Vias、Figures
※ 用鼠标单击第一个测量对象,Allegro 显示 Measure 对话框并识别对象和位置
※ 用鼠标单击第二个测量对象,Allegro 更新 Measure 对话框,识别第二个对象和其位置,并
显示所选两点的距离及 Air Gap 值(下图中白线长度)。
其中,Manhattan Dist 为 X 轴(Dx)的直线距离加上 Y 轴(Dy)的直线距离;Air Gap 为
两个测量对象边缘之间的距离。
※ 补充说明:
有时测量器件的两个焊盘,不能得到它们之间的 Air Gap 值,系统提示”No air gap -- both
elements are not defined on TOP. Common subclasses for air gap are BOTTOM”.
其原因就是所测量器件位于 BOTTOM,但测量时控制面板 Options 标签页中 ActiveClass 和
Subclass 没有相应设置成 Etch/Bottom,所以会出现上述的情况。
※ 要根据被测量对象,正确设置 Options 标签页中 ActiveClass 和 Subclass
注:详细情况参见前面章节<Allegro 中尺寸测量的方法>
4. Allegro 在 Console window 输入坐标值精确定位的方法
绝对坐标定位
例如,定位安装孔位置或画线的起点到(100,100)处,可在 Console window 输入:
x 100 y 100 或 x 100 100 。
注意:x 和 y 必须小写,后跟空格
相对坐标定位
例如,画一个左下角在(0,200)大小为 4000x2500mil 的矩形板框。
选 Add ->line,注意层面须改成 Board Geometry/Outline,然后在 Console window 依次
输入如下命令:
x 0 200 // 定位画线起点
iy 2500 // x 坐标不变,y 方向正向移动 2500
ix 4000 // y 坐标不变,x 方向正向移动 4000
iy -2500 // x 坐标不变,y 方向负向移动 2500
ix -4000 // y 坐标不变,x 方向负向移动 4000
注意:x、y、ix 和 iy 必须小写,后跟空格
5. 提示:在 Allegro 中进行任何操作之前,先要设定操作对象的所在层面,即 Active Class 和
Subclass。
6. Bubble 布线偏好模式:Shove preferred 和 Hug preferred 区别
Shove preferred——推挤偏好模式【特点:优先自动推挤,实时推挤】
允许建立最优的互连路径,实时、基于形状的布线器动态推开障碍物。布线将自动跳
跃引脚或过孔。
Hug preferred——拥抱偏好模式【特点:优先自动紧靠、环抱,适于总线绘制】
用于 ECO 的完美解决方案或者用于需要绘制数据总线的地方。在该模式下,布线器有
限跟随其他互连线轮廓,只有在没有其他选择的时候才推开或者跳过障碍物。
7. 当布线有阻抗要求时,启动叠层设置对话框(Layout Cross Section)的方法,有三种途径:
1)在 SPECCTRQust 仿真工具中设置
2)在 Allegro Editor 中的 Tools->Setup Advisor 中设置
3)在 Allegro Editor 中 Console window 中输入命令‘Define lyrstack’来设置
8. CaptureCIS 下绘制原理图,如何查看 DRC 或 Create Netlist 时产生的错误代号的具体原因
在 CaptureCIS 中,执行 Help->Capture CIS Help->Capture Help F1,会弹出帮助主菜单,在左
边‘目录’标签页下点击‘Error Messages’项,即可根据错误代号查看具体内容
9. 为内层电源层绑定网络方法(实际上就是阴板铺铜)
内层为单一网络
※ 首先保证已经绘制好了 Route Keepin 外形框,它用作内层灌铜的边界。
Setup->Areas->Route Keepin (ActiveClass/Subclass:Route Keepin/All;Shape Fill 栏的
Type 项设置为 Unfilled),在工作区画出一个比外形框向内缩进的 Shape
※ Edit->Split Plane->Create ,出现‘Create Split Plane’对话框,选择要进行阴板铺铜
的层面,同时 Shape type desired 项设置为 Dynamic;单击 Create 按钮,出现‘Select
Net’对话框,选择要给层面绑定的网络,单击 OK 结束操作。此时系统自动以刚才绘制
的 Route Keepin 区域外形框为边界进行阴板铺铜。
内层为多个网络共用,需要内层分割
※ 首先保证已经绘制好了 Route Keepin 外形框,它用作内层灌铜的边界。
Setup->Areas->Route Keepin (ActiveClass/Subclass:Route Keepin/All;Shape Fill 栏的
Type 项设置为 Unfilled),在工作区画出一个比外形框向内缩进的 Shape
※ 设置各个网络之间的间隔区域,在 Allegro PCB 设计中,就是进行 Anti Etch 的设计。
Add->Line (ActiveClass/Subclass:Anti Etch/需要进行分割的内层;Line font:设置
为 Solid;Line width:绘制线宽,实际上就是设置不同网络之间的间隔距离的宽度)
※ 在工作区不同网络的分界处画出分割平面的 Anti Etch 线。
※ Edit->Split Plane->Create ,出现‘Create Split Plane’对话框,选择要进行阴板铺铜
并分割的层面,同时 Shape type desired 项设置为 Dynamic;单击 Create 按钮,出现
‘Select Net’对话框,依次为各个分割后的区域指定网络,单击 OK 结束操作。
(执行该步操作时可以将要分割的内层 Visibility 打开,以方便观察)
10. 后处理——Gloss 优化命令
无论手工布线还是采用 Specctra 自动布线,总会产生一些布线效果不好、多余过孔等问题,
此时可利用 Allegro 提供的 Gloss 命令对设计进行优化和调整。详情参见前面章节
11. 为布线设置过孔
Setup->Constraints,出现‘Constraints System Master’界面。单击 Physical rule set 部分的‘Set
Value…’按钮,弹出‘Physical Rule Set Etch Values’菜单,在其下方的 Via list property 栏中,
进行添加走线过孔的操作。Available database padstacks 里显示的是整个设计中用到的所有焊
盘; Current via list 中是所有可以作为过孔使用的焊盘。也可以使用浏览按钮 ,在焊盘
库中搜索。
12. 布线操作时,控制面板 Option 标签页中【Bubble】项的含义
【Bubble】项用来设置布线过程中如何影响已经存在的连接线或者过孔,有“Off”、“Hug
only”、“Hug preferred”、“Shove preferred”4 种选项。
“Off”表示布线时不影响已经存在的连接线或焊盘,如果他们之间不符合布线规则则
直接显示 DRC 错误标识。【特点:关闭紧靠/推挤功能】
“Hug only”表示所走连接线如果和焊盘之间的间距不满足设计规则时,连接线自动移
动位置,将焊盘包裹起来,但走线过程中不会影响已经存在的连接线或焊盘。
【特点:优先自动紧靠,但不环抱、推挤】
“Hug preferred” 表示所走连接线如果和焊盘之间的间距不满足设计规则时,连接线
自动移动位置,将焊盘包裹起来,只有在没有其他选择的时候才推开或者跳过障碍
物。【特点:优先自动紧靠、环抱,适于总线绘制】
“Shove preferred”表示当前所走线如果和已经存在的连接线或者焊盘之间的间距不
满足设计规则时,系统自动按照设计规则将已经存在的连接线或焊盘推挤到合适的
位置,以便留有空间给新的走线。【特点:优先自动推挤,实时推挤】
注:当【Bubble】项选中“Shove preferred”时,【Shove Vias】有“Off”、“Minimal”和“Full”
3 个选项,分别表示不推挤过孔、最小程度推挤过孔和完全推挤过孔。
13. 布线操作时控制面板 Option 标签页中【Snap to connect point】项的含义
【Snap to connect point】表示在连线时,系统是否自动将连接线连接到连接点的中心处。
14. 布线操作时控制面板 Option 标签页中【Replace etch】项的含义
【Replace etch】表示在连线时,若遇到重复的线段是否将重复的部分删除。
15. Route/Slide 人工修线
“Route/Slide” 命令是拉线过程中最常使用的功能,主要用来调整走线的使用空间以及将线
段整修平整,以下为其可修整的内容:
调整走线线段(Cline Segs)的位置
调整截取线段(Cline Segs)的位置
方法:1)执行人工修线命令 Route->Slide
2)在控制面板 Find Tab 页选中所有项
3)在设计窗口按鼠标右键,点选 Cut 选项;使用鼠标左键在讯号线上点选两点
作为 Cut 得到的线段。此时截取的线段会随光标上下移动,选好调整后的位
置按鼠标左键,Allegro 会将此截取的线段整修到此新的位置。
截取线段的功能,不只可以应用在垂直、水平的线段上,亦可使用于斜线上。
调整过孔(Vias)的位置
调整 T 点(Rat Ts)的位置
16. 在拉线过程中经常用到的命令
Route/Connect 人工拉线
Route/Slide 人工修整线段
Edit/Delete 删除线或线段
Display/Element 查看走线相关信息
Display/Property 查看走线属性
Display/Measure 测量对象之间的距离
17. allegro 中的 neck 的定义是什么?
就是,比正常走线变细的地方
18. 如何在移动元件时,让与该元件相连的布线一起移动(线长跟着变)?
move 时将右边 control 菜单的 options 下的 stretch etch 给勾中,即可。
19. Allegro 使用中的一些细节:
焊盘空心、实心的显示
经常每个人都有自己视觉的习惯,有些人习惯空心焊盘而有些人则习惯实心的,当面
对的板子和你自己的习惯矛盾时,可以用以下的方法来改变:
setup->drawing options,选 display 标签页,勾选‘Filled pads’ 显示的就是实心焊
盘,反之就是空心的。
Highlight
如果没有设定好的话,当我们高亮一个网络或者零件的时候,显示为虚线条,这样当
缩小屏幕的时候很难看清点亮的东西。按照如下的方法可以加以设定:
Setup->User Preferences…,在左侧点选 Display 项,在右侧的 display_nohilitefont 前面
打勾,则高亮的物体显示为实心颜色,否则为虚线。
显示平面层花盘
Setup->drawing options,选 display 标签页,勾选 Thermal pads 即可;另外要想显示钻
孔,只需勾选中 Display drill holes。
DRC 显示为填充以及改变大小
显示填充:Setup->User Preferences…,左侧点选 Display 项,右侧勾选 display_
drcfill 即可显示填充的 drc,否则为空心。
改变大小:Setup->drawing options,选 status 标签页,在‘DRC Controls’域的
Default symbol height 输入框可设置 DRC 符号的高度。
改变光标的形状(大十字、小十字等)
用惯 PowerPCB 的人可能比较习惯光标是大十字,充满整个屏幕,可以作如下设定:
Setup->User Preferences…,左侧点选 Ui 项,右侧 Pcb_cursor 的下拉菜单中选不同的项,
则可以实现不同的设定,其中 Cross 是小光标,infinite 是大光标。
将整版显示为 0mil 的线宽
Setup->User Preferences…,左侧点选 Display 项,右侧勾选中 display_nolinewith 可以
实现。
动态的显示布线长度
Setup->User Preferences…,在左侧点选 Etch 项,右侧勾选 Allegro_etch_length_on,这
样在布线的时候就可以实时的显示已布线的长度,当然并不是所有时候都方便,有时
候可能后觉得碍眼,看情况了。
20. Allegro 问与答:
公英制转换造成偏差太大
由于计算精度的限制,公英制的来回转换会产生一定的累积误差,因此在设计过程中,
应尽量避免频繁转换公英制
对于颜色的设置不能 EXPORT 颜色文件,每块 PCB 都必须重新设置颜色
Allegro 没有保存颜色表的功能,但是可以通过其他简单的方法解决,如:调用 Script
功能;或着准备一个空板,里面只保存偏好的颜色设置,把网表 Export 到这个空板就
可以了
Allegro 布线抓焊盘的功能太弱,不能保证线段结束时连接在 PIN 的中心
在 Allegro 右面的 Control panel->Option 中选择:Snap to connect point,并请在布线时连
到 Pad 前,右键选 TOGGLE 即可。如经常性出现此问题,可将 TOGGLE 设成快捷键方
式
Allegro 中直接从库中调的元件不能定义网络及 Ref des
是的。这样一来可以保证 LAYOUT 结果和原理图目的是一致的,而不会因为不小心而
出错。一般我们不应该直接从库中调元件,而应通过导入新的 NETLIST 来增加新元件.
设定最小线长与最大线长后 ,当线长小于设定时 ,没有 DRC 报错 (ELECTRICAL
CONSTRAINT SPREATSHEET)
在 版本以后,Allegro 增加了未布线的最小线长检查,可以通过对环境变量
CHECK_MIN_DELAYS 的设置来实现,如果设置为 ON 的话,当线长小于设定时,将
会有 DRC 报错。其检查的依据是两个 PIN 之间飞线的曼哈顿距离
Reserved
21. PCB 中如何查找器件(也可以用来查找网络、DRC error 等)
※ Display->Highlight 或点击 进入高亮操作状态。
※ 在控制面板 Find 标签页中,仅打开‘Symbols’项,在下方的 Find By Name 控制域内的下
拉列表框中选择‘Symbol(or Pin)’,在其下方的输入框内输入要查找器件的标号,如下图。
按回车键或将鼠标光标移到工作区,视窗将自动跳到器件处显示并高亮器件。
说明:如果目标器件已经被高亮,则利用上述方法,不能使工作区视野跳到目标器件处,
系统在 console window 会提示‘Symbol "Rn12" already highlighted.’此时有两种
解决方法:
1) 解除目标器件的高亮后,再利用上述方法查找(解除高亮的方法类似上述添加
高亮的方法,仅仅区别是运行命令 Display->Dehighlight)
2) 所有被高亮的器件在控制面板下方的 PCB 预览窗口中都会被高亮显示。当 PCB
上被高亮的器件不多时,可以在 PCB 预览窗口点击被高亮的目标器件,视窗将
切换到目标器件处显示。
22. 如何能够移动元件的某一个 PIN ?
运行 Edit->Properties(F12),控制面板 Find 页中仅勾选 Symbles 项(而不是 Comps 项,因
为该项不含 Unfixed_Pins 属性)。选中要 move Pin 的元件,给其添加 Unfixed_Pins 属性即
可。
注:如果元件添加了 Fixed 属性,将不能移动该元件的 pin,必须先解除 Fixed 属性方可。
23. 怎样画一条没有绿油的线?
Add ->Line,Class/Subclass:Package_Geometry/Soldermask_Top(假设该线为 Top 层走线),
同样位置再画一根 soldmask 的线
24. 怎么在 ALLEGRO 下使铺的铜不被涂上阻焊?
开阻焊窗。如果铺的铜在 Top 层,可在 Package_Geometry/Soldermask_Top 阻焊层添加一块
同样大小的 Shape。如果铺的铜在 Bottom 层,可在 Package_Geometry/Soldermask
_Bottom 阻焊层添加一块同样大小的 Shape。
25. 做阻焊开窗的原则
如果焊盘所在区域需要开阻焊,则尽量在设计焊盘时就设定好阻焊。
如果在设计器件 PCB 封装时(*.dra)需要某块区域开阻焊,则在 Package_Geometry/
Soldermask_Top 或 Package_Geometry/Soldermask_Bottom 层根据所需开阻焊形状添加
shape。注:出 Gerber 时一定要包含该层
如 果 在 PCB 设 计 中 ( *.brd ) 需 要 在 某 区 域 开 阻 焊 , 则 在 Package_Geometry/
Soldermask_Top 或 Package_Geometry/Soldermask_Bottom 层根据所需开阻焊形状添加
shape。注:出 Gerber 时一定要包含该层
如果在 PCB 设计中(*.brd)需要某根走线开阻焊,Add ->Line,Class/Subclass:
Package_Geometry/Soldermask_Top(假设该线为 Top 层走线),同样位置再画一根
soldmask 的线。注:出 Gerber 时一定要包含该层
26. 如何添加过孔禁放区?
Shape->Polygon/Rectangular/Circular,Class/Subclass:Via Keepout / All
27. allegro 中怎么加泪滴(teardrop)?
要先打开所有的走线层,执行命令 Route->Gloss->Parameters…,出现 Glossing Controller 菜单,
点选 pad and T connection fillet,在右侧弹出参数配置子菜单。勾选 circular pads,pins,vias,T
connections,点击 OK 返回到 Glossing Controller 菜单,点击 GLOSS 即可。加泪滴最好在出
GERBER 之前加。若要 MODIFY 板子,则要先删掉泪滴,执行命令 EDIT/DELETE,右边
的 FIND 栏中选 CLINE,下面的 FIND BY NAME 中选 property,点 more,选 FILLET=,/点
APPLY/OK 即可。无论加泪滴还是删掉泪滴,一定要先打开所有的走线层,否则,没打开的
走线层就不会有执行
28. 有一个 LOGO,是 .bmp 图象文件,请问怎样将它导入 ALLEGRO 设计中,并且以
SILKSCREEN 的形式显示?
借助第三方软件﹐把*.bmp 转成*.dxf,然后在 allegro 中导入 dxf 文件﹗﹗﹗先将 bmp 转成
dxf,再生成 format symbol !
29. BGA 焊盘扇出操作时如何使放置的 VIA 在 BGA 的 PIN 间居中?
你只能直接输入坐标定位,算好间距后,然后用矩阵复制就可以了。
矩阵复制就是,选中 copy 按钮,在 option 下面的 Qty 下分别填入数值,即可复制
X 表示 横向复制
Y 表示 纵向复制
Qty 表示 你要复制几次(就是说复制几个 via)
Spacing 表示 复制的这几个 via 间距都是多少
Order 表示 复制的方向。
比如 X 方向复制,你在 Order 选择 Right,就是从你复制的这个原始 via 开始向右复制
依次的 Left 表示向左复制。Down 和 Up 分别表示向下和向上复制。
注:Allegro 允许从焊盘拉线到还没有指定网络的 Via(空 net),因此可以先放置好所有 Via
再布线。
30. 如何在 Allegro 中只显示连线,不显示同一层的铺铜有的时候检查某一层的时候,既有连线
又有铺铜很难检查?
可 以 将 除 了 铺 铜 之 外 的 所 有 线 都 hilight 那 么 就 只 有 铺 铜 是 Dehilight , 然 后 使 用
Display--Color Priority,关闭铺铜的那个颜色,这时候这一层就只显示连线了。不过需要注
意的是,这一层的 via、pad、等等的颜色不能和铺铜的颜色一样,否则将会一起不显示了。
也可以改变 shape 显示的格点,在 user preference editor 中 display 选项卡,将 display_shapefill
一栏中的值填 5~10 之间的某个数(象素),这样 shape 在显示时就不是那么显眼了。
31. ALLEGRO 如何制作特殊规则区(例如线进入这个区域线宽、线距会有变化)
※ 绘制规则区。规则区必须绘制在 BoardGeometry 的 Constraint_Area 字类。方法有两种:
Setup->Constraints…, 点击 Contraints areas 区域中的 Add 按钮, 绘制 area
Shape->Rectangular (Shape Fill Type:unfilled),注意控制面板中 Options 标签页中
选择 Class:BoardGeometry 和 Subclass:Constraint_Area.
注:BoardGeometry/Constraint_Area 的 visibility 必须打开,否则看不到绘制的 Area。
※ 定义线宽、间距规则组
Setup->Constraints…,出现 Constraint System 对话框。分别点击 Spacing rule set 和
Physical (lines/vias) rule set 中的‘Set values’…定义间距和线宽规则组。
下图为建立一个名字为‘10’(表示走线间距为 10mil)的间距规则组:
※ 给规则区添加约束属性 Net_Physical_Type 和 Net_Spacing_Type,并分别起个名字
Edit->Properties,控制面板 Find 标签页勾选中 Shapes,左键点击规则区,弹出属性编
辑窗口,在窗口左侧的 Available Properties 栏内找到并点击 Net_Physical_Type 和
Net_Spacing_Type 项使其添加到窗口右侧的属性列表中,分别给二者起一个名字,最好
能表现他的属性,填入‘Value’栏内。点击 Apply 按钮,完成属性添加。如下图:
其中,Net_Spacing_Type 对应的名字‘DATA(10/15)’表示与同组走线的间距 10mil,
与其他走线的间距为 15mil;Net_Physical_Type 对应的名字‘8’表示走线线宽为 8mil。
※ 给约束属性名(已由第 3 步定义)指定规则组(已由第 2 步定义)
Setup->Constraints…,出现 Constraint System 对话框。点击 Spacing rule set 域的
Assignment table…指定间距规则组;点击 Physical rule set 域的 Assignment table…指
定走线线宽规则组。
32. 如何在不同设计文件之间拷贝颜色(例如要在 中使用另一设计 中的某种颜色)
打开 ,在 Color and Visibility 设置菜单中的 Palette 栏内点击需要拷贝的颜色,然后点
击 Modify…按钮,弹出颜色对话框,将下图中红色圈内的值拷贝到 中某一颜色定义中
即可无偏差得到该颜色。
33. 由线段和弧绘制成的任意封闭图形与 Shape 之间的转换方法
先利用线段和弧绘制所需的封闭图形,再利用下面的命令转换成 Shape。
Shape->Compose Shape
Shape->Decompose Shape
34. Allegro 同时拉多根线的方法(适于总线等快速走线)
启动拉线命令 Route ->Connect (F6),用鼠标框选所有要一起走线的 wire 或焊盘,此时所有
被框选的连线会同时粘连在光标上并随之移动。
35. 怎么在 Allegro 中定义自己的快捷键?
在 allegro 下面的空白框内,紧接着 command>提示符,打入 alias F4(快捷键) room out(命令)。
或者在 Cadence 安装目录/share/pcb/text 里有个 env 文件,用写字板打开,找到 Alias 定义的
部分,进行手动修改既可。
36. 怎么进行叠层定义?在布线完成之后如何改变叠层设置?
在 Allegro 中,选 Setup-Cross-section。如果想添加层,在 Edit 栏选 Insert,删除为 del。材料
型号:绝缘层一般为 FR-4,Etch 层为 Copper;层的类型:布线层选 Conductor,铺铜层为 Plane,
绝缘层为 Dielectric;Etch Subclass Name 分别为 Top,Gnd,S1,S2,Vcc,Bottom;Film Type
一般选择 Positive,plane 层选择 Negative。
如果布线完成之后,发现叠层设置需要改动。比如原来设置的为 3,4 层是 plane 层,现在
需要改为 2,5 层,不能简单的通过重命名来改变,可先在 2,5 层处添加两层 plane 层,然
后将原来的 plane 层删除。
37. 为什么器件位置摆放不准确,偏移太大?
主要是因为 Grids 设置的问题,可在 setup-grids 中将每一层的 Etch 及 Non-etch 的 grids
的 X、Y 的 spacing 间隔调小。对于一些对位置要求比较严格的器件,比如插槽,金手指等
用于接口的元器件,则应该严格按照设计者给定的位置尺寸,在命令行里用坐标指令进行定
位。如:x 1200 3000 。
38. 在布局后如何得到一个整理后的所有元件的库?
如果嫌 physical 目录下各类文件过分繁冗,想删除一些无用的文件,或者只有一个*.brd 文
件,想获取所有的元件及 pad 封装库的信息,可以采用这种办法:将*.brd 另存在一个新的
目录下,在 File->选 export->libraries,点中所有选项,然后 export,即可在你的新目录下
生成所有的*.pad,*.psm,*.dra 文件。
39. 布线完成之后如果需要改动封装库该如何处理?
在器件摆放结束后,如果封装库有改动,可以 Place->update symbols,如果是 pad 有变化,
注意要在 update symbol padstacks 前打勾。布线完成之后尽量避免封装库的改动,因为如果
update,连接在 Pin 上的连线会随 Symbol 一起移动,从而导致许多连线的丢失,具体解决办
法有待于研究。
40. 如何在 Specctra Quest 里使用 IBIS 模型进行仿真?
首先将 IBIS 模型转化为*.dml 文件。在 Specctra Quest SI expert 中 Analyze->Si/EMI SI-
>library,在出现的新窗口的右下角,点击 translate->ibis2signoise,然后在 browse 里选择*.ibs
文件,将其转化为*.dml 文件。然后在 Analyze->SI/EMI SI->model Assign 中将所有的器
件加载对应的模型。然后就可以用 probe 提取信号线进行仿真了。
41. 用贴片焊盘(type=single)做成的 package,用 tools\padstack\modify design padstack...编辑,
发现 type 变成了 blind/buried。为什么会这样?
这是软件显示上的小漏洞,但是丝毫不影响使用,焊盘还是事实上的 single。
42. 修改过焊盘后以同名保存(替换了原来的焊盘),但是用 tools\padstack\modify design
padstack...检查用该焊盘做的 package,发现仍旧是老焊盘,而事实上任何目录中老焊盘都不
存在了。既然 allegro 是要到 pad_path 中调用焊盘的,为什么会出现这种情况?
修改完焊盘之后, 需要 update pad 才能更新,因为 Allegro 是把相关的数据都纳入到 brd 文件
集中管理的。
43. 如何手动启动一次 DRC 检查?
在 PCB 设计中如果违反了间距设计规则,系统将在违反规则处添加一个 DRC Error 标志。
当改正错误之后,DRC Error 标志仍旧会存在原处,此时可手动启动一次 DRC 检查,使系
统删除该标志。方法如下:
Setup ->Constraints… ,点击 Set DRC modes…,在弹出的菜单中的 All Spacing Check 项的
下拉菜单中选择 Always,然后点击 OK 按钮,即可刷新设计中的有关间距的 DRC 标志。
44. Setup ->Constraints,Spacing rule set 中 Assignment table 配置菜单中各项的含义及作用
‘Net Spacing Type Properties’: 该项包括两列,分别指两个网络具有的间距规则属性;
当这两个间距规则属性相同时表示要设置的是‘组内’间距,不同时表示各自代表的网络
之间的‘组间’间距。
‘Area Property’: 所在属性区域
‘Net Spacing Constraint Set’: 间距规则
例 1:说明下图中每一行的含义
第一行:具有 No_Type(即没有赋予任何间距规则属性)和 No_Type 间距属性的两个网络
处在 No_Type 区域(即没有定义限制区的地方)时,二者之间套用 DEFAULT 间
距规则组。
第二行:具有 DDR_Data(10/15)和 No_Type 间距属性的两个网络处在 No_Type 区域(即
没有定义限制区的地方)时,二者之间套用‘15’间距规则组。
第三行:具有 DDR_Data(10/15)和 DDR_Data(10/15)间距属性的两个网络处在 No_Type
区域(即没有定义限制区的地方)时,即同属 DDR_Data(10/15)组内信号线,二
者之间套用‘10’间距规则组,即组内间距。
第四行:具有 DDR_Ctrl(10/15)和 No_Type 间距属性的两个网络处在 No_Type 区域(即
没有定义限制区的地方)时,二者之间套用‘15’间距规则组。
第五行:具有 DDR_Data(10/15)和 DDR_Ctrl(10/15)间距属性的两个网络处在 No_Type 区
域(即没有定义限制区的地方)时,二者之间套用‘15’间距规则组。
例 2:DDR2 走线间距往往要求较大(例如最小线间距 10mil 以上),当 DDR 信号线从 BGA
引出或引入时往往达不到该要求,因此需要在 BGA 投影区内添加限制区(Constraint Area)
同时为该限制区赋予较宽松的间距要求(例如允许最小间距为 5mil)。下图为在 BGA 投影
区添加了限制区并赋予 Bga_Interna(5)属性,说明下图中每一行的含义。
第一行:具有 No_Type 和 DDR_Ck(15/15)间距属性的两个网络处在 Bga_Interna(5)区域时
,二者之间套用‘5’间距规则组。
第二行:具有 DDR_Data(10/15)和 DDR_Data(10/15)间距属性的两个网络处在 Bga_
Interna(5)区域时,二者之间套用‘5’间距规则组。
第三行:具有 DDR_Data(10/15)和 DDR_Ctrl(10/15)间距属性的两个网络处在 Bga_
Interna(5)区域时,二者之间套用‘5’间距规则组。
第四行:具有 DDR_Data(10/15)和 DDR_Dqs(15/15)间距属性的两个网络处在 Bga_
Interna(5)区域时,二者之间套用‘5’间距规则组。
第五行:具有 DDR_Data(10/15)和 DDR_Ck(15/15)间距属性的两个网络处在 Bga_
Interna(5)区域时,二者之间套用‘5’间距规则组。
在 例 1 、 例 2 两 图 中 的 Net Spacing Type Properties 都 存 在 “ DDR_Data(10/15) —
DDR_Ctrl(10/15)”项,由于两者的 Area Property 不同(一个是 No_Type,另一个是 Bga_
Interna(5))所以套用的间距规则也可以不同。
45. DDR2 pcb layout:间距规则、线宽规则及等长约束设置方法
对于一条串接匹配电阻的信号线,即使给该电阻添加信号模型(Signal Model)构成
Xnet,也不能一次性将间距规则赋予该信号线位于匹配电阻两端的信号线。需分别为
匹配电阻两端的信号线添加间距规则。
DDR2 走线间距往往要求较大(例如最小线间距 10mil 以上),当 DDR 信号线从 BGA
引出或引入时往往达不到该要求,因此需要在 BGA 投影区内添加限制区(Constraint
Area)同时为该限制区赋予较宽松的间距要求(例如允许最小间距为 5mil)。
46. 差分线的走线间距在哪里设置?
在 setup->constraints...->Physical(lines/vias)rule set->set values...->Diffpair primary gap.
【Diffpair primary gap】:设置的是差分对之间的边到边理想间距。 (+/-tolerance 值是允许的
偏差值,如果间距偏差在范围内,差分对被认为是耦合的)。 默认值 0mil。
【Diffpair neck gap】:设置的是最小可允许的边到边差分线间距,当在比较密集的区域走线
时,可能需要切换到 Neck 模式。最小可允许的间距包括 Neck Gap 减去-Tolerance。
47. Differential Pair 差分线的定义及约束设置方法(包括走线间距)
步骤如下:
※ 定义 Differential Pair,有两种方法:
1) Logic -> Assign Differential Pair,可以手工指定(Diff Pair information 栏中 Add)也
可利用 Auto Generate 自动生成。
2) Setup -> Electrical Constraint Spreadsheet ,在约束管理器中定义差分对。
※ 定义差分线约束集(定义线宽、线距、耦合等参数)
Setup -> Constraints 中点选 Electrical constraint sets…选择 DiffPair Values 标签页,在
Electrical Csets 栏中点选 New,输入一个 ECset 名字,然后在 DiffPair Values 中进※Rule
的具体设定(如果勾选 Copy selected cset to new cset 会将旧的设定 copy 一份至新的设定
中)
※ 指定约束集到差分对
Setup -> Constraints 中点选 Electrical constraint sets…选择 Assign 标签页,在 Available
objects 栏中选择差分对添加到右边的 Assigned objects 栏内;同时在上方的 Electrical
Csets 栏内点中需要加载到差分对的约束集。点击下方的 Apply 按钮,点击 OK 按钮,完
成约束集的指定。
※ 将 Mode 中 All Differential pair checks 项 的 DRC Mode 勾到 On
Setup -> Constraints 中 点 选 Electrical constraint sets… 选 择 Modes 标 签 页 , 将 All
Differential pair checks 项 的 DRC Mode 勾到 On
※ 设置完成可以走线了。
版本后,差分对可以同时走线,可以同时打过孔并且打过孔的方式可以设置,两个
过孔的间距也可以手动设置。
Spacing 菜单内容如下:
设置 Rule 相关专有名词解释
Primary Gap —— 两条线主要的间距
Primary Line Width —— 两条线主要的线宽
Neck Gap —— 两条线次要的线距 注:可在走线时点右键选 Neck Mode 切换到 Neck
模式,此时差分线的走线线宽和线距由 Primary 设定值转换为 Neck 设定值
Neck Width —— 两条线次要的线宽
Coupled Tolerance +/- —— 两条线的线距误差值
Min Line Spacing —— 两条线的最小间距
Max Uncoupled Length —— 两条线无法走在一起时,可允许的线长
Phase Tolerance —— 两条线长度可允许的误差值
Neck 模式设定的线宽线距主要目的是当 Primary 的线宽线距无法满足走线要求
时使用。例如可将 Neck 的线宽线距设置的相对 Primary 小一些,当走线进入
BGA 焊盘区域无法满足 Primary 要求的线宽线距时,切换到 Neck 模式走线。
但是 Neck 的线宽线距并不一定就要设置的比 Primary 小,可将 Primary 理解为
两条线主要的线宽线距而 Neck 为次要的线宽线距,利用这一点可以方便实现某
些特殊要求的布线。例如差分线要求阻抗控制时,在表层和内层走线的间距和
线宽可能不同,此时可将 Primary 项设定为表层走线的线宽线距而将 Neck 项设
定为内层走线的线宽线距,走线时当从表层切换至内层时可点右键选 Neck Mode
切换到 Neck 模式,此时走线的线宽线距也随之变为 Neck 设定值。
48. Allegro 系统会根据优先级别来判定当前应该选用哪种方式设定的参数(线宽线距等)
优 先 级 别 为 : 直 接 添 加 属 性 > "Setup->Constraints->Electrical constraint sets" > "
Setup->Constraints->Physical rule set ->Set values "
49. Reserved
Enter the password to open this PDF file:
使用电脑下载
- 1
使用电脑打开以下地址
doc.mbalib.com
- 2
在搜索框输入以下数字并搜索
(30分钟内有效)
- 3
下载当前文档