Allegro-Skill-axl函数简介
Cadence应用如何在allegro中使用skill
Cadence应⽤如何在allegro中使⽤skillCadence软件应⽤:如何在Allegro中执⾏SkillHow to Perform Skills in Allegro ToolsDoc Scope : Allegro SkillDoc Number : SFTEC11005Author : Daniel ZhongCreate Date : 2011-11-09Rev : 1.00⽬录1Skill简介 (3)2在Allegro命令⾏中加载和调⽤Skill (3)2.1命令⾏加载Skill (3)2.2命令⾏调⽤Skill (4)3在Allegro启动时加载Skill (5)3.1allegro.ilinit⽂件 (5)3.2编辑allegro.ilinit (7)4在Allegro菜单栏上调⽤Skill (8)4.1Allegro系列⼯具的菜单⽂件(.men) (8)4.2菜单⽂件搜索路径 (10)4.3定制菜单 (11)1Skill简介Skill是Allegro软件⼆次开发的接⼝,⽤此语⾔编译的⽂件可以在Allegro中载⼊和调⽤。
我们可以通过编写不同的Skill程序⽂件,在Allegro⼯具中实现各种原有命令不能实现或不⽅便实现的功能。
Skill语⾔的语法结构和C++语⾔类似,⼯程师如果有⼀定C语⾔编程基础,使⽤Skill语⾔时就会很⽅便了。
对于Skill程序的⽤户,不需要对Skill语⾔有过多的了解,只需要知道如何在Allegro中加载和调⽤Skill即可,本⽂就是介绍了如何加载和调⽤Skill,可以采⽤两种⽅式:■在Allegro命令⾏中加载和调⽤■在Allegro启动⾃动加载,在Allegro菜单上调⽤2在Allegro命令⾏中加载和调⽤Skill本章介绍如何在Allegro命令⾏中加载和调⽤Skill,分为以下两个⼩节:■命令⾏加载Skill■命令⾏调⽤Skill2.1命令⾏加载Skill以本站资源下载中的⼀个skill程序clinecut.il为例,将此⽂件移动或复制allegro设计⽂件(.brd)所在⽬录。
Allegro使用简介
Allegro使⽤简介Allegro使⽤简介⼀.零件建⽴在Allegro中, Symbol 有五种, 它们分别是Package Symbol 、Mechanical Symbol、Format Symbol、Shape Symbol、Flash Symbol。
每种Symbol 均有⼀个Symbol Drawing File(符号绘图⽂件), 后缀名均为*.dra。
此绘图⽂件只供编辑⽤, 不能给Allegro数据库调⽤。
Allegro能调⽤的Symbol 如下:1.Package Symbol⼀般元件的封装符号, 后缀名为*.psm。
PCB 中所有元件像电阻、电容、电感、IC 等的封装类型即为Package Symbol。
2.Mechanical Symbol由板外框及螺丝孔所组成的机构符号, 后缀名为*.bsm。
有时我们设计PCB 的外框及螺丝孔位置都是⼀样的, ⽐如显卡, 电脑主板, 每次设计PCB时要画⼀次板外框及确定螺丝孔位置, 显得较⿇烦。
这时我们可以将PCB的外框及螺丝孔建成⼀个Mechanical Symbol, 在设计PCB 时, 将此Mechanical Symbol 调出即可。
3.Format Symbol由图框和说明所组成的元件符号, 后缀名为*.osm。
⽐较少⽤。
4.Shape Symbol供建⽴特殊形状的焊盘⽤, 后缀为*.ssm。
像显卡上⾦⼿指封装的焊盘即为⼀个不规则形状的焊盘, 在建⽴此焊盘时要先将不规则形状焊盘的形状建成⼀个Shape Symbol, 然后在建⽴焊盘中调⽤此Shape Symbol。
5.Flash Symbol焊盘连接铜⽪导通符号, 后缀名为*.fsm。
在PCB 设计中, 焊盘与其周围的铜⽪相连, 可以全包含, 也可以采⽤梅花辨的形式连接,我们可以将此梅花辨建成⼀个Flash Symbol, 在建⽴焊盘时调⽤此Flash Symbol。
其中应⽤最多的就是Package symbol即是有电⽓特性的零件,⽽PAD是Package symbol构成的基础.⼀)建⽴PAD启动Padstack Designer来制作⼀个PAD,PAD按类型分分为:1. Through,贯穿的;2. Blind/Buried,盲孔/埋孔;3. Single,单⾯的.按电镀分:1.Plated,电镀的;2.Non-Plated,⾮电镀的.a.在Parameters选项卡中, Size值为钻孔⼤⼩;Drill symbol中Figure为钻孔标记形状,Charater为钻孔标记符号,Width为钻孔标记得宽度⼤⼩,Height为钻孔标记得⾼度⼤⼩;/doc/8bce99d233d4b14e85246843.html yers选项卡中,Begin Layer为起始层,Default Internal为默认内层,End Layer为结束层,SolderMask_Top为顶层阻焊, ,SolderMask_Bottom为底层阻焊PasteMask_Top为顶层助焊, PasteMask_Bottom为底层助焊;Regular Pad为正常焊盘⼤⼩值,Thermal Relief为热焊盘⼤⼩值,Anti Pad为隔离⼤⼩值.⼆)建⽴Symbol1.启动Allegro,新建⼀个Package Symbol,在Drawing Type中选PackageSymbol,在Drawing Name中输⼊⽂件名,OK.2.计算好坐标,执⾏Layout→PIN,在Option⾯板中的Padstack中找到或输⼊你的PAD,Qty代表将要放置的数量,Spacing代表各个Pin之间的间距,Order则是⽅向Right为从左到右,Left为从右到左,Down为从上到下,Up为从下到上;Rotation是Pin要旋转的⾓度,Pin#为当前的Pin脚编号,Text block为⽂字号数;3.放好Pin以后再画零件的外框Add→Line,Option⾯板中的Active Classand Subclass分别为Package Geometry和Silkscreen_Top,Line lock为画出的线的类型:Line直线;Arc弧线;后⾯的是画出的⾓度;Line width 为线宽.4.再画出零件实体⼤⼩Add→Shape→Solid Fill, Option⾯板中的ActiveClass and Subclass分别为Package Geometry和Place_Bound_Top,按照零件⼤⼩画出⼀个封闭的框,再填充之Shape→Fill.5.⽣成零件Create Symbol,保存之三)编写Device若你从orCad中直接⽣成PCB的话就⽆需编写这个⽂件,这个⽂件主要是⽤来描述零件的⼀些属性,⽐如PIN的个数,封装类型,定义功能等等!以下是⼀个实例,可以参考进⾏编写:74F00.txt(DEVICE file: F00 –used for device: ‘F00′)PACKAGE SOP14 ?对应封装名,应与symbol相⼀致CLASS IC ?指定封装形式PINCOUNT 14 ? PIN的个数PINORDER F00 A B Y ?定义Pin NamePINUSE F00 IN IN OUT ?定义Pin 之形式PINSWAP F00 A B ?定义可Swap 之PinFUNCTION G1 F00 1 2 3 ?定义可Swap 之功能(Gate) PinFUNCTION G2 F00 4 5 6 ?定义可Swap 之功能(Gate) PinFUNCTION G3 F00 9 10 8 ?定义可Swap 之功能(Gate) PinFUNCTION G4 F00 12 13 11 ?定义可Swap 之功能(Gate) PinPOWER VCC; 14 ?定义电源Pin 及名称GROUND GND; 7 ?定义Ground Pin 及名称⼆、导⼊⽹表Ⅰ. ⽹表转化在调⼊前,应该将要增加的定位孔和定位光标以及安装孔加到⽹表中,定位孔⽤M*表⽰,定位光标⽤I*表⽰Ⅱ . 进⼊Allegro,File/Import/Logic调⼊⽹表,若显⽰”0 errs,0 warnings”则表⽰没有错误,可以进⾏下⼀步,否则,应⽤File/Viewlog 查看原因,根据提⽰要求电路设计者修改原理图或⾃⼰在元器件库中加新器件.四. 设置Ⅰ设置绘图尺⼨,画板框,标注尺⼨,添加定位孔,给板框导⾓1. 设置绘图尺⼨:Setup→Drawing Size2. 画板框:Class: BOARD GEOMETRY Subclass: OUTLINEAdd→Line ⽤“X 横坐标纵坐标” 的形式来定位画线3.画Route Keepin:Setup→Areas→Route Keepin⽤“X 横坐标纵坐标” 的形式来定位画线4.导⾓: 导圆⾓Edit→ Fillet ⽬前⼯艺要求是圆⾓或在右上⾓空⽩部分点击⿏标右键→选Design Prep→选Draft Fillet⼩图标导斜⾓Edit→Chamfer 或在右上⾓空⽩部分惦记点击⿏标右键→选Design Prep→选Draft Fillet ⼩图标最好在画板框时就将⾓倒好,⽤绝对坐标控制画板框,ROUTEKEEPIN,ANTIETCH,ANTIETCH可以只画⼀层,然后⽤EDIT/COPY,⽽后EDIT/CHANGE编辑⾄所需层即可.5. 标注尺⼨: 在右上⾓空⽩部分惦记点击⿏标右键→选DraftingClass: BOARD GEOMETRY Subclass: Dimension圆导⾓要标注导⾓半径.在右上⾓点击右键→选Drafting,会出现有关标注的各种⼩图标Manufacture→Dimension/Draft→Parameters…→进⼊Dimension Text设置在标注尺⼨时,为了选取两个点,应该将Find中有关项关闭,否则测量的会是选取的线段注:不能形成封闭尺⼨标注6.加光标定位孔:Place→By Symbol→Package,如果两⾯都有贴装器件,则应在正反两⾯都加光标定位孔,在在库中名字为ID-BOARD.如果是反⾯则要镜像. Edit→Mirror定位光标中⼼距板边要⼤于 8mm.7. 添加安装孔:Place→By Symbol→Package,⼯艺要求安装孔为3mm.在库中名字为HOLE1258.设置安装孔属性:Tools→PADSTACK→Modify若安装孔为椭圆形状,因为在印制板设计时只有焊盘可以设成椭圆,⽽钻孔只可能设成圆形,需要另外加标注将其扩成椭圆,应在尺⼨标注时标出其长与宽. 应设成外径和Drill同⼤,且Drill 不⾦属化9. 固定安装孔:Edit→Property→选择⽬标→选择属性Fixed→Apply→OKⅡ设置层数Set up→Cross-Section…Ⅲ设置显⽰颜⾊Display→Colour/Visibility可以把当前的显⽰存成⽂件:View→Image Save,以后可以通过View→ImageRestore调⼊,⽣成的⽂件以view为后缀,且此⽂件应该和PCB⽂件存在同⼀⽬录下。
Allegro软件操作技巧
5
Allegro 软件操作技巧-lingling1350@
2) (如上右图,其它操作同前) 3)上两步得到的网络列表分别拷到《U_管脚调整》表中。
再做成 lis 文件。
14、让两孔间的线等间距:ROUTE---RESIZE/RESPACE---SPREAD BETWEEN VOIDS。 对于两孔间有多跟线的情况同样适用。当然假如所有的线都用这种方法等间 距的话必然很费时, 修线时可以把格点改大、采用偶数小格点的方法就很容易让 两根线等间距了。 15、添加测试点 分为自动添加和手动添加两种,关键在于参数设置。 1) 自动添加
6
Allegro 软件操作技巧-lingling1350@
设置好参数后,点 Generetetesrpoints 就会给底层每个网络加上测试点。
7
Allegro 软件操作技巧-lingling1350@
另外,测试点之间保持 75mil 以上的间距、测试点与焊盘之间要也保持适当 的间距。
12
Allegro 软件操作技巧-lingling1350@
Байду номын сангаас
图a
图b
3)加粗:EDITCHANGE线宽为 50,如下图 c 所示: 实际上,电源平面比顾平面内缩 40,结合第一步 OFFSET 填 15、第三步加粗 到 50,不难得出,经过这一番折腾后,确实内缩了 40 吧。如果需要改变内缩大 小,自己算一下具体数值就行了。
2)16.3: 16.3 创建区域规则:Shanpe Add Rect,Options 参数设置如下图(区域 名称 BGA08 自动会出现在规则管理器中) 画区域铜 在规则管理器中的
3
Allegro 软件操作技巧-lingling1350@
Allegro指令介绍
Key Points and Back annotation
某些零件不编号 Edit – Property – Hard_Location 某些零件特別编号 Edit – Property – Auto Rename 一定要回编至Capture Capture
→Routing Automatic Routing
Allegro 會執行 Auto Route
Unconnected Pins
Tools – Reports – Unconnected pins 这个报表表示加以查核在布线 完毕之后是否还有未布完的线 可以存成 File 可以直接 Show 在屏幕上
全线删除 请在 Find 下先选 All Off在勾选Clines 线段删除 请在 Find 下先选 All Off再勾选Cline Segs 两点间线段刪除 Edit – Delete 按 鼠标 右鍵下的 Cut 点选要刪除的线段的第一点(线段变亮) 再点第二点
Using the SPECCTRA Autorouter 執行Route
Creating a Negative Copper Area
内层负片覆铜 shape→ polygon 画内层铺铜范围 Shape select→ Assign net 给铜箔赋予信号名
內層切割(半Auto) Auto)
Add – Line Options中的class改成Anti Etch 先将Options中的class改回Etch Edit – Split Plane – Create 将点亮中的铜箔给予适当的信号名称
Renaming Reference Designators
零件重新编号的目的: 测试.除错.修改.组装以及维护上更加方便 组装以及维护上更加方便 要注意: Rename的动作最后执行
allegro?使用汇总
allegro?使用汇总1.如何在allegro中取消花焊盘(十字焊盘)set up->design parameter ->shape->edit global dynamic shape parameters->Thermal relief connects ->Thru pins ,Smd pins -> full contact2.allegro 中如何设置等长setup -> constraints->electrical->net->routing->Min Max Propagation delays选择要等长的net->右击->create->pin pair->选择pin修改 prop daly 的min 和max项3.如何设置allegro的快捷键修改文件$inst_dir\share\pcb\text\env 或$inst_dir\pcbevn\env快捷键定义如下:alias F12 zoom outalias ~R angle 90 (旋转90 度)alias ~F mirror (激活镜相命令)alias ~Z next (执行下一步命令)alias End redisplay(刷新屏幕)alias Del Delete(激活删除命令)alias Home Zoom fit(全屏显示)alias Insert Define grid(设置栅格)alias End redisplayalias Pgdown zoom outalias Pgup zoom inalias F12 custom smoothalias Pgup slidealias Pgdown donealias Home hilightalias End dehilightalias Insert add connectalias Del Delete4.如何在allegro中删除有过孔或布线的层时不影响其他层1.输出specctra的dsn文件allegro->file->export->router->demo.dsn->run2.产生session文件specctra(pcb router)->file->write->session->demo.ses->ok3.删除某一层中的布线和过孔delete(ctrl+D)->..4.删除allegro中的板层setup->cross section->鼠标右键->delete5.导入session文件allegro->file->import->router->demo.ses->run也可先将通过该层的过孔先替换成顶层焊盘,删除该层以后再替换回来5.如何在Allegro中同时旋转多个零件1.Edit->Move 在Options中Rotation的Point选User Pick2 再右键选Term Group 按住鼠标左键不放并拉一个框选中器件多余的可用Ctrl+鼠标左键点击去掉.3. 选好需整体旋转的器件后右键complete.4. 提示你Pick orgion 鼠标左键选旋转中心.5 下面右键选rotate 即可旋转了.6.allegro 16.0 透明度设置display->colour/visibility->display->OpenGL->Global transparency->transparent7.allegro Drill hole size is equal or larger than smallest padsize.Pad will be drilled away.提示Drill hole size is equal or larger than smallest pad size.Pad will be drilled away.不用理睬这一提示8.ALLEGRO 如何生成钻孔文件Manufacture -> NC -> Drill Customization->auto generate symbolsManufacture -> NC -> Drill LegendManufacture -> NC ->NC parameters->enhanced excellon format->closeManufacture -> NC -> NC Drill->auto tool select->optimize drill head travel9.CAM350如何正确导入钻带文件导进去后MACRO->PLAY->选择(CAM350--SCRIPTS)PADS_DRILL->选择钻带的REP文件还没测试过,rep文件从哪儿来的呢10.allegro 如何设置route keepin,package keepin1.setup->area->route keepin,package keepin ->画框2.edit ->z-copy->options->package keepin,route keepin->offset->50->点击外框11.allegro 中如何禁止显示shape完全禁止的方法没找到setup->user preference editor->display->display_shapefill->输入一个较大的数shape在显示时就不是那么显眼了set-user preference editor-shape-no shape fill(v)12.如何在allegro设置自定义元件库路径在下面两个位置添加自定义元件的路径Setup->User Preferences Editor->Design_paths->padpath Setup->User Preferences Editor->Design_paths->psmpath1.在allegro中如何修改线宽在Allegro的Setup->constraints里的set standard values中可定义每一层走线的宽度,比如,可以定义VCC和GND的线宽为10 Mil。
allegro skill FORM中ENUM的使用方法详解
FORM中ENUM的使用方法详解ALLEGRO FORM中ENUM也称为combo box 即组合框。
在FIELD中定义关键词ENUMSET来使用。
使用ENUM前,首先须定义POPUP。
可通过以下方式定义:1.在FORM文件中直接定义一个POPUP来指定ENUM的下拉列表。
比如:POPUP<Layer_Names>"TOP""TOP","GND02""GND02","POWER03""POWER03","BOTTOM""B OTTOM".该字段定义在TILE关键词前面。
2.当FORM文件已经加载,并显示出来。
此时我们可使用AXL函数axlFormBuildPopup 来定义下拉列表。
POPUP “<>”中的内容为POPUP的名称,比如上列中<Layer_Names>,我们可通过Layer_Names来调用该菜单;POPUP中单个选项的基本格式为display/dispatch,比如上例中的"TOP""TOP",其中display 为显示内容,而dispath为该选项的派遣值,即在FORM中,通过form->curValue获取到的值。
当然,这两个参数可以一致。
在FORM中,ENUM共有两种显示方式:1.单行显示,必须通过下拉列表来显示。
定义ENUMSET时,只需要指定其宽度即可。
请参考下面例子:FIELD LayerFLOC 1 1ENUMSET 11POP "Layer_Names"ENDFIELD显示效果如下:2.多行显示。
可显示POPUP中多个下拉选项。
通过指定ENUMSET的长宽来设置。
FIELD LayerFLOC 1 1ENUMSET 11 10POP "Layer_Names"ENDFIELD显示效果如下:例如,定义一个ENUM来获取当前所有ETCH层。
Allegro Skill详细安装及常用插件介绍指南
报告大纲1.安装技巧2.功能简介3.实例演示4.讨论反馈一、Stella的安裝1.新建Stella资料夹放*.il程式文件,如路径为C:\。
2.将Stella程序数据夹中的Menu中的内容copy到Allegro的安装目录中,如D:\Cadence\SPB_15.5.1\share\pcb\text\cuimenus中。
3.将Stella程序数据夹中env文件夹中Allegro .ilinit copy 至“Allegro工作路径”\pcbenv内。
4.新增环境变量Stella_skill 值为C:\Stella。
Stella的安裝(这里只介绍一种方法,都大同小异)1、新建Stella资料夹于C:\。
Stella文件夹主要用于放*.IL文件。
此文件夹名称和存放路径都可选。
Stella的安裝2、将Stella程序数据夹中的Menu中的内容copy到Allegro的安装目录中如D:\Cadence\SPB_15.5.1\share\pcb\text\c uimenus中。
实际上就是修改D:\Cadence\SPB_15.5.1\share\pcb\text\cuimenus文件夹中的allegro.men文件,增加菜单功能,增加一栏命令。
Stella的安裝POPUP "&Stella"BEGINMENUITEM "Align Symbol", "align_sym"MENUITEM "DRC Walker...", "drc walk"MENUITEM "Place Xrf", "skill xrfin"MENUITEM "Find Stubs", "find_stubs"MENUITEM "Find Dang Line/Cline", "find_dang"MENUITEM "Hilight Net without TP", "hl_ntp"MENUITEM "Hilight Via without Net", "hlvia"MENUITEM "Netlist Editor", "net_editor"MENUITEM "Mil To Mm", "conv"MENUITEM "Cal", "cal"MENUITEM "Clinecut", "clinecut"END此下面还可继续添加其它命令Stella的安裝三、将Stella程序数据夹中env文件夹中Allegro .ilinit copy 至C:\pcbenv内。
Allegro_Skill_axl函数简介
Allegro Skill axl函数简介1.allegro skill简介1.1. AXL-SKILL专用于allegro的skill被称为AXL-SKILL,只有使用这些专用的函数才可以直接访问allegro 的database。
结合skill语法和这些专用函数可以编写出实现各种功能的命令。
专用于allegro 的skill都是以axl开头,比如axlClearSelSet()。
1.2. 运行AXL-SKILL在allegro中输入skill就得到了AXL-SKILL的运行环境,在这样的环境中可以直接调用AXL-SKILL命令/函数,另外输入set telskill可以得到一个尺寸大小可调的skill开发窗口。
(万一没有弹出窗口,尝试在allegro菜单里面,选择setup->userprference->skill->telskill----OK)1.3. AXL-SKILL Databaseallegro中的每个对象object(比如IC元件,net)都有一个对应的dbid(database identifiers),AXL-SKILL操作allegro的也正是这些dbid。
dbid对象:在不同的级别上的dbid是不一样的,比如在Design以及包含的database对象有Property Dictionary,Lines,Text,Polygons,Shapes,Property Definitions,DRCs,Vias that are Padstack object types,Symbols that are Symdef object types,Components,Nets;而在Symbol级别上则是PPins that are Padstack object types,Vias that are Padstack object types,Lines,Arcs,Text,Polygons,Shapes。
allegro skill 干货1-制作焊接丝印图
allegro skill 干货1-制作焊接丝印图1.Allegro skill 提供了PCB editor 二次开发的可能,它可以使某些繁琐的操作自动化,简单化,例如,在某些情况下我们需要手工焊接时,需要对照原理图,丝印图一一去找器件,这样既浪费了很多时间,同时还导致手工焊接出错。
2.本文讲到方法是,通过写一个skill 脚本的方法,可以使电阻或者电容的值直接标注在相应器件的丝印上,这样可以非常直观的进行焊接。
类似下面这张图一样,是不是非常容易查找到对应的阻容进行焊接。
3.开始讲解实现的过程。
贴上一段代码。
首先注册一个函数,就是allegro加载skill脚本时的名称,脚本可以设置打开allegro时加载,也可以设置成手工加载,后面会详细说明。
下文中黄色高亮的事注释部分,commen Lisp中注释使用;开头。
;申请一个函数axlCmdRegister("AutoHandSilk",'AutoHandSilk);实现这个函数;定义函数为AutoHandSilk,与上文申请的函数名称一致defun(AutoHandSilk ();关闭所有class和subclassaxlVisibleDesign(nil);打开BOARD GEOMETRY/OUTLINE层等等,为后面选中做准备,这里为什么打开; DEVICE TYPE/ASSEMBLY_TOP层呢,是因为只有这个层会有阻容值得信息,例如这;样R_R0603_2.2KaxlVisibleLayer("BOARD GEOMETRY/OUTLINE" t);axlVisibleLayer("PIN/TOP" t)axlVisibleLayer("DEVICE TYPE/ASSEMBLY_TOP" t)axlVisibleLayer("PACKAGE GEOMETRY/PLACE_BOUND_TOP" t);过滤选中的关键字,这里过滤的是textaxlSetFindFilter(?enabled list("noall" "text")?onButtons list("noall" "text"));选中页面上以上显示层的text,这个和实际在allegro环境中框选一样axlAddSelectAll();将选中的text信息赋值给对象allall = axlGetSelSet();去除显示,相当于去除高亮axlClearSelSet();这里是打印一条logaxlMsgPut("DEVICE TYPE/Assy place started.");这里是skill语言也就是commen Lisp语言的for循环foreach(i all;将text值取出来赋值给变量texttext = i ->text;下面这句相当于split字符串的功能,就是把类似R_R0603_2.2K的字符串;中有用的信息2.2K取出来text_list = parseString(text,"_")text=car(last(text_list));去阻容丝印等的原点坐标,注意丝印的原点坐标不是字的正中心,是字底;部的中心xy = i ->xy;取当前丝印的旋转角度txt_rot = round(i ->rotation);将180度都统一用0度表示,90度的统一用270表示cond((txt_rot == 180, txt_rot = 0)(txt_rot == 90, txt_rot = 270));这里是对每个丝印进行具体处理了,下面就是把丝印放在什么位置呢,;这里的方法是取place_bound_top层的长方形算中心foreach(childid, i ->parent ->childrenwhen(childid ->layer == "PACKAGE GEOMETRY/PLACE_BOUND_TOP" || childid ->layer == "PACKAGE GEOMETRY/PLACE_BOUND_BOTTOM"sym_x = (xCoord(car(childid ->bBox)) + xCoord(cadr(childid ->bBox))) / 2.0sym_y = (yCoord(car(childid ->bBox)) + yCoord(cadr(childid ->bBox))) / 2.0));前面说过丝印的xy并不是字的正中心,所以这里算出偏移量并根据具体;情况加或者减halfT extHeight = axlGetParam(sprintf(nil, "paramTextBlock:%d", 1)) ->height / 2.0case(txt_rot( 0, sym_y = sym_y - halfT extHeight)( 90, sym_x = sym_x + halfT extHeight)(180, sym_y = sym_y + halfTextHeight)(270, sym_x = sym_x - halfTextHeight));这里的xy才是要把丝印最终放置的位置xy = list(sym_x, sym_y);定义要创建文字的属性,字体默认使用1号了,使用者可以根据实际情况修;改合适的字体,然后再使用此脚本textOrientation = make_axlT extOrientation( ?textBlock "1", ?rotation txt_rot, ?mirrored i ->isMirrored, ?justify "CENTER");下面是注释掉的语句,实现的是直接在assemble_top上创建丝印,并删除;掉旧的丝印,实际上就是相当于移动丝印。
allegro二次开发语法大全
allegro skill简介1. AXL-SKILL专用于allegro的skill被称为AXL-SKILL,只有使用这些专用的函数才可以直接访问allegro的database。
结合skill语法和这些专用函数可以编写出实现各种功能的命令。
专用于allegro的skill都是以axl开头,比如axlClearSelSet()。
2. 运行AXL-SKILL在allegro中输入skill就得到了AXL-SKILL的运行环境,在这样的环境中可以直接调用AXL-SKILL命令/函数,另外输入set telskill可以得到一个尺寸大小可调的skill开发窗口。
(万一没有弹出窗口,尝试在allegro菜单里面,选择setup->user prference->skill->telskill----OK)3. AXL-SKILL Databaseallegro中的每个对象object(比如IC元件,net)都有一个对应的dbid(database identifiers),AXL-SKILL操作allegro的也正是这些dbid。
dbid对象:在不同的级别上的dbid是不一样的,比如在Design以及包含的database对象有Property Dictionary,Lines,Text,Polygons,Shapes,Property Definitions,DRCs,Vias that are Padstack object types,Symbols that are Symdef object types,Components,Nets;而在Symbol级别上则是PPins that are Padstack object types,Vias that are Padstack object types,Lines,Arcs,Text,Polygons,Shapes。
allegro skill database对象类型1. database对象描述1.1 对象类型 Figure objects: Arcs,Branches ,Design Files,Drcs,Lines,Paths ,Polygons ,Ppins,Shapes ,Symbols ,Tees,Vias,Pads,Padstacks,Symdefs; Logical objects:Components ,Functions,Function Pins,Nets; Property dictionary objects; Parameter objects:Design,Display,Layer Group,Layer,Textblock Group,Textblock。
Allegro skill基本语法
1.1 SKILL 语言简介SKILL 是用于Cadence 软件二次开发的语言。
我们关于SKILL 的介绍基于SKILL 语言参考档和Allegro SKILL的应用。
1.1.1 语法格式SKILL语法支持lisp 格式的语法,但是我们不推荐,推荐类C 的语法格式。
Lisp示例:(max 5 3) => 5C 示例:max(5 3) => 5Max是求最大值的函数,lisp 格式的不便阅读。
1.1.2 简单的SKILL 运行环境Allegro 的SKILL 运行环境:在Allegro 的命令窗口输入set telskill 窗口就可以用来运行就可以打开一个新的窗口,这个SKILL 命令。
窗口的大小可以手动调节。
1.1.3 Load Skill可以直接在SKILL development里面运行SKILL,可以把写好的代码放load命令一次性装载。
在说明load 之前,先说一下getSkillPath和setSkillPath 这2 个函数。
因为load 要找到SKILL 来装载,通常我们都不喜欢通过绝对路径来装载一个文件,因为那样包含的字符太多了。
文件getSkillPath() 将得到当前Allegro 设置的SKILL 加载路径,而setSkillPath 用来指定加载路径。
目前先不用考虑这个setSkillPath。
我的Allegro当前默认的SKILL 路径是Allegro 的工作路径和C:\home\pcbenv\skill这样我先把hello.il文件放在C:\home\pcbenv\skill\函数。
下面,下一步来加载这个文件,然后运行定义的函数Hello.il的源代码:procedure( hello()let( ()println("Hello World!"))) ; end procedure1.1.4 注释SKILL支持2种注释方式:a. /* … */ 用于注释多行,像C一样b. ; 用于注释单行,类似C 的//1.1.5 基本的数据类型integer 5float 5.0string "abc defg"list '(1 2 3 "a")boolen t/nil1.1.6 变量SKILL的变量定义比较随便,不需要指定其类型,赋什么类型的值就是什么类型。
十天学会Skill
学习目的:搭建一个简单的Allegro Skill调试环境,写出第一个HELLO WORLD 程序.1,首先选择一款适合自己的文本编辑器,免费的有SciTE, Notepad ++, 收费的有Ultra Edit, CodeWright. 以上几款软件均有语法高亮文件。
推荐使用SciTE, Notepad ++。
2,在PCBENV目录下新建一个文本文件,改名为test.il,后面范例中的编写都在这个文件中完成,如果不知道PCBENV在哪里,参考以下方法:1.通过查看电脑环境变量中的HOME变量值. 例如HOME变量为d:\ ,对应的目录应为d:\pcbenv2.直接在ALLEGRO 命令行输入echo $localenv 也可以得到实际的环境变量目录。
3,注册快捷键以方便调试,编辑ENV文件,添加如下两行,F11为载入test.il, F12为执行test命令。
alias F11 skill load('"test.il"')alias F12 test如图:以后,我们就可以在test.il文件中书写代码,保存后,在Allegro中按F11就会载入,然后按F12就可以执行命令test,后面会讲到这个test命令是如何注册的。
4,来完成第一个Hello World程序。
用文本编辑器打开test.il文件,将以下蓝色部分代码复制到test.il文件中并保存,<------我是分隔线----->axlCmdRegister("test",'test)defun( test ()axlUIConfirm(strcat("Hello ",axlGetVariable("username"))) )<------我是分隔线----->回到allegro界面,按F11,再按F12.看下执行效果。
Allegro Skill axl函数简介
Allegro Skill axl函数简介allegro skill简介1. AXL-SKILL专用于allegro的skill被称为AXL-SKILL,只有使用这些专用的函数才可以直接访问allegro 的database。
结合skill语法和这些专用函数可以编写出实现各种功能的命令。
专用于allegro 的skill都是以axl开头,比如axlClearSelSet()。
2. 运行AXL-SKILL在allegro中输入skill就得到了AXL-SKILL的运行环境,在这样的环境中可以直接调用AXL-SKILL命令/函数,另外输入set telskill可以得到一个尺寸大小可调的skill开发窗口。
(万一没有弹出窗口,尝试在allegro菜单里面,选择setup->userprference->skill->telskill----OK)3. AXL-SKILL Databaseallegro中的每个对象object(比如IC元件,net)都有一个对应的dbid(database identifiers),AXL-SKILL操作allegro的也正是这些dbid。
dbid对象:在不同的级别上的dbid是不一样的,比如在Design以及包含的database对象有Property Dictionary,Lines,Text,Polygons,Shapes,Property Definitions,DRCs,Vias that are Padstack object types,Symbols that are Symdef object types,Components,Nets;而在Symbol级别上则是PPins that are Padstack object types,Vias that are Padstack object types,Lines,Arcs,Text,Polygons,Shapes。
SKILL 简明教程
Allegro PCB Design SKILL TutorialSKILL is a scripting language what has its base in Lisp. Using the scription language you can automate a lot of repetitive commmand that will otherwise take a lot of time to do manually. The SKILL language has similarity with conventional C-like syntax. The simplicity of the language allows you to quickly learn the language. If tremendously helps if you are familar with any of the programming language like C or javascript. We will not go into the details of the programming language itself ( except for mentioning in brief about it). Instead, we will focus of working examples of SKILL.Getting StartedTo start directly executing the script, you type skill at the command window and press enter. It will give you a skill promt. You can then start typing the scripts and it will get executed. As an example to concatenate the strings and give output you can do withCommand>skillSkill> strcat("skill " "programming is fun")You can also use variables, for loop and many other language contruct. Here is an example the will print "Hello" thriceSkill>for( i 1 3 print( "hello" ))Skill>Hello Hello HelloTo exit from the Skill just type exitSkill> exitCommand>skillOf course we have not done anything useful. We have just enured that out environment is good to execute skill scripts. In next few pages, we will be writing real codes to do something useful.In the previous tutorial we gave the commands in a command line and saw the results in a command line window. It is possible to put all the commands in a file ( typically with extension .il) and then load the file from the command line. Let us say the content lf the file hello.il isfor( i 1 3 print( "hello" ))If you save the file in the same directory as your allegro brd file, then you can give the following command that will run the contents of this file.Commans > skill load("hello.il")This will run the contents of the hello.ilHowever, it is not advisable to keep a copy in the local path, instead, you may like to follow the following steps1. Create a directory c:\cadence\setup\skill2. Create a new environment variable called ALLEGRO_PCBENVControlPanel->System->Advanced->Environment Variables->System->NewName this ALLEGRO_PCBENV and Value=C:\cadence\setup3. Create a file called allegro.ilinit file and paste the following content in that filesetSkillPath(buildString(append1(getSkillPath() "c:/Cadence/setup/skill" ))) foreach(dir getSkillPath()when(isDir(dir)foreach(file rexMatchList("\\.il$" getDirFiles(dir))when(printf("Loading Skill file: %s\n" file)load(file)))))This il init file will load all the il files in the directory c:\cadence\setup\skill.4. Restart the computer ( This is required, so that the environment variables take affect.5. Now keep any .il file that you wish to run in the c:\cadence\setup\skill directory. As a test, if you place the hello.il file in the above example you will see that it printsHello, Hello, Helloin the command lineLet us now look at a real, practical and useful skill utility that solves real world problem. Copy the following code in a file called moveByRefdes.il and save it in the directoryC:/cadence/setup/skill (or the directory that allegro.ilinit points to).axlCmdRegister("moveByRefdes", 'moveByRefdes, ?cmdType "general")defun( moveByRefdes (refdes)let((sym, popup, alias_m, alias_r, ang, (dAng 0), dMir, mir, pt, mark, (continue t), event)sym = car(axlSelectByName("SYMBOL", refdes))if(sym thenpopup = axlUIPopupDefine(nil '(("Done", "axlDBTransactionCommit(mark), axlFinishEnterFun()")("Oops", "axlDBTransactionOops(mark)")("Cancel", "axlDBTransactionRollback(mark), axlCancelEnterFun()")("MENU_SEPARATOR", nil)("Mirror", "(moveByRefdes_mirror)")("Rotate", "(moveByRefdes_rotate)")))axlUICmdPopupSet(popup)alias_m = axlGetAlias("m")alias_r = axlGetAlias("r")axlShell("funckey m \"(moveByRefdes_mirror)\"")axlShell("funckey r \"(moveByRefdes_rotate)\"")mark = axlDBTransactionStart()ang = round(sym ->rotation)mir = sym ->isMirroredaxlDynamicsObject(sym, sym ->xy);Add rats:foreach(pin, sym ->pinspt = list(car(pin ->xy) - car(sym ->xy), cadr(pin ->xy) - cadr(sym ->xy))foreach(ratPin, mapcar(lambda((objPair), car(remove(pin, objPair))), setof(objPair, _fpUtilGetNetRats(pin), member(pin, objPair)))axlAddSimpleRbandDynamics(ratPin ->xy, "directline", ?originpt, ?var_point pt ?color 'ratsnestColor)))while(continueevent = axlEnterEvent(list('PICK), nil, t)caseq(event ->type(PICKsym = car(axlSelectByName("SYMBOL", refdes))axlDBTransactionMark(mark)axlClearSelSet()axlDeleteObject(sym)sym = car(axlDBCreateSymbol(refdes, event ->xySnap, mir, ang)))(DONE, continue = nil)(CANCEL, continue = nil)); caseq); while continueaxlClearDynamics()axlSetAlias("m", alias_m)axlSetAlias("r", alias_r)else axlMsgPut(list("Reference Designator %s not found", 3), refdes || "*** Not supplied ***"));if sym))defun( moveByRefdes_mirror ()mir = !mir, dMir = !dMirang = mod(-ang, 360), dAng = mod(-dAng, 360)_axlSetDynamicsMirror(dMir), _axlSetDynamicsRotation(dAng))defun( moveByRefdes_rotate ()ang = mod(ang + if(mir, -90, 90), 360), dAng = mod(dAng + if(mir, -90, 90), 360)_axlSetDynamicsRotation(dAng))What does this skill code doWhen the skill command is given ( with the reference designation), it will move the required component.How to use itTo use is give the following commandMoveByRefdes R1Where R1 is the reference designation of the component you wish to move.In most situations you may need to create a form. The form then, in turn have check boxes and button which will trigger some action. In this tutorial we will create a simple "Hello" word form. Copy the following code in a file form.il and save it in the directory C:/cadence/setup/skill (or the directory that allegro.ilinit points to).axlCmdRegister( "helloform" `helloform); -----------------------------------------------------------------; allegro skill tutorial; creates a simple "hello world form"; -----------------------------------------------------------------procedure( helloform()hello_form = axlFormCreate( (gensym) "helloworld.form" nil nil t)axlFormDisplay(hello_form)); end of procedure; -----------------------------------------------------------------What does this skill code doThe lineaxlCmdRegister( "helloform" `helloform)registers the command helloform ( as defined by the first argument. The second argument of the axlCmdRegister, also helloform tells the procedure that needs to be called when the command is given.Look at the codehello_form = axlFormCreate( (gensym) "helloworld.form" nil nil t) axlFormDisplay(hello_form)The axlFormCreate creates a form defined in the helloworld.form and axlFormDisplay displayes it. Now you need to create another file - called helloworld.form with the following content.FILE_TYPE=FORM_DEFN VERSION=2FORMFIXEDPORT 40 40HEADER "Learning Form"TILE#======================TEXT "Hello World ! - skill is easy with "TLOC 1 1ENDTEXT#======================ENDTILEENDFORMSave the file in the same directory as you brd file. Assuming everything is right you can just type hello form at the Command and it will pop up a form.ExerciseChange the linePORT 40 40toPORT 60 40and check that the width of the form increases.Of course this form does not do any function. But it got you started on learning. In the next few pages we will be creating someting useful with the form.Copy the following code in a file form.il and save it in the directory C:/cadence/setup/skill (or the directory that allegro.ilinit points to).axlCmdRegister( "formbutton" `formbutton); -----------------------------------------------------------------procedure( formbutton()les1_form = axlFormCreate( (gensym) "les1.form" nil 'les1_form_Action t)axlFormDisplay(les1_form)); end of procedure; -----------------------------------------------------------------procedure( les1_form_Action(les1_form)case( les1_form->curField("Close_button"axlFormClose( les1_form )axlCancelEnterFun( )); --------------------------("Run_button"if( axlFormGetField( les1_form "report") thenaxlUIConfirm( "Report value is t (True) ")elseaxlUIConfirm( "Report value is nil (False) ")); end if); --------------------------); end case); end of procedure; -----------------------------------------------------------------What does this skill code doThere are four axl statements for the formaxlFormCreate - Creates a FormaxlFormDisplay - to Display the formaxlFormClose - to Close the formaxlFormGetField - retrieve the elements in the formOther code should be easy to follown.Now creat another file called les1.form with the following contentFILE_TYPE=FORM_DEFN VERSION=2FORMFIXEDPORT 25 20HEADER ""TILE#======================FIELD reportFLOC 2 2CHECKLIST "Create report"ENDFIELDFIELD Run_buttonFLOC 2 17MENUBUTTON "Run" 7 3ENDFIELDFIELD Close_buttonFLOC 11 17MENUBUTTON "Close" 7 3ENDFIELD#======================ENDTILEENDFORMSave the file in the same directory as you brd file. Assuming everything is right you can just type hello form at the Command and it will pop up a form.ExerciseChange the lineFIELD Run_button FLOC 2 17toFIELD Run_button FLOC 2 10and check that the location of the Run Button Changes.We have not done any PCB related function, but you may have got the taste of it. You can embed the actions as we will learn later on.So far we have dealt with simple form that has only one or two elements of form. We will now created a little bit of complicated form, which will have preactically anything that goes in the form. Once you run this skill, it will pop up a form and and with different fields. You need to fill up the form and press Run. At this stage it will gather all the inputs of the form and will put them in an output file.Copy the following code in a file advanceform.il and save it in the directoryC:/cadence/setup/skill (or the directory that allegro.ilinit points to).axlCmdRegister( "advanceform" `advanceform); -----------------------------------------------------------------procedure( advanceform()les4_form = axlFormCreate( (gensym) "les4.form" nil 'les4_form_Action t)axlFormDisplay(les4_form)); end of procedure; -----------------------------------------------------------------procedure( les4_form_Action(les4_form)case( les4_form->curField("Close_button"axlFormClose( les4_form )axlCancelEnterFun( )); --------------------------("Run_button"les4_form_run()); --------------------------); end case); end of procedure; -----------------------------------------------------------------procedure( les4_form_run(); Create output file to write reportcl_file = outfile("check_list.rpt" "w"); ------ Print Headerfprintf(cl_file "**********************\n")fprintf(cl_file " Check List Report\n")fprintf(cl_file "**********************\n\n")axlUIWPrint(les4_form getCurrentTime()); ------ Print CurrentTimefprintf(cl_file "CurrentTime : %s \n" getCurrentTime()); ------ Print Designer Namefprintf(cl_file "PCB Designer Name : %s \n"axlFormGetField( les4_form "name")); ------ Print Design Namefprintf(cl_file "Design Name : %s \n" axlCurrentDesign()); ------ Print value of check boxif( axlFormGetField(les4_form "check1") then check = "YES" else check = "NO" ); end iffprintf(cl_file "Do you check DRC? : %s \n" check); ------ Print value of popupfprintf(cl_file "Exist SMD in this project : %s \n" axlFormGetField( les4_form "pop1")); ------ Print value of slidebarfprintf(cl_file "Layers number : %d \n"axlFormGetField( les4_form "slidebar1")); ------ Print value of groupif( axlFormGetField(les4_form "both") thensilk_side = "Both"elseif( axlFormGetField(les4_form "top") then silk_side = "Top" else silk_side = "Bottom" ); end if); end iffprintf(cl_file "Silk exist on : %s \n" silk_side); ------close(cl_file)); end of procedure; -----------------------------------------------------------------Now creat another file called les4.form with the following contentFILE_TYPE=FORM_DEFN VERSION=2FORMFIXEDPORT 40 40HEADER "Check List Report"#=== must define popup before usingPOPUP "Yes" "Yes" , "No" "No" .TILE#========== using STRFILLINTEXT "PCB Designer Name"FLOC 1 1ENDTEXTFIELD nameFLOC 20 1STRFILLIN 15 20ENDFIELD#========== using CHECKLISTTEXT "Do you checked DRC?"FLOC 1 5ENDTEXTFIELD check1FLOC 20 5CHECKLIST "Yes"ENDFIELD#========== using POPUPTEXT "Exist SMD in this project" FLOC 1 10ENDTEXTFIELD pop1FLOC 20 10ENUMSET 6POP "pop1"ENDFIELD#========== using INTSLIDEBAR TEXT "Layers number"FLOC 1 15ENDTEXTFIELD slidebar1FLOC 20 15INTSLIDEBAR 2 2MIN 2MAX 30ENDFIELD#========== using GROUPTEXT "Silk exist on"FLOC 1 20ENDTEXTGROUP ""GLOC 18 18GSIZE 22 5ENDGROUPFIELD topFLOC 19 20 CHECKLIST"Top" "grp"ENDFIELDFIELD bottomFLOC 25 20CHECKLIST "Bottom" "grp" ENDFIELDFIELD bothFLOC 33 20CHECKLIST "Both" "grp"ENDFIELD#========== using MENUBUTTON FIELD Run_buttonFLOC 2 27MENUBUTTON "Run" 7 3ENDFIELDFIELD Close_buttonFLOC 11 27MENUBUTTON "Close" 7 3ENDFIELD#======================ENDTILEENDFORMSave the file in the same directory as you brd file. Assuming everything is right you can just type hello form at the Command and it will pop up a form.If you fill the form as indicated, it will generate a file called check_list.rpt with the following contents**********************Check List Report**********************CurrentTime : Feb 10 10:32:20 2013PCB Designer Name : Refernce DesignerDesign Name : KBox_TCxI3_RevB_08_tempDo you check DRC? : YESExist SMD in this project : YesLayers number : 4Silk exist on : TopExercise1. Change the form soo that the test - "Do you checked DRC ?" changes to "Did you check DRC ?".We have not done any PCB related function, but you may have got the taste of it. You can embed the actions as we will learn later on.So far we have dealt with things that did not do anything real on the PCB itself. We will take a break and will now do something on the PCB itself. For this tutorial, our intention is to draw a line of width 10 on the silkscreen between the coordinates (10,10) and (100, 100). We basically make use of the axlDBCreateLine function. Here is the detail of the axlDBCreateLine function. NAMEaxlDBCreateLine - create a path of fixed width straight segmentsSYNOPSISaxlDBCreateLine(l_points[f_width][t_layer][t_netname][rd_parent])==> l_result/nilFUNCTIONconvert the l_points to an r_path (axlPathStart)call axlDBCreatePathNEEDSl_points - list of vertices (at least two)f_width - width for all segments (defaults to 0)t_layer - layer (defaults to current active layer)t_netname - net namerd_parent - axl DBID of object to add the line to(symbol instance or nil for design) RETURNSaxlDBCreateLine - nil if not created, or a list containing(car) list of axl DBID of all paths created or modified (cadr) t if DRCs created or nil.NOTEAll points are absolute (in user units).If points are provided, then segments are created.We will first do it using the command line. On the command line type the following commands in succession.Skill>x1 =10Skill>y1 =10Skill>x2 = 100Skill>y2= 100Skill>start = list(x1 y1)Skill>end = list (x2 y2)Skill>l_vertices =(start end)Skill>axlDBCreateLine(l_vertices 10 "Package Geometry/Silkscreen_Top")When you give the last command, look at the bottom left of your brd file. It will have a segment of line between (10,10) and (100,100)In the previous post we saw how to draw a line between two coordinates (10,10) and (100, 100) using command line . We will noe extend this example so that we put everything inside an il file. Also we will have a pop up window which will ask for coordinates of start and end of the line. Copy the following code in a file called line.ilaxlCmdRegister( "line1" `line1); -----------------------------------------------------------------procedure( line1();les4_form = axlFormCreate( (gensym) "line.form" nil 'les4_form_Action t)les4_form = axlFormCreate( (gensym) "les4.form" nil 'les4_form_Action t)axlFormDisplay(les4_form)); end of procedure; -----------------------------------------------------------------procedure( les4_form_Action(les4_form)case( les4_form->curField("Close_button"axlFormClose( les4_form )axlCancelEnterFun( )); --------------------------("Run_button"les4_form_run()); --------------------------); end case); end of procedure; -----------------------------------------------------------------procedure( les4_form_run()start = list(axlFormGetField( les4_form "x1") axlFormGetField( les4_form"y1"))end = list(axlFormGetField( les4_form "x2") axlFormGetField( les4_form "y2")) l_vertices =list(start end)axlDBCreateLine(l_vertices 10 "Package Geometry/Silkscreen_Top")); end of procedure; -----------------------------------------------------------------For the form portion of this action we will put the following in a file called les4.formFILE_TYPE=FORM_DEFN VERSION=2FORMFIXEDPORT 40 40HEADER "Draw Dotted Line"#=== must define popup before usingPOPUP "Yes" "Yes" , "No" "No" .TILE#========== using INTFILLINTEXT "x1 : "FLOC 1 1ENDTEXTFIELD x1FLOC 5 1INTFILLIN 15 20ENDFIELDTEXT "y1 : "FLOC 1 5ENDTEXTFIELD y1FLOC 5 5INTFILLIN 15 5ENDFIELDTEXT "x2 : "FLOC 1 10ENDTEXTFIELD x2FLOC 5 10INTFILLIN 15 20ENDFIELDTEXT "y2 : "FLOC 1 15ENDTEXTFIELD y2FLOC 5 15INTFILLIN 15 5ENDFIELD#========== using MENUBUTTONFIELD Run_buttonFLOC 2 27MENUBUTTON "Run" 7 3ENDFIELDFIELD Close_buttonFLOC 11 27MENUBUTTON "Close" 7 3ENDFIELD#======================ENDTILEENDFORMTo run it give the command line1 and it will pop up a window where you can enter the start and the end coordinates. .。
AllegroSkill 跟着学-先学会用_0204
Cadence 提供二次开发的 SKILL 语言,它是一种基于通用人工智能语言——Lisp 的交互式高级 编程语言(LISP 即 List Processing-表处理,是最早和最重要的符号处理编程语言之一,它于 1958 年由美国的 J. McCarthy 提出,LISP 在人工智能 AI 方面获得广泛应用)。
. 语法约定
在 Cadence skill 帮助中出现在语法描述中的字样:
text
说明文字必须准确输入
z_argument 说明文字用于替换相应的参数,前缀(z_)表示数据类弄的参数可以接受。
[]表示可选参数。|分离选项的选择
{}
使用竖线各封闭的选项,你必须选择一项。
...
表示重复前面的描述,
官网:
§1-11 手工修改菜单_allegro.mem................20 §1-12 动态修改菜单......................................22 §1-13 多国语言的实现 .................................25 §1-14 实例演示..............................................27 附 访问官网.邀请加入.................................. 28
.3.
=>
函数返回值,及结果
text
指示手册,菜单命令,表单按钮各表单域的名称
. 函数调用
你可以通过 键盘、窗体、菜单、命令解释器、skill 程序等方式去执行 skill 代码来实现功能。
Bindkeys 一个 Bindkeys 关联键盘事件,发送 Skill 功能 Forms 有些功能需要您填写字段,在弹出的表单中提供数据。 Menus 当您在菜单中选择一个项目时,系统会发送相关的 Skill 功能。 CIW 你可以直接输入 Skill 功能到 CIW,进行立即评估。 Skill process 您可以启动一个单独的 UNIX 的过程 ,可以直接提交 skill 功能的解释。 Skill Interpreter 您可能通过回载 skill 源码文件,对提交的 skill 功能进行集中评估。
Cadence Skill 语法详解(中文)
常量、变量常量是它的值等于自身的表达式,如123,”abc”…变量是保存了其它值的表达式,如x=3, x即变量。
算术与逻辑操作符函数名语法对应操作符Data Accessarrayref a[index] [ ] setarray a[index] = exprbitfield1 x<bit> <> setqbitfield1 x<bit>=exprsetqbitfield x<msb:lsb>=exprquote 'expr 'getqq g.s .getq g->s -> putpropqq g.s=expr, g->s=expr putpropq d~>s, d~>s =expr ~>Unarypreincrement ++s ++ postincrement s++ ++ predecrement --s -- postdecrement s-- -- minus -n -not !expr !bnot ~x ~Binaryexpt n1 ** n2 ** times n1 * n2 * quotient n1 / n2 / plus n1 + n2 + difference n1 - n2 - leftshift x1 << x2 << rightshift x1 >> x2 >> lessp n1<n2 < greaterp n1>n2 > leqp n1<=n2 <= geqp n1>=n2 >= equal g1 == g2 == nequal g1 != g2 != band x1 & x2 & bnand x1 ~& x2 ~& bxor x1 ^ x2 ^ bxnor x1 ~^ x2 ~^ bor x1 | x2 | bnor x1 ~| x2 ~|and x1 && x2 &&or x1 || x2 ||range g1 : g2 :setq s = expr =对于既有函数名又有操作符函数,采用函数名调用和采用操作符调用的效果是一样的。
Allegroskill运算符详解
算术与逻辑操作符函数名语法对应操作符Data Accessarrayref a[index] [ ]setarray a[index] = exprbitfield1 x<bit> <>setqbitfield1 x<bit>=exprsetqbitfield x<msb:lsb>=exprquote 'expr 'getqq g.s .getq g->s ->putpropqq g.s=expr, g->s=exprputpropq d~>s, d~>s =expr ~>Unarypreincrement ++s ++postincrement s++ ++predecrement --s --postdecrement s-- --minus -n -not !expr !bnot ~x ~Binaryexpt n1 ** n2 **times n1 * n2 * quotient n1 / n2 / plus n1 + n2 + difference n1 - n2 -leftshift x1 << x2 << rightshift x1 >> x2 >> lessp n1<n2 < greaterp n1>n2 > leqp n1<=n2 <= geqp n1>=n2 >= equal g1 == g2 == nequal g1 != g2 != band x1 & x2 & bnand x1 ~& x2 ~& bxor x1 ^ x2 ^ bxnor x1 ~^ x2 ~^ bor x1 | x2 | bnor x1 ~| x2 ~| and x1 && x2 && or x1 || x2 || range g1 : g2 : setq s = expr =对于既有函数名又有操作符函数,采用函数名调用和采用操作符调用的效果是一样的。
Allegro软件基于Form格式的框架开发
A l l e gr o 软件基于F o r m 格式的框架开发*付深圳1,2,刘涛1,2,张柱1,2(1.高效能服务器和存储技术国家重点实验室,济南250014;2.浪潮电子信息产业股份有限公司)*基金项目:山东省自然科学基金智慧计算联合基金(Z R 2019L Z H 006)㊂摘要:在E D A 设计领域,C a d e n c e 作为最大电子设计自动化供应商,旗下的A l l e gr o 软件是业界知名的P C B 设计软件,提供了丰富的二次开发接口和完善的开发语言㊂本文主要是基于A l l e gr o 软件的S k i l l 语言二次开发,开发带有F o r m 格式的编程框架,工程师使用该框架开发的工具能够通过U I 界面实现人机交互,另外,工程师在改变A l l e gr o 内部D a t a -b a s e 时,能够对操作进行回滚㊁取消㊁完成等,方便工程师快速操作㊂该框架为二次开发者提供一种高效的编程思想,提高了开发效率和质量㊂关键词:S k i l l 语言;P C B 设计;E D A 设计;A l l e g r o 中图分类号:T P 31 文献标识码:AA l l e g r o F r a m e w o r k D e v e l o pm e n t B a s e d o n F o r m F o r m a t F u S h e n z h e n 1,2,L i u T a o 1,2,Z h a n g Zh u 1,2(1.S t a t e K e y L a b o r a t o r y o f H i g h -e n d S e r v e r &S t o r a g e T e c h n o l o g y,J i n a n 250014,C h i n a ;2.I n s p u r E l e c t r o n i c I n f o r m a t i o n I n d u s t r y Co .,L t d .)A b s t r a c t :I n t h e f i e l d o f E D A d e s i g n ,c a d e n c e a s t h e l a r g e s t s u p p l i e r o f e l e c t r o n i c d e s i g n a u t o m a t i o n ,i t s A l l e gr o s o f t w a r e i s a w e l l -k n o w n P C B d e s i g n s o f t w a r e i n t h e i n d u s t r y ,p r o v i d i n g r i c h s e c o n d a r y d e v e l o p m e n t i n t e r f a c e s a n d p e r f e c t d e v e l o p m e n t l a n g u a g e .T h i s p a p e r i s m a i n l y b a s e d o n t h e s e c o n d a r y d e v e l o p m e n t o f s k i l l l a n g u a g e o f A l l e g r o s o f t w a r e t o d e v e l o p a p r o g r a mm i n g fr a m e w o r k w i t h f o r m f o r -m a t .E n g i n e e r s c a n u s e t h e t o o l s d e v e l o p e d b y t h e f r a m e w o r k t o r e a l i z e h u m a n -c o m p u t e r i n t e r a c t i o n t h r o u gh U I i n t e r f a c e .I n a d d i t i o n ,w h e n c h a n g i n g A l l e g r o 's i n t e r n a l d a t a b a s e ,e n g i n e e r s c a n r o l l b a c k ,c a n c e l a n d c o m p l e t e o p e r a t i o n s ,w h i c h i s c o n v e n i e n t f o r e n gi n e e r s t o o p e r a t e q u i c k l y .T h e f r a m e w o r k p r o v i d e s a n e f f i c i e n t p r o g r a mm i n g i d e a f o r s e c o n d a r y d e v e l o p e r s ,a n d i m p r o v e s t h e d e v e l o p m e n t e f f i c i e n c ya n d q u a l i t y.K e yw o r d s :S k i l l l a n g u a g e ;P C B d e s i g n ;E D A d e s i g n s o f t w a r e ;A l l e g r o 0 引 言目前在市场上有多款P C B 设计软件,C a d e n c e 作为业界应用最广泛的软件,不仅拥有强大的功能和多款相关软件作支撑,还因为它提供了开放式的二次开发接口和较为完善的开发语言库,用户可以根据自身的需求进行二次开发㊂S k i l l 语言作为A l l e g r o 软件的核心编程语言,语法完善㊁功能强大,并且提供了丰富的A P I 接口,开发者可以根据需求定制开发一些软件自身不具有的功能㊂笔者根据多年开发经验开发出了一套高效的编程框架,开发者可通过使用该框架提高编程效率和质量㊂同时,P C B 设计者使用该框架编写的S k i l l 工具能够提高P C B 设计效率㊂1 背 景近几年随着电子信息技术的发展,P C B 产业链发展迅速,在P C B 设计领域有多款软件,每款软件都各有优缺点㊂A D (A l t i u m D e s i g n e r )软件是入门级硬核设计软件,也是国家各大高校必选的软件课程,但是它更适合设计简单的板卡[1],由于规则管理器约束性不强,针对高速信号处理,使用A D 会有更大的难度[2];P A D S (P o w e r P C B )软件规则简单,画图快,管理起来也不算混乱,方便使用,擅长低速射频类的设计;与A D ㊁P A D S 相比,A l l e go (C a d e n c e A l l e g r o )软件在高速信号及高密度设计领域具有一定的优势,拥有功能完备的规则约束管理器,让高速设计更加容易,尤其在大的服务器主板方面,由于高速信号设计要求比较高㊁走线密度高,更适合使用A l l e gr o 软件设计㊂在P C B 设计过程中,有些重复性的操作,或者软件自身不具有㊁工程师需要花费大量时间的操作,以及无法实现的操作,通过二次开发都能够协助或者代替工程师快速操作,提高工程师工作效率,从而节省人力成本㊂由于国内研究A l l e g r o 二次开发的人很少,基本都是停留在应用层面上,只有极少数的大公司设有专门的A l l e g r o 二次开发岗位㊂当前市面上,S k i l l 语言没有系统学习的教程,即便是市面上放出的S k i l l 工具,出于商业利益或个人保密原因,大多是经过加密处理的,开发者很难去学习研究,笔者总结多年的开发经验,开发了一套带有F o r m 格式的A l l e g r o 二次开发框架,开发者只要在该框架基础上定制开发,就能实现相应需求,并且该框架集成了命令模块,方便工程师在误操作时快速实现取消㊁回滚等操作㊂2 S k i l l 语言简介S k i l l 是一种人工智能的高级㊁交互式编程语言,它基于L i s p 语言发展而来,类似传统的C 语言高级编程,通过S k i l l 语言调用A X L 接口函数可以直接操作软件底层系统应用,结合底层应用可以开发出新的应用程序㊂A X L S k i l l 是A l l e gr o 内置的语言翻译工具,如图1所示㊂在A l l e gr o 中,可以通过U I 界面㊁菜单窗口㊁命令窗口㊁快捷键和通过编写S k i l l 代码激活内置翻译器,对P C B E d i t o r 内部数据进行操作来实现特定功能㊂图1 A X L S k i l l 运行方法3 框架设计3.1 整体框架本框架主要功能是实现F o r m 创建㊁U I 界面调用㊁命令调用以及人机交互[3]㊂工程师通过右击A l l e gr o 软件操作窗口空白处,点击相应的命令,实现操作的取消㊁完成㊁回滚等㊂系统框架主要由主函数模块㊁F o r m 创建模块㊁F o r m 初始化模块㊁F o r m 运行模块㊁功能模块(开发者根据具体需求开发)㊁命令模块(命令初始化模块㊁命令完成模块㊁命令取消模块㊁命令回滚模块㊁命令回调模块)组成,如图2所示㊂3.2 系统运行流程系统运行时首先检测是否定义了全局变量,没有定义图2 框架图说明工程师首次运行该系统,需创建F o r m 文件,生成F o r m 全局变量,调用F o r m 文件显示U I 界面;如果系统运行时检测到已经定义F o r m 全局变量,则直接调用全局变量㊁显示U I 界面,进入循环状态等待事件触发(编写的功能模块,工程师对A l l e gr o 中的D a t a b a s e 操作)㊂工程师每一次有效操作系统都会记录,相应地进行操作次数累计,点击 回滚 命令,系统取消当前操作,回滚到前一个状态,等待下一次执行;点击 取消 命令,系统取消所有操作,跳出循环并退出;点击 完成 命令,系统保存所有操作,跳出循环并退出,工作流程如图3所示㊂图3 工作流程3.3 应用实例设计以该框架为基础,在P C B 差分信号线上,T r o u gh P I N 创建R o u t e k e e p o u t s h a pe 并且能够避开走线的功能,能够实现U I 界面输入设定参数,通过循环点击P I N 和周围C l i n e s ,在R o u t e K e e p o u t 层面上快速创建s h a pe ,以及通过右击P C B 窗口点击 C a n c e l 命令取消所有创建的s h a pe并退出命令,当工程师误操作时点击 O o p s 命令能够回滚到上一个状态,点击 D o n e 命令能够完成所有的操作保存并退出命令㊂(1)主函数模块主函数作为程序的入口,主要包含F o r m 创建模块㊁F o r m 初始化模块㊁F o r m 运行模块,其中F o r m 创建模块主要是用来创建F o r m 文件,系统调用F o r m 文件展示U I界面,F o r m 初始化模块主要是对U I 界面上默认参数进行设定,F o r m 运行模块主要实现人机交互以及工具功能㊂(d e f u n C r e a t e R o u t e k e e po u t M a i n () (p r o g () ;F o r m 创建模块C r e a t e R o u t e k e e p o u t F o r m=C r e a t e R o u t e k e e p o u t F o r m (C r e -a t e R o u t e k e e po u t F o r m ) C r e a t e R o u t e k e e p o u t F o r m I n i t (C r e a t e R o u t e k e e p o u t F o r m );F o r m 初始化模块C r e a t e R o u t e k e e p o u t F o r m A c t i o n (C r e a t e R o u t e k e e p o u t F o r m );F o r m 运行模块 ))(2)F o r m 创建模块F o r m 创建模块主要是用来创建F o r m 文件,文件保存在系统的t e m p 路径下㊂通过接口函数调用生成U I 人机交互界面并嵌入到软件中的 O p t i o n 选项中,本模块能够避免在用户多次点击命令时生成多个U I 界面现象的发生,保证只打开一个U I 界面,程序不会跑飞㊂固定格式部分如下,其余显示部分开发者可根据实际需求自行添加,该实例中添加 a v o i d V a l u e 和 e x pa n d V a l u e 参数值㊂;用b o u n d p 函数创建全局变量,保证系统中变量唯一u n l e s s (b o u n d p ('C r e a t e R o u t e k e e p o u t F o r m )C r e a t e R o u t e k e e p o u t -F o r m =n i l)[4](d e f u n C r e a t e R o u t e k e e po u t F o r m (f o r m ) (p r o g (f o r m F i l e P a t h f o r m F i l e ) ;判断全局变量是否存在,存在说明U I 界面已经打开,直接;调用F o r m 变量打开界面(i f f o r m t h e na x l U I W E x p o s e (f o r m ) r e t u r n (f o r m ) );获取系统t e m p 路径 f o r m F i l e P a t h =a x l T e m p F i l e () ;创建F o r m 文件f o r m F i l e =o u t f i l e (f o r m F i l e P a t h) f p r i n t f (f o r m F i l e "F I L E _T Y P E=F O RM _D E F N V E R S I O N =2\n ") f pr i n t f (f o r m F i l e "F O RM \n ") f pr i n t f (f o r m F i l e "F I X E D \n ") ;W ㊁H 分别为U I 界面的宽度高度f pr i n t f (f o r m F i l e "P O R T W H \n ") ;C r e a t e R o u t e k e e p o u t 为U I 界面的标题 f p r i n t f (f o r m F i l e "H E A D E R \"C r e a t e R o u t e k e e po u t \"\n ") f p r i n t f (f o r m F i l e "T I L E \n ");根据实际开发需求,定义相关f i e l d ㊁t e x t ㊁p o p u p ㊁g r i d 等,该;实例只需要定义一个外扩值参数f pr i n t f (f o r m F i l e "F I E L D a v o i d V a l u e \n \n ") f pr i n t f (f o r m F i l e "F L O C 146\n ") f p r i n t f (f o r m F i l e "R E A L F I L L I N 8100\n ") f pr i n t f (f o r m F i l e "E N D F I E L D \n ") f p r i n t f (f o r m F i l e "F I E L D e x p a n d V a l u e \n \n ") f pr i n t f (f o r m F i l e "F L O C 149\n ") f p r i n t f (f o r m F i l e "R E A L F I L L I N 8100\n ") f p r i n t f (f o r m F i l e "E N D F I E L D \n ")f pr i n t f (f o r m F i l e "E N D T I L E \n ") f p r i n t f (f o r m F i l e "E N D F O RM \n ") c l o s e (f o r m F i l e ) ;创建F o r m;f o r m =a x l F o r m C r e a t e ('C r e a t e R o u t e k e e po u t F o r m f o r m -F i l e P a t h n i l 'C r e a t e R o u t e k e e po u t F o r m A c t i o n t )[5];嵌入到O pt i o n 中 a x l C o n t r o l R a i s e ('o p t i o n s ) f o r m=a x l M i n i S t a t u s L o a d (g e n s ym ()f o r m F i l e P a t h n i l t ) a x l F o r m D i s p l a y (f o r m ) r e t u r n (f o r m ) ;返回全局变量f o r m 值) ))(3)F o r m 初始化模块F o r m 初始化模块主要用来设置U I 界面的默认参数,初始化F o r m 中的表格(g r i d )以及变量㊂该实例中初始化了 a v o i d V a l u e 和 e x p a n d V a l u e 变量,其余代码为该模块的其他实用部分,开发者可以根据实际开发进行增删㊂(d e f u n C r e a t e R o u t e k e e po u t F o r m I n i t (f o r m ) (p r o g (c o l u m n ) ;变量初始化 ;f o r m >v a r 1=n i l ;f o r m >v a r 2=0;默认参数设定 ;(f o r m "f i e l d 1"v a l u e 1) ;a x l F o r m S e t F i e l d (f o r m "f i e l d 2"v a l u e 2);gr i d 行初始化(根据实际需求判断是否需要有g r i d );c o l u m n =m a k e _f o r m G r i d C o l () ;第一列初始化 ;类型设置(T E X T /S T R I N G /L O N G /R E A L /E N UM S E T /;C H E C K I T E M );c o l u m n >f i e l d T y p e = ;列宽设置(数值) ;c o l u m n >c o l W i d t h = ;排列方式设置(L E F T /R I G H T /C E N T E R ) ;c o l u m n >a l i gn = ;c o l u m n >h e a d T e x t = ;显示标题 ;a x l F o r m G r i d I n s e r t C o l (f o r m "g r i d "c o l u m n );第N 列 ;c o l u m n >f i e l d T y p e = ;c o l u m n >c o l W i d t h = ;c o l u m n >a l i gn = ;c o l u m n >h e a d T e x t = ;a x l F o r m G r i d I n s e r t C o l (f o r m "g r i d "c o l u m n ) ;gr i d 显示刷新 ;a x l F o r m G r i d U p d a t e (f o r m "gr i d ") f o r m >m a r k =n i lf o r m >m a r k C n t =0f o r m >p o p u p O r i gn =n i l f o r m >p o p u p G r a y=n i l a x l F o r m S e t F i e l d (f o r m "a v o i d V a l u e "1) a x l F o r m S e t F i e l d (f o r m "e x p a n d V a l u e "1) ))(4)F o r m 运行模块F o r m 运行模块主要是人机交互以及功能实现,系统功能部分在此模块中添加㊂系统运行时首先标记初始状态,系统处于循环状态,等待事件触发(功能事件),事件触发一次就累计一次,该模块中嵌入命令模块( 完成命令㊁ 取消命令 ㊁ 回滚命令)㊂(d e f u n C r e a t e R o u t e k e e p o u t F o r m A c t i o n (f o r m ) (p r o g (l E v e n t M a s k e v e n t I D ) ;命令模块初始化 P o p u pF o r m I n i t () ;命令菜单调用 a x l E v e n t S e t S t a r t P o p u p ('P o p u pF o r m C a l l b a c k ) ;操作开始标记 f o r m >m a r k =a x l D B T r a n s a c t i o n S t a r t () l E v e n t M a s k =l i s t ('P I C K 'D B L P I C K )(w h i l e d o F l a g e v e n t I D =a x l E n t e r E v e n t (l E v e n t M a s k n i l n i l ) a x l D B T r a n s a c t i o n M a r k (f o r m >m a r k ) (c a s e e v e n t I D >t y pe ('P I C K a x l D B T r a n s a c t i o n M a r k (f o r m >m a r k ) ;操作次数记录累加 f o r m >m a r k C n t =a d d 1(f o r m >m a r k C n t ) ;功能模块添加位置 P o p u p F o r m C h e c k (f o r m ) );操作完成命令 ('D O N E d o F l a g =n i l );操作取消命令 ('C A N C E Ld o F l a g =n i l ) ) ) ))系统运行时,右击窗口弹出菜单中自动添加 D o n e㊁ O o ps ㊁ C a n c e l 命令,选择 D o n e 命令完成所有操作(A ~N 状态之间所有的操作都有效), C a n c e l 命令取消原来所有操作(A~N 状态之间所有的操作都无效), O o ps 命令回滚上一次状态㊂命令执行状态如图4所示㊂图4 命令执行状态(5)命令模块命令模块由命令初始化模块㊁命令完成模块㊁命令取消模块㊁命令回滚模块㊁命令回调模块组成,代码部分固定㊂1)命令初始化模块命令初始化模块主要是初始化完成㊁取消㊁回滚命令,右击菜单中调用命令初始化模块㊂(d e f u n p o p u pF o r m I n i t () f o r m >p o p u p O r i g n =a x l U I P o p u pD e f i n e (n i l l i s t (l i s t ("D o n e "'p o p u p F o r m D o n e ) l i s t ("O o p s "'p o p u p F o r m O o ps ) l i s t ("C a n c e l "'p o p u p F o r m C a n c e l ) ) )f o r m >p o p u p G r a y =a x l U I P o p u p D e f i n e (n i l l i s t (l i s t ("D o n e "'p o p u pF o r m D o n e ) l i s t ("C a n c e l "'p o p u pF o r m C a n c e l ) ) ))2)命令完成模块命令完成模块被调用时,取消状态标记,循环参数设置为n i l,并跳出循环模式,保存整个操作,可以通过右击P C B 窗口,选择 D o n e命令,完成整个操作㊂(d e f u n P o p u pF o r m D o n e () ;如有标记,跳转到标记位置,跳出w h i l e 循环 (W h e n f o r m >m a r k a x l D B T r a n s a c t i o n C o mm i t (f o r m >m a r k) )a x l C l e a r S e l S e t() a x l F i n i s h E n t e r F u n () a x l U I C m d P o p u p S e t (n i l ) a x l U I P o p u pS e t (n i l ))3)命令回滚模块系统处于循环状态,回滚命令触发时,系统根据记录的状态,返回到前一个状态,可返回次数等于操作累计次数㊂P C B 设计者对D a t a b a s e 操作失误时,可通过点击回滚命令返回到上一个状态㊂(d e f u n P o p u p F o r m O o ps () ;返回到最后一次标记 (I f !a x l D B T r a n s a c t i o n O o ps (f o r m >m a r k )t h e n f o r m >m a r k =0 e l s ea x l U I W P r i n t (n i l "O o p s ") ;操作次数累计减1 f o r m >m a r k C n t =s u b 1(f o r m >m a r k C n t) a x l C l e a r S e l S e t () ) I n s p u r _P o p u pF o r m C h e c k (f o r m );右击菜单回调)4)命令取消模块命令取消模块被调用时,取消状态标记,循环参数设置为n i l,并跳出循环模式,取消所有操作,可以通过右击P C B 窗口,选择 C a n c l e命令完成整个操作㊂(d e f u n P o p u pF o r m C a n c e l () (W h e n f o r m >m a r k;从标记开始的操作到现在的操作全部取消 a x l D B T r a n s a c t i o n R o l l b a c k (f o r m >m a r k ) )a x l C l e a r S e l S e t() a x l C a n c e l E n t e r F u n () a x l U I C m d P o p u p S e t (n i l ) a x l U I P o p u pS e t (n i l ));右击菜单命令加载函数(d e f u n P o p u pF o r m C h e c k (f o r m ) a x l U I C m d P o p u p S e t (f o r m >p o p u p O r i gn ) (i f f o r m >m a r k C n t >=1t h e na x l U I P o p u p S e t (f o r m >p o p u p O r i g n ) e l s ea x l U I P o p u p S e t (f o r m >p o p u p G r a y ) ));事件触发函数(d e f u n P o p u p F o r m C a l l b a c k (e v e n t ) P o p u pF o r m C h e c k (f o r m ))(6)功能模块功能模块设计主要是通过提供的A P I 函数获取到图5 主界面P I N 或者V I A 的P A D ,然后获取到P A D 的形状P o l y ,再根据输入的外扩值放大形状,在相应的R o u t e K e e p o u t 层面上创建s h a pe ㊂功能模块根据实际需求定制开发,本实例中不再展示相关代码㊂(7)测 试1)主界面根据上面实例,能够实现U I界面嵌入到软件自带的 O p t i o n s 菜单中,如图5所示㊂2)右击菜单右击菜单能够添加相应的图6 右击菜单D o n e ㊁ O o p s 和 C a n c e l 命令,如图6所示㊂3)命令执行结果该实例主要在T h r o u gh P i n 上创建R o u t e K e e p o u t 区域,通过执行命令能够实现完成㊁取消以及回滚功能㊂图7为点击D o n e 命令全部完成的效果,图8为点击 O o p s 回滚一次后的效果㊂图7 D o n e命令后的效果图4 结 语A l l e gr o 二次开发主要是开发软件自身不具19图2 软件验证活动问题处理流程的修改工作,修改完成后执行步骤5㊂步骤5(重新验证):由软件验证人员对修改后的软件进行重新验证,验证结束后则完成问题的处理工作,流程结束㊂4 结 语本文以软件安全生命周期模型为基础,详细说明了某嵌入式实时操作系统在各阶段输出的文档,以及针对文档的审查和分析内容;对在软件验证活动中发现的问题还给出了完整的闭环处理流程,为软件功能安全验证活动的执行提供有效支撑㊂在整体软件测试结束后,还应由软件确认人员执行确认活动,对软件确认活动的总结将作为下一步研究内容㊂参考文献[1]杨春晖,刘奕宏.功能安全标准白皮书,2017.[2]王瑞,徐宁,王财进,等.安全软件验证确认在B TM 开发中的应用[J ].铁路技术创新,2015(2):8890,112.[3]郑琼,刘锦峰,陈晓轩.E N 50128:2011在轨旁安全平台验证和确认过程中的应用,2019,55(11):1114.[4]I E C 61508.F u n c t i o n a l s a f e t y o f e l e c t r i c a l /e l e c t r i c /p r o gr a m -m a b l e e l e c t r o n i c s a f e t y r e l a t e d s ys t e m s [S ].S w i t z e r l a n d :I E C ,2010.刘鹏辉(工程师),主要研究方向为嵌入式领域安全关键技术的测试与验证;王淑玲(工程师),主要从事军用嵌入式软件的第三方测评工作㊂(责任编辑:薛士然 收稿日期:2020-08-14)图8 点击一次 O o ps 命令的效果图备的功能,以及人工操作比较麻烦的功能,用于提高P C B 设计和检查效率㊂由于S k i l l 语言应用具有局限性,国内研究的人比较少,在进行带有F o r m 格式的功能开发时,开发者往往找不到一种合适的框架,并且开发的工具往往不带有完成㊁取消以及回滚功能,而完成㊁取消㊁回滚命令又是P C B 设计者常用的功能,工具如果不包含这几项功能,会导致P C B 设计者在使用该工具误操作时无法快速回滚以及取消操作,给设计者带来不便㊂本文提出的基于F o r m 格式的框架开发,能够在用户误操作D a t a b a s e 时,实现对操作的取消㊁回滚以及完成㊂另外,该框架也能避免因F o r m 嵌入循环语句导致软件进入死循环的现象发生㊂参考文献[1]凡亿p c b .P C B 设计主流软件分析[E B /O L ].[202009].h t -t p ://w w w.f a n y e d a .c o m /p c b x i n w e n /1285.h t m l .[2]十四_S I .P C B L a y o u t 软件分析对比(A D ㊁P a d s ㊁A l l e g r o )[E B /O L ].[202009].h t t p s ://w w w.ji a n s h u .c o m /p /6e 71972452d 9.[3]C a d e n c e .A l l e gr o S k i l l R e f e r e n c e ,2019.[4]C a d e n c e .C a d e n c e S k i l l L a n g u a ge R ef e r e n c e ,2019.[5]v i v i e n l u o .F O RM 创建函数a x l F o r m C r e a t e [E B /O L ].[202009].h t t p ://w w w.a l l e gr o s k i l l .c o m /t h r e a d 17911.h t m l .(责任编辑:薛士然 收稿日期:2020-09-14)。
AXL函数说明
Skill专有函数字母A...................................................错误!未定义书签。
字母B...................................................错误!未定义书签。
字母C...................................................错误!未定义书签。
字母D...................................................错误!未定义书签。
字母E...................................................错误!未定义书签。
字母F...................................................错误!未定义书签。
字母G...................................................错误!未定义书签。
字母H...................................................错误!未定义书签。
字母I...................................................错误!未定义书签。
字母J...................................................错误!未定义书签。
字母K...................................................错误!未定义书签。
字母L...................................................错误!未定义书签。
字母M...................................................错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在allegro的应用中会根据工作的需要自己定制(创建)属性——用户定义的属性(user defined properties)。Allegro支持用户创建具备如下特性的属性
NETS, COMPONENTS, FUNCTIONS PINS, VIAS, SHAPES, SYMBOLS, CLINES, LINES, DRCS, FIGURES,DESIGNS, COMPDEFS, PINDEFS, FUNCDEFS。如果你创建了一个只包含SYMBOLS类型的属性,那么你创建的这个属性只能被赋给Allegro中的Symbol对象,而不可以赋给 一个net或其它非Symbol的对象。
一个简单的例子Bus(总线),其它的Logical类型请参考Cadence的algroskill.pdf文件
属性名 类型 描述
groupMembers l_dbid List of xnets of the bus
name string Name of the bus objType string “group” type string “BUS”
1.2
尽管有如此之多的类型,但是在allegro中的操作其实就是找到合适的database元素,然后对其操作就好了。只要保证被访问的元素的dbid有效,就可以对其进行处理。
2. Figure
Figure在allegro PCB Editer里面一般被成为几何形状,一个Figure类型的元素通常具有如下的属性。
常见的Figure属性
属性名 类型 描述 bBox bbox Figure’s bounding box branch dbid For etch, the figure’s branch parent layer t_layer Layer of figure, nil if object is multi-layer parent dbid Nonconnective owner net dbid Net object if figure is associated with a net
3. Logical
Logical类型其实就是和电气有关的属性,比如网络连接(net),电子器件{component)等。 Logical类型通常都具有objType, prop, and readOnly3种属性。 如果你选择了一个component,那么它的objType就是component,如果选择的是pin,则objType属性值就是pin......
allegro skill database
1. database
1.1
Figure objects: Arcs,Branches ,Design Files,Drcs,Lines,Paths ,Polygons ,Ppins,Shapes ,Symbols ,Tees,Vias,Pads,Padstacks,Symdefs; Logical objects:Components ,Functions,Function Pins,Nets; Property dictionary objects; Parameter objects:Design,Display,Layer Group,Layer,Textblock Group,Textblock。
注意: 对于所有空(dummy)网络的Figure, 它们的net属性都是"", 而不是nil。
Figure有很多的类型,每个类型都有很多个属性,具体的信息请参考algroskill.pdf文档的第二章,这里只列出其中的Line。 Line的属性列表(除Figure类型常见的属性以外的部分)
属性名 类型 描述 isEtch t/nil t = a CLINE; nil = a LINE lineType s_type symbol: horizontal, vertical, odd objType string Type of object, in this case "line" parent dbid Path, polygon, or shape startEnd l_point Start and end points width floa介
allegro skill
1. AXL-SKILL
专用于allegro的skill被称为AXL-SKILL,只有使用这些专用的函数才可以直接访问allegro的database。结合skill语法和这些专用函数可以编写出实现各种功能的命令。专用于allegro的skill都是以axl开头,比如axlClearSelSet()。
2.
在allegro中输入skill就得到了AXL-SKILL的运行环境,在这样的环境中可以直接调用AXL-SKILL命令/函数,另外输入set telskill可以得到一个尺寸大小可调的skill开发窗口。(万一没有弹出窗口,尝试在allegro菜单里面,选择setup->user prference->skill->telskill----OK)
3. AXL-SKILL Database
allegro中的每个对象object(比如IC元件,net)都有一个对应的dbid(database identifiers),AXL-SKILL操作allegro的也正是这些dbid。
dbid对象:在不同的级别上的dbid是不一样的,比如在Design以及包含的database对象有Property Dictionary,Lines,Text,Polygons,Shapes,Property Definitions,DRCs,Vias that are Padstack object types,Symbols that are Symdef object types,Components,Nets;而在Symbol级别上则是PPins that are Padstack object types,Vias that are Padstack object types,Lines,Arcs,Text,Polygons,Shapes。