Cadence_Skill_语法详解(中文)要点

合集下载

Cadence应用如何在allegro中使用skill

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)所在⽬录。

cadence调试解析

cadence调试解析

cadence调试解析调试代码,先打开skill debugger toolbox ,此时调试进程就自动安装了。

安装结束后,运行代码遇到错误时,按下调试键debugger。

遇到断点时,也可以进行调试(无论调试进程有没有安装)。

当运行程序时遇到了错误,使用dump,stacktrace,where键可以显示skill栈和局部变量。

输出会出现在CIW中。

设置断点,点击set breakpoints来设置断点形式,键入函数名,点击OK或Apply。

然后运行代码。

达到断点时,使用Step,Next,Step Out来一步一步的执行代码。

退出调试,在SKILL Debugger toolbox击Exit Debug Toplevel。

每次点击Exit Debug Toplevel,都会退出最近进行调试的。

SKILL DebuggerDump在CIW中列出所有变量中当前在栈中的变量,最大值由右边的Where按钮确定。

Stacktrace在CIW中列出栈中的所有函数及它们的参数,深度由右边的Where按钮确定。

Where在CIW中列出栈中所有函数和局部变量,深度由右边的Where按钮确定。

Step由中断处理程序一步一步的进入函数,步数由右边的Step Out按钮确定。

Next不用每一步都进入子函数,但是允许中断处理程序继续执行,直到栈到达了他的现存深度。

函数重复的次数由右边的Step Out按钮确定。

Step Out允许继续执行直到目前函数的评估返回。

函数重复的次数由右边的Step Out按钮确定。

Exit Debug Toplevel退出当前的调试toplevelContinue继续执行命令直到遇到断点Tracing开始58页的跟踪模式Set Breakpoints开始107页的设置断点模式Debug Status显示被跟踪的函数,变量,属性,显示那些被设置了断点或正在被计算的函数Clear清除所有的跟踪和断点Automatic Stacktrace(Levels)设置栈中函数的数量,每次发生错误时显示。

cadence中文教程整理版

cadence中文教程整理版

第一章.Cadence cdsSPICE的使用说明Cadence cdsSPICE 也是众多使用SPICE内核的电路模拟软件之一。

因此他在使用上会有部分同我们平时所用到的PSPICE相同。

这里我将侧重讲一下它的一些特殊用法。

§ 1-1 进入Cadence软件包一.在工作站上使用在命令行中(提示符后,如:ZUEDA22>)键入以下命令icfb&↙(回车键),其中& 表示后台工作。

Icfb调出Cadence软件。

出现的主窗口如图1-1-1所示:图1-1-1Candence主窗口二.在PC机上使用1)将PC机的颜色属性改为256色(这一步必须);2)打开Exceed软件,一般选用xstart软件,以下是使用步骤:start method选择REXEC(TCP-IP) ,Programm选择Xwindow。

Host选择10.13.71.32 或10.13.71.33。

host type选择sun。

并点击后面的按钮,在弹出菜单中选择command tool。

确认选择完毕后,点击run!3)在提示符ZDASIC22> 下键入:setenv DISPLAY 本机ip:0.0(回车)4)在命令行中(提示符后,如:ZUEDA22>)键入以下命令icfb&↙(回车键)即进入cadence中。

出现的主窗口如图1-1-1所示。

以上是使用xstart登陆cadance的方法。

在使用其他软件登陆cadance时,可能在登录前要修改文件.cshrc,方法如下:在提示符下输入如下命令:vi .cshrc↙(进入全屏幕编辑程序vi)将光标移至setevn DISPLAY ZDASIC22:0.0 处,将“ZDASIC22”改为PC机的IP,其它不变(重新回到服务器上运行时,还需按原样改回)。

改完后存盘退出。

然后输入如下命令:source .cshrc↙(重新载入该文件)以下介绍一下全屏幕编辑程序vi的一些使用方法:vi使用了两种状态,一是指令态(Command Mode),另一是插入态(Insert Mode)。

Cadence(allegro)中文教程

Cadence(allegro)中文教程

Cadence Allegro 中文简易手册-http://www.21spacetime.com收藏整理Cadence Allegro简易手册Allegro PCB Layout SystemLab Manual.CHAPTER 1 熟悉环境在开始前请将范例复制到您的工作路径下如:<在安装路径下>\share\pcb\selfstudy\user1 Æ c:\allegroclass\user1启动程序开始Æ程序集ÆCadenceÆPCB systemÆAllegro(电路板工具)开始Æ程序集ÆCadenceÆPCB systemÆPad Designer(焊点编辑)开启旧档选 FILE/OPEN 请开启 C:\AllegroClass\User1\Cds_Routed.brd档如果选了Change Dir 则会将现有路径C:\AllegroClass\User1变成你的内定工作路径认识你的工作窗口有指令区menu bar图标区icon ribbon控制盘control panel工作区design window状态区status window命令区console window.若想自定窗口位置customize 则选View-Customization / Display可设左侧control panel 所放的新位置为浮动式undocked贴左侧Docked_left贴右侧Docked_right(系统值)View / customization / toolbar 则设定控制图标区显示效果项目…显示缩放Zoom by Point Æ显示框选区以左键框二点Zoom fit Æ显示资料全区Zoom in Æ放大比例Zoom out Æ缩小比例Zoom world Æ显示整个工作区Zoom center Æ光标点为下个屏幕中心按Ctrl键配合按着的鼠标右键画w即可Zoom fit.若画Z即可Zoom in画面平移PAN1.利用方向键可平移2.三键鼠标则按中间键即可动态平移.若为二键鼠标则为右键+shift显示项目控制在右侧的控制盘中有visibility 项目来控制显出的对象打勾者代表要显示详细的设定则用指令Setup-color/Visibility而这些对象分成群组 Group级Class次级 Subclass在此可控制图层及各项目的显示与否,我们顺便试一下如何录script1选File-Script指令,键入文件名为colors(勿按Enter键),再点选Record记录2 选Color/Visibility指令,如果要全关选右上角的Global Visibility将值改为All Invisible确定后选套用Apply.这样会关所有显示项目3 选群组中的Components,找到Class里的Ref Des请把它底下的Assembly_top 方框勾选起来表示开启其显示4 选群组中的Geometry把它Board Geometry里的OUTLINE打开, 也把Package Geometry里的Assembly_top 打开5 选群组中的Stack-up,把TOP和BOTTOM的Pin.Via.DRC.Etch打开.而GND及VCC只开DRC.ANTI ETCH如果要设新颜色请在下方色盘Palette中选要用的新颜色,再将它点到要修改项目的色块上就可改过来了6 停止script录制选 File-Script-Stop.先前的层面及颜色设定都会被存在colors.scr中.此colors.scr是一个文字文件,可用一般的文字编辑程序或File-File Viewer加以编辑如果要测试script,请先用All Invisible全关所有显示,再到下方命令列中输入replay colors就会看到程序把先前的设定重跑一次,而显示也回来了标示亮度Highlight将特定对象标示亮度以图形效果显示其特异性如以要找一颗U3的零件为例:1先Zoom in2选标示亮度Display Æ Highlight或其图示3在右侧选高亮度的颜色4选Control panel 中的Find 页面5在Find by name 后net改成symbol (因为是找零件)6点Move键找到U3 (敲入U3 U* 按Tab键)按Apply OK7光标移至右下角全图显示区按右键选Find Next 即可将此对象显示于画面中央控制可被选取对象在编辑对象如:移动复制删除之前须选到所要的对象所以选取对象等的控制会影响后续的动作流程以移动U4的零件及移动U4零件名称RefDes为例1Zoom in到U4附近(在左上角)2选Edit Æ Move指令3选右侧的Find页面4在Find的页面中选全选ALL ON5点 U4的字符串部份你会看到U4会被抓到游标上而你正在移动U4这颗零件(因为symbol有被选取)6选右键中的OOP取消移动U4的动作7在Find页面中选全关ALL OFF 只选Text项目8再选U4字符串部份只有U4字符串被抓起像在调文字面的位置所以跟选择项目很有关系9取消检查数据项利用Display Æ Element 或其图标检查对象内容1先Zoom in2选Display Æ Element或图示3在Find中选ALL ON4随点选对象的不同会显示其相关的资料CHAPTER 2零件的整备本阶段要试建一颗14PIN DIP 零件零件的组成有焊点 PADSACK零件Package symbol每一个接脚PIN及孔Via皆视为一焊点PADSTACK如以60-38为例进入程序开始Æ程序集Æ cadence Æ PCB Systems Æ PAD Designer改种类为贯孔Through单位为mil精确值为1 (小数后1位)焊点在每一铜箔层皆要有一般点regular PAD梅花瓣Thermal-relief PAD挖开点Anti-PAD的三种效果1选Layer 页面2点选Begin Layer3在一般点项目设形状为Circle width为60height为604在梅花瓣设形状为circle值为80Flash项目为TR805在挖开点设形状为circle值为80由于其它层设定相仿可点左侧Bgn按右键copy复制6点internal 的左侧按右键选右键paste即可贴入不须重key in7以同样方法贴到END层8在SOLDERMASK_TOP层的Regular PAD设circle大小为709一样复制到SOLDERMASK_BOTTOM钻孔定义如果定为Through-Hole焊点须定孔径及钻孔符号在Drill Hole 项目中定Plate Type 为Plated (孔壁镀铜)孔径38. Drill symbol的Figure为钻孔符号效果Character为标示字符串Width height为符号的宽及高储存焊点选File Æ Save as 存到 C:\allegroclass \ user1 档名为 60C38d.PAD实体零件的建立建立实体零件的格式不同所以须进入零件建立模式下1File / New 在DRAWING NAME中敲入新零件名如DIP14并在DRAWING TYPE中选PACKAGE SYMBOL2设作图环境选SETUP – DRAWING SIZE在Move Origin项目中的XY各敲入5000使原点调整至适当位置3加入焊点选ADD PIN或其图示并右侧OPTION项目中敲入焊点60S38D后按Tab键状态列会显示出Using ‘ 60S38D.PAD’4光标移至状态列点选后敲入x 0 0会把第一接点放到原点 00的位置上(x须为小写)窗口缩放到PIN1附近5在右侧OPTION中改焊点为60C38D后按Tab键在Y的Qty项目中输入6 6在状态列输x 0 100则会放入向下距100mil的27接点7把Y项目的Qty改7个次序order改up8状态列输入x 300 –600会放入第8PIN到14PIN之焊点但是其脚号仍位于焊点左侧可按右键之OOP取消9将OPTION中的OFFSET值由-100改为100 (表右边100mil处)于状态列输入x 300 -60010完成按右键中的DONE文字面绘制 SILKSCREEN要调整格点大小时请以SETUP /GRIDS将NON-ETCH的X Y值键入25表文字面绘制格点为251选ADD/LINE2将右侧OPTION选为Package Geometry下的SILKSCREEN_TOP设画线角度等3画上文字面的矩形框组装外型绘制Assembly outline (可省略)同文字面之动作但层面为Package Geometry下的Assembly-Top设文字面之零件名称及零件号1选Layout_Label Æ Ref Des或其图示2图面为 refDes下的Assembly_Top3点选放零件名称的好位置(须在Assembly outline中)4键入名称如U* (请先注意右侧的字体基准点角度)5选Layout_Label中Æ Device6选适当的位置后键入 dev type后按右键的DONE绘制零件限制区Package boundary (可省略自动抓)定义零件高度(需要有Package boundary才可定义)1Setup-Area-Package Boundry Height层面为Package Geometry下的Place_Bound_Top2点先前建的Package Boundry 区域3输入高度值如180若没设则以Drawing option下的symbol Height为其内定高度值存零件文件(两者都要存)1选File Æ Create Symbol存成可放到PCB上的.PSM檔2选File Æ SAVE存成供以后修改的图形.DRA檔以自动程序建零件利用Symbol Wizard填入参数自动建零件1、File /New后在Drawing Name键入名称如dip16在Drawing type选PackageSymbol [Wizard] 后选OK2选Package Type为dip后点Next (选零件包装)3套用CADENDCE规划选Default Cadence Supplied template套用其它零件则选Custom template后选.Dra档套入后选Next4设定使用的公英制准确位数及名称前字符串prefix5依不同零件外形设定其参数如脚数Number of Pins脚距LeadPitch行距Terminal row spacing文字面的宽及长Width&Length)6选套用的焊点(一般焊点及第一脚)7定零件原点为中心center of body或第一脚pin1 of symbol及是否另存.PSM檔8选Finish 即OKCHAPTER 3板框绘制板框在Allegro中属于特殊的Mechanical Symbol板框为电路板的外形尺寸,其来源可由手工绘入.,键坐标输入画成.如果有Option 接口的话可由AUTOCAD转入DXF或Pro-Engineer的IDF.键坐标画图框1选File一New,在檔名Drawing Name中敲入如cds_outline.请注意格式务必改成Mechanical Symbol后按OK2设绘图区选Setup一Drawing Size.将图区Size设成A.并把DRAW Extent改设成Left X与Lower Y在设原点偏移量.Width 与Height设工作区大小设工作格点选Setup一Grids.将Non-Etch的格点设为25后按OK画板框选Add一Line.注意层面须改成BOARD GEOMETRY/OUTLINE.请输入x 0 200iy 2300ix 4000iy –2300ix –100iy –200ix –3700iy 200x 0 200 完毕按右键下的Done定工具孔Tooling Hole选指令Add Pin在右侧的Padstack中输入hole109再按Tab键.请在命令列输入x 100 300x 100 2400x 3900 2400 完毕按Done 结束标尺寸Dimension利用Dimension linear指令,层面会自跳到BOARD GEOMETRY下的DIMENSION.点选被测线段就可拖出其尺寸标注线放上.倒角Chamfer如果画的板框有直角要倒角,可用指令Edit一Chamfer.在右侧Options中TrimSegment的First栏设50.表示未倒角的两边线段长为50mil.试着点要倒角的第一段线,再点它的垂直线,就可做出倒角效果来设走线及摆零件区1先Zoom in到图框的左下角,2选Setup一Area一Route Keepin(走线区)在板框内的50mil(二个格点)内画出其布线限制区.(会在ROUTE KEEPIN下的ALL.)3选Setup一Area一Package Keepin(摆零件)画出相同的限制区设禁止摆零件及走线区选Setup一Area一Route Keepout(走线)画上不能走线的范围,其显示为一填满区.试画过后请Edit一Delete删除(在Find中要勾Shape),否则稍后可布线区域可能不够.其它如ViaKeepout则为禁打贯孔区存板框檔1选File一Create Symbol设入档名如cds_outline后选Save会存成cds_outline.bsm的Board Symbol 檔.2再选File一Save存成cds_outline.dra的图形文件.建立环境档Master Design File (.brd)环境档通常是只先放入板框而未含有逻辑数据的作图文件.利用它把大家讨论过认证的Geometry先设好的存在图档上.达到统一作图环境的目的.当成公司内的标准档.1选File一New,在檔名Drawing Name中敲入如cds_master.请注意格式为Layout 后按OK2设绘图区选Setup一Drawing Size.将图区Size设成B.,小数后位数Accuracy设成2.并把DRAW Extent的Left X设成-5000 ,Lower Y设成-5000完成按OK3放入板框零件,选Place一By Symbol一Mechanical,先点Library键才会列出各Mechanical Symbol,选先前建的cds_outline后按OK键准备放到图上4在命令列敲入x 0 0 ,放到图上(0,0)点.完毕按Done加图框Format Symbols如果要加上图框或其它注意事项宣告1Place一By Symbol 一Format, 先点Library键使列出各Format Symbol.如果点选Asizeh.表示要挂上A Size 横向的图框2利用光标把图框放至工作区上(请并确定板框数据含于图框范围内)3按右键选Next选到Note这个Symbol4请放在图框内板框外的适当区域中预放零件如果有特定的零件位置或固定的某几颗零件如connector.switch.等等.可以先摆到板上1选Place一By Symbol一Package.点Library使列出各实体零件.请选其中的conn140后按OK2在命令列输入x 3775 -200后按Done摆到图上设颜色1进到Color/Visibility中设定显示项目或其颜色.如果先前已存有Script 文件请Replay控制图形效果,请在命令列输入 replay colors层数设定Cross SectionAllegro内定的板层为二层板(指二个电气层).您如果是多层板则必须先宣告其层面结构.如层数.材质.用途.Subclass name.正负底片效果等.而其材质的种类及特性定义在<cds ins dir>/share/pcb/text/materials.dat檔中1选Setup一Cross Section点FR-4层名左侧的Edit后选Insert新增,则在原层之上会加入一个新的FR-4层.请总共新加入8层,因为我们待会要宣告此板为六层板,加上五层FR-4介质层及二层原有的空气层全部为13层.2点选第二个FR-4层准备把改设为内层的GND.请点其材质Material项目改设为铜箔Copper,将层面特性Layer Type改选成Plane,而Etch Subclass name取名成GND.最后把其底片效果由念Positive改为Negative表示此层为负片.3最后设定完成如下.表示此板为47.2mil厚的六层板.如果要删层则点选那一层其左侧的Edit键后按右键选删除Delete即可存环境档宣告完毕要存成环境档,请用File-Save As另存新档设入档名为cds_master1.brd 存入.通常Allegro的环境档可统一放在<course inst dir>/allegro/project1/worklib/esdesign/physical路径下CHAPTER 4加载联机关系与设定规范载入联机关系Load the Netlist联机关后档是一个由线路图程序所产生的文字文件netlist目的在交代零件(外型名称)及联机关系(接点及讯号名).要是零件需要作功能互换(gate swap或pin swap)则需另定零件宣告文件device file.如果有同类型但不同名零件可用对应文件map file宣告其对应不需每颗皆定义.以ORCAD为例,再执行完ERC电器检查后.即可执行其Tools-Netlist将线路图档转出联机关系档,其格式请选用others页面里的Allegro.就可把整份图转成一个联机档 .net或.txt零件若是在布线时会做swap的联机交换则须为零件定义其Device file 以宣告其零件之脚数闸数等到时:7400会对应7400.TXT套入宣告如果二者名称不同可以devices.map档宣告其对应性.以下devices.map为例零件7400会对应到74abcd.txt的device檔而非7400.txt如果要零件宣告文件device file,新版的ORCAD 9.x可用指令Accessories-Allergo Netlist自动产生各零件的device file.不需手动以文字编辑程序逐一编写载入联机 Import Logic1. 选File/Import Logic定来源格式Logic Type为Third party.2. 来源档案 Import From 点选后再选Browse键选文字联机文件的3rdparty.txt.3. 是否替换新零件Replace changed component.设Always4. 是否允许拆原有布线Allow etch removed during eco依情况而定5. 设定转联机关系时取代原图上的逻辑数据supersede All logical.6. 要加载联机成为电路板文件选加载Import.设计规范Allegro的设计规范是在定义设计过程中的条件限制,这些条件的设定是用来作为设计时安全检查的标准.例如我们可以定义层数,各层的规范,特殊讯号的限制条件如线宽间距打贯孔数,或特定区域条件等等,以配合电器或机构考量.而且宣告过的规范存在图档上,可避免以后布线时因考量因素众多而疏漏所造成需重修的情况.设定内定设计规则内定设计规则是给图文件中未经特定宣告的任意讯号(一般线)所套用进入Setup-Constraints请点选内定标准值Default Value设定其线到线,线到点,点到点,线宽,套用的贯孔等设定其它的设计规则在一份图档上有些特殊的线有其不同的规则相对于先前定的内定标准值如CLOCK讯号它的间距如为10 mil不同于先前内定的 5 mil.其步骤为定RULE SET请点选SPACING RULE SET下的SET V ALUE.在DELETE后的空白处输入 10 MIL SPACE后点选加入键加入新的RULE SET.随后输入其各间距的值再按OK键确定宣告相关讯号选ATTACH PROPERTY -NET,选右侧的FIND点选下方的FIND BY NAME切换成NET后再输入CLK2.程序跳出其PROPERTY画面请选NET-SPACING-TYPE, 在其V ALUE中输入其组别名称如CLOCK后按APPLY确定讯号套上RULE SET选在SPACING RULE SET中的ASSIGMENT TABLE设定各个RULE SET之间的规范如CLOCK与NO_TYPE指先前订的CLOCK(本例中只有CLK2)与一般讯号NO_TYPE所套用的间距值为10 MIL SPACE设定实体规范在实体规范PHYSICAL RULE SET中选其SET V ALUE键,在DELETE后的空白处输入10 MIL LINE 后点选加入ADD键,建立新的PHYSICAL SET.随后输入其允许最小线宽MIN LINE WIDTH,缩线后最小线宽,最大线宽,是否形走线,套用的贯孔焊点为何等等.,结束按宣告相关讯号选ATTACH PROPERTY-NET,选右侧的FIND点选下方的FIND BY NAME切换成NET后再输入REF.程序跳出其PROPERTY画面请选NET-PHYSICAL_TYPE在其V ALUE中输入其组别名称如ANALOG后按APPLY确定讯号套上RULE SET选在PHYSICAL RULE SET中的ASSIGMENT TABLE套上各个RULE SET的规范如把ANALOG套上先前订的10 MIL LINE,NO_TYPE指一般讯号请套上DEFAULT.第二项为AREA是当有设定特定区域AREA时才有对应的新值可输入STUB LENGTH,允许最多贯孔数MAX VIA等等而AREA则是以特定区域的方式来宣告其特别的设定值如线宽间距等设计规范存盘我们可将前面所设好的规范存成一个技术文件TECH FILE,请选指令FILE-EXPORT-TECHFILE设好文件名再按执行RUN键即可产生下次开新文件时层面只有二层,也没有特殊线宽或间距等设定,这时你可以加载技术档..这样这些设定即不须重设只须要把新讯号重新指定其对应的规则就可了查属性要检查己订属性可用1选EDIT-PROPERTIES配合右侧FIND2 选DISPLAY-PROPERTIES指令后选要查询的值如NET_SPACING_TYPE,再于V ALUE栏输入查询值如 * 表示任意即可查到先前订的CLOCK.在您绘图的过程中Allegro会以先前订的规范持续的检查你的图档当它有违规时则会有DRC的标记在上面.而这个蝴蝶形的标记的两边各有一个英文字母代表它检查的数据种类如L表线段LINE,.V表VIA,P表PAD等等,使我们能很快的知道错误在那儿而侦测到的错误项目又是什么数据间的状况可以马上加以改正.您也可以用SHOW ELEMENT的指令来查看更详细的结果Chaper 5摆放零件在建完零件,传入联机关系,订好规则之后紧接着的就是零件的摆放动作在图示中通常已经挂上了一些有关摆放零件的图标而这些图标就如同指令PLACE下的各个摆放功能请开启位于c:\\allegroclass\user1\ 底下的constrainted.brd手动编名因为置于板上的金手指尚未命名所以我们必须手动的帮它编名请选Logic-Assign RefDes并点选右侧Options下方的RefDes字段中输入J1 点选金手指则会把这颗零件命名为J1设定摆放格点设摆放零件时移动零件的距离请选Setup-Grid下的Non-Etch将其Spacing X:值输入50,Y:值输入50.要不要显示格点则设定左上角的GRID ON以零件名称摆放Placed By RefDes一般摆零件时习惯边看线路图边摆零件,所以我们须将相关的零件逐一叫出这样就会用到此功能请选Place By RefDes指令敲入零件名U5后按OK就可抓出U5到图上准备摆入.如果想要旋转,请按鼠标右键选择Rotate这时零件上就会跑出一根控制杆到光标位置利用鼠标转动即可控制其旋转角度.按左键可停止旋转.移动到要摆的中下图区后按右键选Done放置如果摆上的零件看起来是一个填满的大方块是因为开启了它的限制区.想关闭请至Display-Color/Visibility把Package Geometry/Place_Bound_Top项目勾勾去掉除了此种方法外如果新摆入的零件都须转一个特定角度的话可到Setup-Draw Options选其中的SYMBOL把Angle字段输入或改选成90再点OK键试着抓U7进来摆,你可看到它己是旋转了90度等着您摆入移动零件如果已摆入零件其位置须要挪移请选Edit一Move后再到右侧的Find项中全关只留Symbols.请点选要移动的零件(最好点它的名称字符串)零件就会被抓到光标上,待移到新位置后,点右键按Done即完成移动一群零件同样以Edit一Move指令以鼠标左键框出一个区域,框住要一齐挪移的零件(如果要放弃框选范围可选右键下的Oops).再以左键定其基准点就可一齐移动到时再以右键下的Done确定.再框选时请勿框到 Board Outline,Keepins,keepouts的Board Symbol资料.其它摆放的动作有Place一Component一ICs 摆IC类零件Place一Component一IOs 摆输出入类零件Place一Component一Discrete 摆附属小零件Place一Component一ALL 摆所有零件联机互换的动作有Place一Swap一Component 零件位置互换Place一Swap一Functions 闸联机互换(需有device宣告)Place一Swap一pins 接点联机互换(需有device宣告)联机显示控制联机指点到点间用来表示其电气接续性的表示线.我们会依不同需求开关某些零件或讯号的显示效果来达到评估布线策略的目的显示(关闭)所有联机Display一Show(Blank) Rats一All显示(关闭)单颗零件Display一Show(Blank) Rats一Component显示(关闭)单条联机Display一Show(Blank) Rats一Net产生摆放零件报表您可以产生一份摆放零件报表它可列出图中已摆放及未摆放之零件数据您在摆完零件后可用它来再确认是否有漏网之鱼尚未摆入HAPTER 6 布线布线相关指令设定布线格点随着不同的布线须求.您可为不同层设定不同的布线格点或是设定所谓的不等距格点如8 9 8这样的工作格点.指令为Setup一Grids设定格点,其中左上角的Grids On 为设定是否显示格点.Non-Etch为非电气层格点如摆零件.All Etch为所有电气层之走线格点.Top….为各电气层之走线格点值在布线时我们必须在右侧的Options中设定布线的工作层Act及代换层Alt在走线时首先走在工作层上如果要换层只须连续点二下左键(双击)则您的工作层及代换层会自动互换并打上贯孔试走第一条线1请先关闭所有联机显示,然后选Display一Show Rats一Net按鼠标右键选其中的Net Name输入 clk2使只开此讯号的显示效果2 Zoom in到U15 选择布线图示或Route一Connect将右侧的Options中的Act 层设为Top,Alt层设为IS3,线的角度设45度线宽设5,布线效果RouteType设手动布线Manual.3 试着点线开始布线,一开始走出时是在正面ToP层,如果觉得走得不好请用右键按OoP取消删除布线如果不满意先前所走的布线结果可以用Delete指令予以删除但是请配合右侧Options或Find的选项让使用上更加的便利1.全线删除请选择删除示或指令Edit一Delete在Find下请先选ALL OFF再开Clines请点CLK2的布线,此线会全部高亮请再按右键下的Done就会把它删掉(请救回此线以执行以试作底下其它动作)2.线段删除如果要删掉的只是某些线段非整条布线,请在右侧的下Find关所有项目只留ClineSegs同样点CLK2你会只看到此线段高亮,如果点其它线段则先前的线段即消失被删除了3.二点间线段删除如果要删掉的只是某些线段内的一小段,选Edit一Delete按右键下的Cut,点要删掉线段内的第一点(线段变亮)再点第二点,则剩此区间高亮可删除.布线效果Routing Type在走线的过程中我们有三种效果可以选择,分别是手动布线Manual,循迹布线To Cursor,结点布线To Pick1.手动布线Manual--------在前一光标位置与目前的光标位置间显示出走线’不会自动闪其中的障碍但推线效果明显2.循迹布线To Cursor-----随游标带出布线的走向,可动态的看出将布线的效果,会自动的闪避其中的障碍3.结点布线To Pick--------前后光标点间无法看到动态的布线轨迹,但是会自动闪线且速度比较快右键指令走线的过程中按鼠标右键会出现一些选项Done =>布线停止,回到空-状态IdleOops =>取消前线段动作Cancel =>取消前指令Next =>布线暂停,改走其它线Temp Group =>宣告走bus线讯号Complete =>结束bus线讯号选入动作Reject =>放弃现有选取,可改选其它Add Via =>打贯孔Finish =>以同层自动走完未布线段Snap Rat T =>移动讯号T点位置Neck =>窄线布线,须依Physical Rule Set宣告New Target =>改定同讯号的目的点(布线终点)No Target =>尾段讯号不显示Swap Layer =>走线换层(Act层换到Alt层) Toggle =>出线角度切换(先直再斜或先斜再直) 打贯孔贯孔是用来导通层到层之间的讯号关系,贯孔必须有焊点的特性在布线的过程若加入贯孔则其工作层与代换层就会自动切换走到对应的布线层面.动作为连续点二下左键(双击)或选右键里的Add Via.移线利用移线指令SLIDE可移动先前所布的线段.你只需要选好指令后用左键点选要移动的线段即可动态的移动此线段,而与此线段相连的线段效果也会自动调整保持整体的完整性1请开启档案CDS_ROUTED.BRD稍为Zoom in到局部区域上.请选图标区上的移线图示或ROUTE一SLIDE2在右侧的Find项目中全清只留Via及Segment3以左键点选线段移动看看,也以左键定其新的落点4可以试着改变调整右边设定如角度CORNER或最大斜线长度Max 45 Len看看它的效果修端点VERTEX要挪动,新增,重迭,删除(选右键下的DELETE VERTEX),请利用EDIT-VERTEX或按F7键.即可修整端点自动整线有Route-Custom Smooth或Route-Gloss可执行SPECCTRA自动布线当您执行ROUTE一SPECCTRA-Auto儿时Allegro会发起SPECCTRA的自动布线程序并建立一个同档名的.dsn檔.在自动布线结束后SPECCTRA会产生一个.ses檔在回到Allegro时转入成已布线档SPECCTRA手动布线执行ROUTE一SPECCTRA-Interactive,可转档到Specctra并以其EditRoute作手动布线产生未布线报表在布线完毕后.我们如果要确定定否有未布线点仍然存在.可以执行TOOLS一Reports选输出的资料为Unconnected pins再点Run键就会产生此报表加以查核CHAPTER 7 内层及铺铜如果您的设计超过二层,那么您就须要设定其内层铜箔的效果包括它的铺铜箔效果,所带的讯号名,避开的间距,内层切割等等的问题通常铜箔分二种,正片铜及负片铜.正片铜显示的是含铜的部分,也就是黑的部分以后就是铜箔.在Allegro中的正片铜您可以看到它所挖开的开孔void 及所接的梅花瓣Thermal 它的缺点是一但铜箔的接续性更改如移零件或贯孔.则铜箔须要重铺以重新连结正确的梅花瓣及挖开不同讯号点负片铜显示的是以后要挖掉铜的部分,反而是白色的部分以后才会有铺铜在Allegro中负片铜只是显示一些点在内层上面.随着所设定的讯号.程序会自动判定那些点该是要改成内层要接的Thermal Relief定义效果,那些不接的点其内层必须是挖开的Anti-Pad定义.Allegro并不会把那些焊点挂在层面上.好处是零件或是贯孔可随意移动不须重铺重算.只有在他产生底片输出时才会将焊点数据并入处理.而它的缺点是您无法在图上即看到真实的底片效果.(尤其是梅花瓣)宣告内层负片铜l.Add一Shape一Solid Fill画内层铺铜范围2.Edit一Change Net(Pick)宣告铜箔的讯号名3.Shape一Fill填铜箔1请开cds_routed.brd檔.设定Setup一Drawing Options在Display项目中勾选Thermal Pads(显示梅花瓣) 及Filled Pads and Cline Endcaps(填满式显示)选项2 选Display一Color/Visibility把Group项目改成Stack再把底下的Etch项全关只留VCC层.其它项的PIN与VIA也是只留VCC后跳出3选Add一Shape一Solid Fill在右侧设Etch及VCC层,在板内的走线区范围内Route Keepin画一个Polygon画完按右键Done结束4宣告内层讯号选Edit一Change Net(Name)在列表中选VCC后跳出5填铜箔.选Shape一Fill这样会灌满并显示出Thermal Pad(单线)及AntiPad的效果宣告内层正片铜l.Add一Shape一Solid Fill画内层铺铜范围2.Edit一Change Net(Pick)宣告铜箔的讯号名3Shape一Parameter设定自动挖开铜箔的效果4V oid一Auto执自动清铜动作(讯号不同者挖开,相同者挖开后架上桥接花辫)5Shape一Fill填满铜箔效果。

Cadenceskill语言简介

Cadenceskill语言简介

Cadence skill语言简介Cadence提供二次开发的SKILL语言,它是一种基于通用人工智能语言—Lisp的交互式高级编程语言(LISP即List Processing-表处理,是最早和最重要的符号处理编程语言之一,它于1958年由美国的J. McCarthy提出,LISP在人工智能AI方面获得广泛应用)。

SKILL语言支持一套类似C语言的语法,大大降低了初学者学习的难度,同时高水平的编程者可以选择使用类似Lisp语言的全部功能。

所以SKILL语言既可以用作最简单的工具语言,也可以作为开发任何应用的、强大的编程语言。

SKILL可以与底层系统交互,也提供了访问Cadence各个工具的丰富接口。

用户可以通过Skill语言来访问,并且可以开发自己的基于Cadence平台的工具。

1. Skill语言和Lisp语言的关系Skill函数提供两种表示法,一种是代数表示法,现在大多数语言采取这种方式,即func( arg1 arg2 ...),另一种是前缀表示法,类似于Lisp语言,即(func arg1 arg2 ...)。

这里举个例子作为对比:1.代数表示法procedure( fibonacci(n)if( (n == 1 || n == 2) then1else fibonacci(n-1) + fibonacci(n-2)))2.前缀表示法(defun fibonacci (n)(cond((or (equal n 1) (equal n 2)) 1)(t (plus (fibonacci (difference n 1))(fibonacci (difference n 2))))))这里可以看到类似Lisp语言的表示法后面有很多右括号,而且函数和参数容易混淆,所以一般推荐还是用常用的类C语言代数表示法Skill程序就像一个list表,类似Lisp语言,程序的操作就像操作数据(list)一样,可以生成,修改,求值等2. 关于Skill函数SKILL语言支持一套类似C语言的语法,初学者有了一定的C语言基础,入门是很容易的。

Cadence skill语言简介

Cadence skill语言简介

Cadence skill语言简介Cadence提供二次开发的SKILL语言,它是一种基于通用人工智能语言—Lisp 的交互式高级编程语言(LISP即List Processing-表处理,是最早和最重要的符号处理编程语言之一,它于1958年由美国的J. McCarthy提出,LISP在人工智能AI方面获得广泛应用)。

SKILL语言支持一套类似C语言的语法,大大降低了初学者学习的难度,同时高水平的编程者可以选择使用类似Lisp语言的全部功能。

所以SKILL语言既可以用作最简单的工具语言,也可以作为开发任何应用的、强大的编程语言。

SKILL可以与底层系统交互,也提供了访问Cadence各个工具的丰富接口。

用户可以通过Skill语言来访问,并且可以开发自己的基于Cadence平台的工具。

1. Skill语言和Lisp语言的关系Skill函数提供两种表示法,一种是代数表示法,现在大多数语言采取这种方式,即func( arg1 arg2 ...),另一种是前缀表示法,类似于Lisp语言,即(func arg1 arg2 ...)。

这里举个例子作为对比:1.代数表示法procedure( fibonacci(n)if( (n == 1 || n == 2) then1else fibonacci(n-1) + fibonacci(n-2)))2.前缀表示法(defun fibonacci (n)(cond((or (equal n 1) (equal n 2)) 1)(t (plus (fibonacci (difference n 1))(fibonacci (difference n 2))))))这里可以看到类似Lisp语言的表示法后面有很多右括号,而且函数和参数容易混淆,所以一般推荐还是用常用的类C语言代数表示法Skill程序就像一个list表,类似Lisp语言,程序的操作就像操作数据(list)一样,可以生成,修改,求值等2. 关于Skill函数SKILL语言支持一套类似C语言的语法,初学者有了一定的C语言基础,入门是很容易的。

Cadence 技巧集锦

Cadence 技巧集锦

Cadence 使用技巧 1 orcad 转换为 cadence 的时候电源网络或者其它 NET 不显示,仅仅高亮 在 ORCAD 或者 cadence PCB 环境中取消 no_rat 属性即可 2 orcad 做的元件封装,一定不要重名,特别是 GND VCC 可以这样使用 GND_1 GND_2 等 以区别 3 更改覆铜与布线及、焊盘之间距离方法 选择 Setup->Constraints->选择 Spaceing rule set 中 Set valuses...按钮 Shape To Pin (覆铜到管脚) Shape To Via (覆铜到过孔) Shape To Line (覆铜到走线) Shape To Shape(覆铜到覆铜) 依据具体情况更改其值。

然后确定退出对话框。

选择 Shape->Polygon 在版图上画上所要覆铜的区域。

注意在 Option 选项卡上选择覆铜所在的层。

Shape Fill 选择 Dynamic copper。

Assign net name 为覆铜添加网络(例如覆铜选 GND 网络, 则覆铜自动和网络名为 GND 的焊 盘相连) 选择 Shape->Delete Islands,删除覆铜上的孤岛。

4 spb15.5 没有提供元件对齐等功能,可以使用网络上的一个制作 cadence PCB 封装的插件 来实现 5 不画原理图直接给管脚定义网络名的方法 1.勾选 SETUP->USER PREFERENCES->MISC->LOGIC_EDIT_ENABLED 2.使用 LOGIC〉NET LOGIC 6 setup-->user proferences 下面的 set pcb_cursor cross 小十字,set pcb _cursor infiniter 这是 大十字 cadence 使用时间不长, 虽然画几块板子, protel 相比有很多不同的地方。

Cadence中文简明手册

Cadence中文简明手册

CADENCE芯片版图设计工具VIRTUSO/DIV A/DRACULA入门手册 (2)1、使用V IRTUSO/D IV A/D RACULA之前的准备 (2)1.1、要找一台装有工具IC的计算机 (2)1.2、要能连接到该计算机上 (2)2、工具IC的软件环境配置 (3)2.1、创建工具IC的启动目录,即工作目录。

(3)2.3、将(.cdsinit和.cdsenv)拷贝到工具IC的启动目录 (3)2.4、在工作目录下创建工艺库文件 (3)2.5、启动工具IC,命令为icfb& (3)2.6、配置工艺库路径 (4)2.7、添加工艺提供的一些辅助库............................................................ 错误!未定义书签。

2.8、添加Multipart Path ........................................................................... 错误!未定义书签。

2.9、安装PCELL ....................................................................................... 错误!未定义书签。

3、开始一个新的设计---编辑电路图与版图 (5)3.1、新建一个设计库 (5)3.2、Attach库 (6)3.3、创建新设计 (6)3.4、编辑电路图 (7)3.5 编辑版图 (8)3.6 可以根据习惯改变版图的层次显示特性 (9)3.7、完成版图编辑之后先保存再退出 (10)4版图的DRC检查 (10)4.1、基于Diva的方式 (10)4.2、基于Dracula的方式 (10)5、LVS (12)5.1、准备版图的GDS文件 (12)5.2、准备电路网表 (12)5.3、用LOGLVS转换电路网表成LVS要求格式 (14)5.4、修改lvs的命令文件 (14)5.6、运行dracula来生成lvs任务的可执行文件 (14)5.7、在控制台下,运行文件 (14)5.8、查看错误 (14)5.9、修改 (15)6、PAD相关 (15)6.1、准备pad库 (15)6.2、导入pad版图的GDS文件 (15)6.3、更新gds和cdl (16)6.4、修改cdl (16)7、一些小经验 (17)8、附件清单 (18)9、后记 (18)Cadence芯片版图设计工具Virtuso/Diva/Dracula入门手册(以上华0.6um DPDM工艺设计库为例)Cadence 是一套功能强大的EDA软件,包含有诸如IC、SE等常用芯片设计工具。

skill语法用户手册

skill语法用户手册

skill语法用户手册一、概述Skill语法是一种基于自然语言处理技术的语法分析器,它可以将自然语言文本转化为结构化的数据,从而方便计算机对文本进行处理和分析。

本用户手册将详细介绍如何使用Skill语法进行文本分析。

二、安装与配置1.安装:请根据您的操作系统和编程环境,按照官方网站的安装指南进行安装。

2.配置:在安装完成后,您需要创建一个新的项目,并选择适合您需求的语法文件。

您可以在官方网站上下载所需的语法文件,或者根据您的需求自行编写。

三、使用方法1.文本输入:将需要分析的文本输入到指定的输入框中。

2.语法分析:点击“开始分析”按钮,系统将自动对输入的文本进行分析。

分析结果将以结构化的形式展示在界面上。

3.数据导出:您可以将分析结果导出为多种格式,如CSV、JSON等,以便在其他应用程序中使用。

四、语法规则Skill语法采用基于规则的自然语言处理技术,通过定义不同的语法规则来解析不同的文本。

以下是常见的一些语法规则:1.名词短语:用于识别句子中的名词或名词短语,如“苹果”、“红色的苹果”。

2.动词短语:用于识别句子中的动词或动词短语,如“吃”、“吃苹果”。

3.形容词短语:用于识别句子中的形容词或形容词短语,如“甜的”、“非常甜的苹果”。

4.时间表达式:用于识别句子中的时间表达式,如“今天”、“明天”、“去年”。

5.数字表达式:用于识别句子中的数字表达式,如“3个”、“50%”、“2023年”。

6.标点符号:用于识别句子中的标点符号,如“、”、“;”、“!”等。

7.停用词:用于识别句子中常见的无意义词汇,如“的”、“了”等。

8.短语类型:用于识别短语类型,如“动词短语+名词短语”、“形容词短语+名词短语”等。

9.语义角色标注:用于识别句子中不同成分之间的语义关系,如“施事”、“受事”、“时间”等。

五、常见问题与解决方法1.问题:无法正常安装和运行。

解决方法:请检查您的操作系统和编程环境是否符合要求,并确保已按照安装指南进行操作。

Allegroskill基本语法

Allegroskill基本语法
1.先执行一次cdr,读取后面的List单元。
2.对第1步读取的值,执行car,读取其第一元素。
3.对第2步读取的值,执行car,读取其第一元素。
实例:caaar('(((1 2 3)(4 5 6))(7 8 9))) => 1等同于car( car( car( l_list)))
caadr('(((1 2 3)(4 5 6))(7 8 9))) => 7等同于car( car( cdr( l_list)))
let( ()
println("Hello World!")
)
); end procedure
1.1.4
SKILL支持2种注释方式:
a. /*…*/用于注释多行,像C一样
b. ;用于注释单行,类似C的//
1.1.5
integer5
float5.0
string"abc defg"
list'(1 2 3 "a")
1.1 SKILL
SKILL是用于Cadence软件二次开发的语言。我们关于SKILL的介绍基于SKILL语言参考档和llegro SKILL的应用。
1.1.1
SKILL语法支持lisp格式的语法,但是我们不推荐,推荐类C的语法格式。
Lisp示例:(max 5 3) => 5
C示例:max(5 3) => 5
第一个位置保存List的首个数据元素,第二个位置保存后面的List单元(除第一个元素之外的所有元素组成的表),它可以为空数据。
用car函数可以得到保存在第一个位置的List元素:car( aList) => 2
用cdr函数可以得到保存在第二个位置的List单元:cdr( aList) => (3 4) List

学会skill语言(1)——学习前的准备

学会skill语言(1)——学习前的准备

学会skill语言(1)——学习前的准备在介绍「ocean脚本仿真」内容的时候已经对skill语言有了初步的了解,后台也有同学询问关于skill 语言的内容,接下来的一段时间小目同学就和大家一起学习关于skill语言的基础内容,希望通过学习,大家可以逐渐掌握skill语言并在工作和学习中灵活使用。

skill语言介绍skill语言是Cadence软件平台使用的一种语言,由Lisp﴾List Processing language﴿发展而来,对于有编程基础的同学来说很容易掌握。

在Cadence软件平台中无论用户在图形界面做的任何操作,在底层都是通过调用相应的skill函数或者程序实现功能的,可以认为Cadence软件平台上凡是可以通过图形界面实现的功能都可以使用相应的skill代码实现,对于图形界面不方便完成的操作也可以通过编写skill脚本完成。

使用CIW窗口CIW﴾Command Interpreter Window﴿是启动Virtuoso图形界面之后首先出现的窗口,在CIW中可以通过图形界面进行很多操作,也可以直接在CIW中输入指令操作Virtuoso,还可以通过CIW观察指令运行信息。

CIW窗口是skill语言学习过程中最有力的工具,任何skill语法都可以在CIW内得到验证。

通过设置可以让skill语言显示图形界面操作对应的skill代码,合理利用这一功能可以大大提高编写skill脚本的效率,特别对于不熟悉skill脚本的同学来讲,这一功能十分有用。

在CIW内输入相应的命令,回车之后运行结果会在输出窗口显示,包括命令运行结果以及返回值等。

在CIW内的菜单栏,通过选择:Options‐>Log Filter,打开Log文件设置窗口,通过勾选相应的选项,设置Log文件的输出内容,方便用户回顾软件运行情况,所有在CIW输出窗口显示的内容都会保存在该CIW相应的CDS.log文件内。

至于Log文件设置窗口中每个符号代表的意义可以通过符号后面的解释知晓,CDS.log文件中的每一行信息也都通过相应的符号进行注释。

Cadence skill语言简介

Cadence skill语言简介

Cadence skill语言简介Cadence提供二次开发的SKILL语言,它是一种基于通用人工智能语言—Lisp的交互式高级编程语言(LISP即List Processing-表处理,是最早和最重要的符号处理编程语言之一,它于1958年由美国的J. McCarthy提出,LISP在人工智能AI方面获得广泛应用)。

SKILL语言支持一套类似C语言的语法,大大降低了初学者学习的难度,同时高水平的编程者可以选择使用类似Lisp语言的全部功能。

所以SKILL语言既可以用作最简单的工具语言,也可以作为开发任何应用的、强大的编程语言。

SKILL可以与底层系统交互,也提供了访问Cadence各个工具的丰富接口。

用户可以通过Skill语言来访问,并且可以开发自己的基于Cadence平台的工具。

1. Skill语言和Lisp语言的关系Skill函数提供两种表示法,一种是代数表示法,现在大多数语言采取这种方式,即func( arg1 arg2 ...),另一种是前缀表示法,类似于Lisp语言,即(func arg1 arg2 ...)。

这里举个例子作为对比:1.代数表示法procedure( fibonacci(n)if( (n == 1 || n == 2) then1else fibonacci(n-1) + fibonacci(n-2)))2.前缀表示法(defun fibonacci (n)(cond((or (equal n 1) (equal n 2)) 1)(t (plus (fibonacci (difference n 1))(fibonacci (difference n 2))))))这里可以看到类似Lisp语言的表示法后面有很多右括号,而且函数和参数容易混淆,所以一般推荐还是用常用的类C语言代数表示法Skill程序就像一个list表,类似Lisp语言,程序的操作就像操作数据(list)一样,可以生成,修改,求值等2. 关于Skill函数SKILL语言支持一套类似C语言的语法,初学者有了一定的C语言基础,入门是很容易的。

cadence菜单中英文对照

cadence菜单中英文对照

1. 文件菜单
新建 打开 保存 另存为 导入 导出 查看日志 打开日志 打印设置 打印 改变编辑器 生成说明文件 退出
2。 编辑菜单
移动 复制 镜像 旋转 修改 删除 生成图形
删除未连结的图形 分割平面 倒角 删除倒角 文本 分组 特性设定
修改器件边角
3.查看菜单 4.添加菜单 5.显示菜单
放大矩形范围 放大至满屏 放大 缩小 放大整个范围 以一点为中心放大 保存镜像文件 镜像文件恢复 刷新 习惯设置
图样设置 影像文件设定 文件输出 钻孔参数设定 设置标识
制造检查 设置测试内容 丝印层设置 生成报告
钻孔参数 钻孔图例 钻孔记录 文件输出 生成组装图 生成材料清单 参数设置 设置字体类型 测直线距离
测角度
13.工具菜单
生成详细说明
创建模块 焊盘编辑 焊盘 去除连结 报告 技术文件比较 设置向导 数据库检查 更新 DRC
需要从一点画到另一点 点击两点自动连线
特性设置 习惯设置 器件赋值 理性文本 设置端点的名称 添加注释 打开文本文档 设置字体大小 放大 缩小 交换 重新连结 特性显示
可对电阻电容等进行赋值
下一层菜单如下 显示名称 显示值 两样都显示 不可见
7.模块菜单 8.组菜单
添加 重命名 扩展 连线 连线 添加针脚 重命名针 删除针脚 移动针脚
手工布局
9.布线菜单
快速放置 在 CCT 中布局 自动布局 交互式布局 交换 自动交换 调整 更新符号 临时使用 SPECCTRAQuest
交换针脚 交换功能 交换元件
可视布局 参数设定布局 布顶层元件 布底层元件 布设计中的元件 布指定区域的元件 布窗口中的元件 布列表中的元件 参数设定 交换设计内容 交换指定区域 交换窗口内容 交换列表内容 参数设定 调整整个设计 调整指定区域 调整窗口中内容 调整列表内容 器件 符号

Cadence 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 =对于既有函数名又有操作符函数,采用函数名调用和采用操作符调用的效果是一样的。

Cadence 使用参考手册

Cadence 使用参考手册

Cadence 使用参考手册邓海飞微电子学研究所设计室2000年7月目录概述 (1)1.1 Cadence概述 (1)1.2 ASIC设计流程 (1)第一章Cadence 使用基础 (5)2.1 Cadence 软件的环境设置 (5)2.2 Cadence软件的启动方法 (10)2.3库文件的管理 (12)2.4文件格式的转化 (14)2.5 怎样使用在线帮助 (14)2.6 本手册的组成 (15)第二章Verilog-XL 的介绍 (16)3. 1 环境设置 (16)3.2 Verilog-XL的启动 (16)3.3 Verilog-XL的界面 (18)3.4 Verilog-XL的使用示例 (19)3.5 Verilog-XL的有关帮助文件 (20)第四章电路图设计及电路模拟 (22)4.1 电路图设计工具Composer (22)4.1.1 设置 (22)4.1.2 启动 (23)4.1.3 用户界面及使用方法 (23)4.1.4 使用示例 (25)4.1.5 相关在线帮助文档 (25)4.2 电路模拟工具Analog Artist (25)4.2.1 设置 (25)4.2.2 启动 (26)4.2.3 用户界面及使用方法 (26)4.2.5 相关在线帮助文档 (26)第五章自动布局布线 (28)5.1 Cadence中的自动布局布线流程 (28)5.2 用AutoAbgen进行自动布局布线库设计 (29)第六章版图设计及其验证 (31)6.1 版图设计大师Virtuoso Layout Editor (31)6.1.1 设置 (31)6.1.2 启动 (31)6.1.3 用户界面及使用方法 (31)6.1.4 使用示例 (32)6.1.5 相关在线帮助文档 (32)6.2 版图验证工具Dracula (32)6.2.1 Dracula使用介绍 (32)6.2.2 相关在线帮助文档 (33)第七章skill语言程序设计.................... 错误!未定义书签。

cadence SKILL functions quick reference说明书

cadence SKILL functions quick reference说明书

6.2. A Quick Tour of SKILL® ProgrammingSKILL is the extension language for Cadence™ tools. With the extension capability, designers can readily add new capabilities with complex built-in functions to Cadence design tool suite. The power of SKILL is derived from these large libraries of subroutine calls to manipulate design data structures like nets, instances, cells, etc... Without these built-in routines, SKILL probably would not achieve its dominant role as it plays today in the EDA (Electronic Design Automation) for custom circuit area. The "Cadence SKILL Functions Quick Reference" is a very comprehensive manual with about 500 pages full built-in SKILL commands, and it is still growing (i.e. extendibility capability) every day. Luckily, most of us need to know only a handful of SKILL commands to be able to start exploring around.If you are proficient in other scripting languages and you plan for a "quick" pickup and run with SKILL language just like picking up one more programming language to deal with, you will get a little jolt unless you have prior experience with LISP programming language or one of its derivative dialects like Scheme. Even though the author was proficient other scripting languages before plunging into SKILL, it took the author a while longer to learn how to "tame" the basics of SKILL syntax, compared to absorbing other languages.Using SKILL in practical application would involve handling the Cadence database (CDB) or OpenAccess (OA) design structure. This would require an extra step of learning process, especially understanding the Cadence® Design Framework II Tech DB CellView Information Model. This section will discuss the basics of SKILL programming only and does not involve in any database. Its goal is to get the novice reader familiar with the foundations of SKILL syntax before plunging into the real applications in the regular SKILL chapters.As a scritping language, SKILL can also be used as a Shell language like the Unix Bash or C shells. As a shell language, you can run SKILL shell in batch or interactive mode. To run SKILL in interactive mode from a Unix/Linux terminal:Unix> .....installed cadence path...../tools/dfII/bin/skillYou can also launch and execute SKILL commands from Bash scripts or other shell scripts. To run SKILL shell in batch mode, the first line of the SKILL script must start with a #! directive:#!.....installed cadence path...../tools/dfII/bin/skillFirst, you need to know the base directory where the Cadence software is installed. The SKILL executable binary should be in (Cadence installed directory)/tools/dfII/bin/skill. Ask your system administrator about the Cadence installed directory. Or if you happen to be able to logon to Cadence, you can execute command "getInstallPath" at the CIW (Command Interpreter Window or Cadence Interface Window as some would call) to tell youwhere the base Cadence install full pathname is located.z ciw> getInstallPath()This chapter is to introduce to the novice readers the "pure" SKILL programming. Pure SKILL is the virgin SKILL code with no (DB) database access or other enhancement goodies that turn raw SKILL into a powerful in IC design tool environment that most IC designers are familiar with.We will go over the basic command constructs of SKILL scripting language. All examples in this chapter do not involve any database access or library setup. A good way to get a feel of the power of any programming language is to dive in and explore the data structure of that programming language. Since SKILL is originated from LISP (i.e. LIS t P rocessing or LISt Programming), we will have many problems dealing with the SKILL list data structure and its manipulation.6.2.1 SKILL: Interactive shell commands at a glanceThis session is to provide sample SKILL commands so the readers can get the feel of the SKILL programming environment. The task is to let the readers get familiar with the SKILL code syntax. If you get problem understanding the code snippets, don't worry. Keep on reading and come back later. We also attach some one-liner code snippets of other scripting languages (Perl, Ruby, Python) at the end of some examples. This is for command-to-command reference purpose if you know one the common scripting languages. If you have previously exposed to Scheme or LISP, you will see that many SKILL command constructs are similar to Scheme or LISP.Once you try and execute the commands below successfully, you can grab and save the commands into a file for later execution. You execute these below commands in CIW window or at SKILL shell window. To run SKILL on shell window, read section 6.2.7 for more information.Depending on your style, you have the choice to put parentheses "inside" or "outside" the command construct. For example, the three below commands are equivalent with various placements of parentheses.z for( i 1 3 print( x ) )z for( i 1 3 ( print x ) )z( for i 1 3 ( print x ) )If after you enter the command and see no response from the system, the system may be still waiting for you to enter more commands. Try to hit symbol "]" (i.e. super right parenthesis) to close all parentheses to see if that fixes the problem.unix> skill#invoke SKILL interactive mode>#SKILL prompt in interactive mode> 8 * 11.1#arithmetic: (8 * 11.1)88.8 #x=let((a b) a=4 b=6 a-b)> a=5 b=6#assign variable: x={a=5 b=6 a+b}> print a+b#add variable: (print a+b)11* Perl: $a=5; $b=6; print $a+$b* Ruby: a=5; b=6; print a+b* Python: a=5; b=6; print a+b* Tcl: set a 5 ; set b 6 ; puts [expr $a + $b]--1-- for loop> for( i 1 3 printf("%5.2f\n" i*1.1 ))# for( .. )> ( for i 1 3 printf("%5.2f\n" i*1.1 ))# (for .. )> ( for i 1 3 (printf "%5.2f\n" i*1.1 ))# (for .. (..) )1.102.203.30*Perl: for ($i=1; $i<=3; $i++) { printf("%5.2f\n", $i*1.1 )}*ruby: 1.upto(3) { |i| printf("%5.2f\n", i*1.1 )}*Python: for i in range(1,4): print "%5.2f\n" %(i*1.1),*Tcl:for{set i 1}{$i<=3}{incr i}{puts[format"%5.2f"[expr $i*1.1]]} --2-- foreach looping with immediate items with list(. . .)> foreach(i list("the" "cad") print(upperCase(i)) ) "THE" "CAD"*Perl: foreach $i ("the","cad") {print uc($i) }*Ruby: ["the","cad"].each { |i| print i.upcase }*Python: for i in ("the","cad"): print i.upper()*Tcl: foreach i [list the cad] {puts [string toupper $i]}--3-- foreach looping with immediate items with list `( . . .)> n=0 foreach(i `(0 1 2 3) n=n+i printf("%L %L\n" i n ) )0 01 12 33 6*Perl: foreach $i qw(0 1 2 3) {$n+=$i;printf("%s %s\n", $i,$n)}*Ruby: n=0 ; [0,1,2,3].each { |i| n+=i ;printf("%d %d\n", i,n )}*Python: n=0 ; for i in [0,1,2,3]: n+=i ;print "%d %d" %(i,n)*Tcl: set n {0}; foreach i [list 0 1 2 3] {incr n $i ;puts "$i $n"} --4-- Looping a list> x=list("THE" "CAD")> for(i 0 length(x)-1 printf("%L \n" lowerCase(nth(i x)) i ) ) "the" 0"cad" 1*Perl: for($i=0;$i<=$#x;$i++) {printf("%s\n",lc($x[$i]))}*Ruby: x.each_with_index do |y,i| printf("%s\n",x[i].downcase) end *Python: for i,y in enumerate(x): print "%s" %(x[i].lower())*Tcl:for {set i 0}{$i < [llength $x]}{incr i} {* puts [format "%s" [string tolower [lindex $x $i]]]}--5-- when> x=5 when( 9 > x print("Larger than") print(x) )"Larger than" 5* Perl: $x=5; if (9 > $x) {print "larger than $x" }* Ruby: x=5; if 9 > x then print "larger than #{x}" end* Python: x=5; if 9 > x : print "larger than %s" %(x)* Tcl: set x {5}; if { 9 > $x } { puts "larger than $x"}--6-- if then else> x=5 if( x > 9 then print("High") else print("Low") )> x=5 (if x > 9 print("High") print("Low") )"Low"* Perl: $x=5; if ($x > 9) {print "high"} else {print "low"}* Ruby: x=5; if x > 5 then print "high" else print "low" end* Python: x=5; if x>9: print "high";else: print "low"* Tcl: set x {5}; if {$x>9} {puts "high"} else {puts "low"}--7-- Set default if variable not declared> if( !boundp('x) x=5 )> when( !boundp('x) x=5 )> boundp('x) || (x=5)> unless( boundp('x) x=5 )5* Perl: $y=7 if !defined $y* Ruby: y=7 if y==nil* Python: try: y; except NameError: y=7--8-- Substring & strcatciw> strcat( substring( "conne ction" 1 5) "CTION" ) conneCTION* Perl: print substr("connection",0,5) . "CTION"* Ruby: x="connection"; print x[0:5] + "CTION"* Python: x="connection"; print x[0:5] + "CTION"* Tcl: set y [string range "connection" 0 4]CTION; puts $y--9-- foreach( mapcar ...) to return the corresponding results x=foreach( mapcar i '(1 2 3 4) i*i ) ) print x(1 4 9 16)* Perl: @x=map { $_*$_ } qw(1 2 3 4);* Ruby: x=[1,2,3,4].map do |y| y*y end* Python: x=[i*i for i in [1,2,3,4]]--10-- no mapcar; no change; return original elementsy=foreach(i '(1 2 3 4) i*i ) print y(1 2 3 4)* Perl: @x=grep { $_*$_ } qw(1 2 3 4);--11-- setof to filter out elementssetof( i '( 1 2 3 4 5 6 7 8 9) ( i > 3 && i <= 7 )(4 5 6 7)* Perl: grep { $_ > 3 && $_ <= 7 } 1..9* Ruby: print (1..9).to_a.find_all { |x| x > 3 && x <=7 }* Python: print [x for x in range(1,10,1) if x > 3 and x <= 7 ]--12-- substitute "BAD" to "good" in a list> print subst( "good" "BAD" list( "A9" "78" "BAD" "34" ))( "A9" "78" "good" "34" )*Perl: @x=qw(A9 78 BAD 34);print map { s/BAD/good/;$_ } @x;*Ruby:x=%w[A9 78 BAD 34];print x.map{|x| x.to_s.gsub("BAD","good")} *Python: print [y.replace("BAD","good") for y in x]--13-- Change din<2> to din_2> buildString( parseString("din<2>" "<>") "_")din_2*Perl: join( "_", split("[<>]","din<2>") )*Ruby: print "din<2>".split(/[<>]/).join("_")*Python: print "_".join(pile(r"[<>]+").split("din<2>"))--14-- Change in<2> to in_2_ with rexCompile/rexReplace> rexCompile("[<>]") print rexReplace("in<2> "_" 0)in_2_* Perl: s/[<>]/_/g* Ruby: print "din<2>".gsub!(/[<>]/,"_")* Python: print re.sub(r"[<>]","_","din<2>")--15-- rexMatchList to filter out elements from a list> print rexMatchList("^[A-D][0-9]$" list( "A9" "B32" "D2"))("A9" "d2")*Perl: print grep { /^[A-D][0-9]$/ } qw( A9 B32 D2) ;*Ruby: print ["A9","B32","D2"].grep(/^[A-Z][0-9]$/)*Python:[i for i in["A9","B32","D2"]if re.search(r"^[A-Z][0-9]$",i)]--16-- System call to execute Perl script to convert <..> to [..] unix> cat f1din<2>ciw> system( strcat( "perl -pe 's/</[/;s/>/]/' f1 > f2" ) )unix> cat f2din[2]* Perl -pe 's/</[/;s/>/]/' f1 > f2* Ruby -pe 'gsub!("<","[").gsub!(">","]")' f1 > f2* Python: fh=open("f2","w"); for i in open("f1"):* fh.write(i.replace("<","[").replace(">","]") )--17-- Emulate Unix: " grep hello file_in > file_out "> system( strcat(" grep hello file_in > file_out"))> fhr = infile( "/usr/quan/file_in")> fhw = outfile( "/usr/quan/file_out")> when( fhrwhile( gets( line fhr)if( rexMatchp("hello" line) fprintf( fhw "%s" line )) ) )> close(fhr) close(fhw)*Perl -ne 'print if /hello/' file_in > file_out*Ruby -ne 'print if /hello/' file_in > file_out*Python: fh=open("f2","w") ; for i in open("f1"):* if "hello" in i: fh.write(i.replace("<","[").replace(">","]") ) --18-- Expand bus "din<3:5>" to ( "din[3]" "din[4]" "din[5]")> str="din<3:5>"> f=parseString( str "<:>")> start=evalstring(nth(1 f)))> end =evalstring(nth(2 f)))> for(i 0 abs(start-end)sprintf(newPin "%s[%d]" nth(0 f) start+i )printf("%L \n" newPin))"din[3]""din[4]""din[5]"*Perl: $str="din<3:5>"; @f=split("[<:>]",$str);* for ($i=$f[1];$i<=$f[2];$i++) {printf("%s[%d]\n", $f[0],$i)}*Ruby: str="din<3:5>";f=str.split(/[<:>]/)* f[1].upto(f[2]) { |i| print f[0]+"[#{i}]\n" }*Python: f=pile(r"[<:>]+").split("din<3:5>")* for i in range(int(f[1]),int(f[2])+1): print "%s[%d]" %(f[0],i) --19-- Sort keys in association list (sort options: 'lessp nil)>print sortcar(list( '("A9" 45) '("C43" 56) '("B5" 23)) 'alphalessp) (("A9" 45) ("B5" 23) ("C43" 56))* Perl: %h=(A9=>45, C43=>56, B5=>23);* map { print "\($_=>$h{$_}\) " } sort{$a<=>$b} keys %h;--20-- Sort value in association list> procedure( sortcadr( a b) cadr(a) < cadr(b) )> print sort( list( '("A9" 45) '("C43" 56) '("B5" 23) ) 'sortcadr ) (("B5" 23) ("A9" 45) ("C43" 56))* Perl: %h=(A9=>45, C43=>56, B5=>23);* map { print "\($_=>$h{$_}\) " } sort{$h{$a}<=>$h{$b}} keys %h;--21-- cond> x=-5cond( ( (x<=0) x=abs(x) )( t x=x+2 ))5* Perl: switch: {$x<0 && do {$x=abs($x);last switch};do {$x+=2}}* Ruby: x=-5; case x ; when -10..2,1,0: x=x.abs; else x=x-2;end* Python: no case statement. use "if-then-else" or "try".> x=5 cond( ((x<=0) x=abs(x)) (t x=x+2) )7* Perl: switch: {if ($x < 0) {$x=abs($x);last}; $x+=2 }--22-- rplaca to replace the first element; replace "a" with "xx" rplaca( '( a b c d) "xx") => '( "xx" b c d)* Perl: @a=qw(a b c d); splice(@a,0,1,"xx");--23-- rplacd to replace the rest of the list, except first element rplacd( '( a b c d) list("xx") ) => '( a "xx")* Perl: @a=qw(a b c d); splice(@a,1,$#a,"xx");--24-- Get Cadence install directory name> getInstallpath()("/project/vendors/tools/cadence/IC5141ISR0106/tools.sun4v/dfII") --25-- setInstallPath> setInstallPath(append( list("/usr/quan") getInstallPath() )--26-- Get executable SKILL path> getSkillPath()("." "~" "/local/skill/codes")--27-- setSkillPath to set executable PATH for SKILL programs> setSkillPath( cons( "/usr/quan" getSkillPath() )--28-- Get Cadence install directory name with getShellEnvVar> getShellEnvVar("CDS_INST_DIR")("/project/vendors/tools/cadence/IC5141ISR0106")--29-- Get full-path filename of where icfb is invoked> simplifyFilename(getWorkingDir())"/usr/quan"--30-- alias> alias(lf listFunctions)> alias(h help)> lf("ToString")# list all cmds with ToString intToString timeToString--31-- help> help("stringToSymbol")stringToSymbol(t_string)=> s_symbolNameConverts a string to a symbol of the same name.--32-- procedure> procedure( add( x y )x+y)> add( 5 6)11--33-- define> ( define mult( x y )( x*y ))> ( mult 5 6 )30--34-- loadunix> cat mySKill.ilprint "Hello, the World"alias(lf listFunctions)ciw> load("mySkill.il")"Hello, the World"--35-- List Addressing> car( '(a b c d e )) ; return 1st item => a> cdr( '(a b c d e )) ; return rest of list => '(b c d e) > car(cdr('(a b c d e)) ; return 2nd item => b> nth( 2 '(a b c d e)) ; return 2nd item => b> cons( 9 '(b c d )) ; insert into a list => '(9 b c d)> cons( 'a '(b c d )) ; insert into a list => '(a b c d)> cons( '(b c d) '(a) ) ; insert into a list => '((b c d) a) > append( list(a b) '(c d) ) ; merge lists => '( a b c d) > listA= cons( car(listA) cdr(listA)。

Cadence_Skill_语法详解(中文)要点

Cadence_Skill_语法详解(中文)要点

Cadence_Skill_语法详解(中文)要点常量、变量常量是它的值等于自身的表达式,如123,”abc”…变量是保存了其它值的表达式,如x=3, x即变量。

算术与逻辑操作符函数名语法对应操作符Data Accessarrayref a[index] [ ] setarray a[index] = exprbitfield1 x <> setqbitfield1 x=exprsetqbitfield x=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<="" 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 =对于既有函数名又有操作符函数,采用函数名调用和采用操作符调用的效果是一样的。

cadence_skil

cadence_skil

cadence_skilBR 6/001SKILL –Cadence Extension LanguageSKILL is powerful extension language that can be used to add new capabilities to Cadence toolsSKILL is based upon LISP, will look very strange if you are not already familiar with LISP –LISP is a interpreted language that is popular among the AI community–LISP has a built-in eval function that can be used to execute LISP code that is dynamically generated–The basic data structure in LISP is the list, with many built-in functions for manipulaing list data structures–SKILL also supports a syntax form that is more ‘Pascal’-likeThe key to SKILL’s power is a large set of library functions that allow you to manipulate data structures such as cells, nets, mask information, etc.BR 6/002To Get Help On SkillTo get help on SKILL, click on the Help menu from within the Cadence layout editor, then on “Openbook Main Menu ”. Choose the ‘SKILL and SKILL PI to open the Skill documentation.Herefirst,ThenhereA Sample SKILL FunctionThis SKILL function will create a padframe with X numberof pads per side:procedure(placePadFrame(@optional no_pads)(if(null no_pads)then(setq no_pads(enterNumber?prompts'("Please enter the number of pads on a side"))))(setq xpointh291)(setq ypointh201)(setq xpointv201)(setq ypointv291)(for i1no_pads(dbCreateInst(getEditRep)(dbOpenCellViewByType"tutorial" "PADNC""layout")nil(list xpointh ypointh)"R180") (dbCreateInst(getEditRep)(dbOpenCellViewByType"tutorial" "PADNC""layout")nil(list xpointh-90ypointh+no_pads*90)"R0") (setq xpointh xpointh+90))BR 6/003SKILL function (cont)(for i1no_pads(dbCreateInst(getEditRep)(dbOpenCellViewByType"tutorial" "PADNC""layout")nil(list xpointv ypointv-90)"R90") (dbCreateInst(getEditRep)(dbOpenCellViewByType"tutorial" "PADNC""layout")nil(list xpointv+no_pads*90ypointv)"R270") (setq ypointv ypointv+90))(dbCreateInst(getEditRep)(dbOpenCellViewByType"tutorial""PADFC" "layout")nil(list xpointv-300ypointv-90)"R0") (dbCreateInst(getEditRep)(dbOpenCellViewByType"tutorial""PADFC" "layout")nil(list xpointh-90ypointv+210)"R270") (dbCreateInst(getEditRep)(dbOpenCellViewByType"tutorial""PADFC" "layout")nil(list xpointh+210201)"R180") (dbCreateInst(getEditRep)(dbOpenCellViewByType"tutorial""PADFC" "layout")nil(list201-99)"R90"))BR 6/004BR 6/005Comments on SKILL functionContained in file called ‘pads.il’–To load function, in icfb command line type “load pads.il”–To execute function, have a layout view open and type “placePadFrame 10” if you want 10 pads per sideUses the dbCreateInst function for instance creation–Documented in DFII SKILL Functions ReferenceFunction parameters are:–d_cellview -cellview where instance is placed–d_master –master cell view of the instance to be created–t_name –instance name. If ‘nil’ is used, then generate an instance name –l_point –origin of new instance as 2-element list –orientation of new instance as a string, some possible strings are “R0”, “R90”, “R180”, “R270”BR 6/006dbCreateInstThe function getEditRep was used to return the currently open cell viewThe function dbOpenCellViewByType was used to specify the master view of the instance to be placed.–The minimum set of parameters to dbOpenCellViewByType arelibrary_name, cell_name, view_name–See docs for other optional parametersThe list function used to create a list required to pass instance origin–(list first_elem second_elem .. N_elem)returns a N-element listCreating an Rows x Cols Array of Instances procedure(placeArray(@optional cols rows cellname x_width y_height) (setq ypnt0)(for i1rows(setq xpnt0)(for j1cols(dbCreateInst(getEditRep)(dbOpenCellViewByType"tutorial" cellname"layout")nil(list xpnt ypnt)"R0") (setq xpnt xpnt+x_width))(setq ypnt ypnt+y_height)))Tested with standard cell instance via:placeArray 20 4 “INVX1” 4.8 21.6BR 6/007 placeArray20 4 “INVX1” 4.8 21.6BR 6/008。

cil语言定义变量,[转载]Skill语言入门

cil语言定义变量,[转载]Skill语言入门

cil语言定义变量,[转载]Skill语言入门第一章SKILL 语言基础1.1 SKILL 语言简介SKILL 是用于Cadence 软件二次开发的语言。

我们关于SKILL 的介绍基于SKILL 语言参考档和AllegroSKILL的应用。

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的变量定义比较随便,不需要指定其类型,赋什么类型的值就是什么类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常量、变量常量是它的值等于自身的表达式,如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=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 =对于既有函数名又有操作符函数,采用函数名调用和采用操作符调用的效果是一样的。

示例lessp(3 1)=>nil 等同于3<1=>nil预定义算术函数语法结果通用函数add1(n) n + 1sub1(n) n – 1abs(n) 绝对值exp(n) 自然对数的n次方log(n)max(n1 n2 ...)min(n1 n2 ...)mod(x1 x2) 取模运算round(n)sqrt(n)sxtd(x w) 将x右扩展W个符号位zxtd(x w) 和上面的功能相同,速度更快三角函数sin(n),cos(n),tan(n)asin(n),acos(n),atan(n)随机数生成函数random(x) 产生0~x-1的随机数srandom(x) 初始化随机数生成函数的x位操作含义操作符位与&位或|位异或^左移位>>右移位<<取反~真值、假值真值,除了nil以为的值都是真值。

假值,nil条件控制函数if, when, unless, condifif函数的语法结构if( condition1 then ;当condition1为真值时执行代码块expAexpAelseif( condition2 then ;当condition2为真值时执行代码块expBexpBelse…expC));end ifwhenwhen函数语法结构when( condition ;当condition为真值时执行代码块expA,否则跳过expA); end whenunlessunless语法结构unless( condition ;当condition为假值时执行代码块expA,否则跳过expA); end unlesscondcond语法结构cond (( condition1 expA... ) ;当condition1为真值时执行代码块expA( condition2 expB ... ) ;…( condition3 expC ... ) ;…( t expN ) ;之前的条件都不满足时默认执行expN ); end cond[注]:";" 表示注释循环控制函数while,for,foreachwhilewhile语法结构while( condition is true ;当condition为真值时反复执行代码块expA,否则结束循环expA)forfor语法结构for( i 1 5println(i))将输出12345foreachforeach是简化版的for,上面的例子用foreach写如下alist = ,(1 2 3 4 5)foreach( item alistprintln( item ))foreach通常用于操作列表,因为它会遍历列表的每一个元素。

选择函数caseq的用法类似cond,功能也类似。

caseq( var(condition1 expA)(condition2 expB)…) ;case语法结构循环结构中的局部变量使用关键字prog可以在循环结构中定义局部变量。

关于prog的详细介绍请参考函数章节。

返回函数表示返回值的关键字是return。

return可以强制一个prog结构立即结束,送出返回值,忽略剩余的循环操作。

示例prog( ( )for( i 0 10when( oddp( i )return( i )) ; when) ; for) ; prog这个for循环不会运行10次,首次oddp(i)为真值的时候循环就会结束。

正则表达式在很多的skill应用中都会用到正则表达式,比如在一个字符串数组中查找带有关键字user 的字符串。

示例:lStr = '("hello" "whenuser" "usercome" "ffus er" "ppuserd" "uster");lRes = nilforeach( item lStrif( rexMatchp("user" item) thenlRes = cons( item lRes)println(item)))输出:"whenuser" "usercome" "ppuserd"lRes =>("ppuserd" "usercome" "whenuser").这里的关键命令是rexMatchp,函数形式为rexMatchp(t_pattern S_target),这个命令将在第二个参数中查找满足第一个参数(模式)的条件,如果找到返回真值,否则返回假值。

正则表达式(pattern)的组成字符语法含义c 匹配任意非特殊字符. 匹配任意字符\ 用在特殊字符前面代表特殊字符本身,用在<, >, (, ), and 1,...,9, 的含义在下面描述[c...] 一对方括号中包含一些字符将匹配括号中的任意一个字符,如果第一个字符是^ 则表示不匹配括号中的所有字符,[a-z]表示匹配a到z之间的任一字符,"-”表示范围。

* 用在一个以上描述的字符或pattern后表示匹配该字符或pattern0次或多次。

+ 类似*,区别在于匹配至少一次\(..\) 如果包含在这个符号中的字符串匹配上了,被匹配的字符可以被提取出来(最多支持9中匹配)\n 和上一个符号对应,反斜杠后跟一个数字将可以提前到上一个符合保留的字符串\<...\> 这个符号表示完全匹配一个字符串的开始和结尾rs 2个正则表达式的组合将尽可能多的匹配r并匹配一个s^, $ ^表示字符串的开始,$表示字符串的结尾常用正则匹配函数rexCompile,rexExecute,rexMatchp,rexSubstitute 示例: 使用rexCompile和rexExecute实现开头的示例lStr = '("hello" "whenuser" "usercome" "ffus er" "ppuserd" "uster");lRes = nilrexCompile("user")foreach( item lStrif( rexExecute(item) thenlRes = cons( item lRes)println(item)))将得到和前一个示例一样的结果。

示例: 使用rexSubstitute提取字符,在给定格式的列表中提取symbol名字和对应的坐标lStr = list("C17x855.00y-2790.00" "C676x3499.50y-2676.40""Q690x3406.00y-2701.00" “C666x3535.00y-3135.00”“C785x1929.00y-3750.00”“U628x3865.00y-2025.00”“C737x3010.00y-3155.00”“R754x2770.00y-2730.00”) rexCompile( "\\([A-Z]+[0-9]+\\)x\\([0-9.-]+\\)y\\([0-9.-]+\\)") ; \\(...\\) 结构表示匹配的部分将可以用\\1..9提取出来; [A-Z]表示匹配A~Z的字符,+表示至少有一个这样的字符foreach( item lStrwhen( rexExecute( item )str1 = rexSubstitute( "\\1" )str2 = rexSubstitute( "\\2" )str3 = rexSubstitute( "\\3" )printf("%s<->%s<->%s\n" str1 str2 str3) ));将输出:C17<->855.00<->-2790.00C676<->3499.50<->-2676.40Q690<->3406.00<->-2701.00C785<->1929.00<->-3750.00U628<->3865.00<->-2025.00C737<->3010.00<->-3155.00R754<->2770.00<->-2730.00更多示例,参考Skill正则表达式应用举例Skill正则表达式应用举例处理Dangling Line Reportallegro的report命令在report dangling line的时候也会同时report dangling via 出来。

相关文档
最新文档