CadenceSkill语言简介
- 格式:docx
- 大小:23.95 KB
- 文档页数:6
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)所在⽬录。
1.Allegro PCB Design CISAllegro PCB Design CISAllegro Designer Entry CIS集成强大的原理图设计功能,其特点主要是具有快捷的元件信息管理系统(CIS),并具有通用PCB设计入口。
扩展的CIS功能可以方便地访问本地元件优选数据库和元件信息。
通过减少重新搜索元件信息或重复建库,手动输入元件信息,维护元件数据的时间,从而可以提高生产率。
无论是设计全新的模拟,数字,或混合信号电路,还是修改现有电路板的电路原理图,或进行层次结构电路图设计,Allegro Designer Entry CIS提供电路设计从构思到生产所需的一切。
Allegro Designer Entry CIS是全球应用最多且经过生产验证的原理图输入工具和强大的元件信息管理系统。
优点1、提供快捷,直观的,具备完备功能的原理图编辑工具2、通过层次式和变体(基于同一原理图,不同机型导出)设计提高复杂原理图的设计效率3、具备强大功能的CIS,帮助加速设计进程,降低项目成本4、原理图提供的自动缩放/搜索/导航功能,结合Allegro PCB Editor之间的交互探测和交互摆放,和集成的AMS—Simulatuor帮助提供设计的可生产性5、减少重复搜寻元件信息的时间,接收来自MRP,ERP和PLM的数据和支持关系型数据库使智能选择元件成为可能6、通过直接访问ActiveParts和ActiveParts门户网站,提供给选择原理图设计所需要的元件和直接获取器件供应商元件数据更大的便利,ActiveParts提供了超过200万份的元器件数据7、通过FPGA输出/输入双向数据流程自动整合可编程门阵列(FPGA)和可编程逻辑器件(PLD),从而缩短设计时间功能特色全功能原理图编辑器Allegro Designer Entry CIS,带有拼接式和层次式的原理图页面编辑器,它具有快捷、直观的原理图编辑的特点。
常量、变量常量是它的值等于自身的表达式,如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 =对于既有函数名又有操作符函数,采用函数名调用和采用操作符调用的效果是一样的。
1.Allegro PCB Design CISAllegro PCB Design CISAllegro Designer Entry CIS集成强大的原理图设计功能,其特点主要是具有快捷的元件信息管理系统(CIS),并具有通用PCB设计入口。
扩展的CIS功能可以方便地访问本地元件优选数据库和元件信息。
通过减少重新搜索元件信息或重复建库,手动输入元件信息,维护元件数据的时间,从而可以提高生产率。
无论是设计全新的模拟,数字,或混合信号电路,还是修改现有电路板的电路原理图,或进行层次结构电路图设计,Allegro Designer Entry CIS 提供电路设计从构思到生产所需的一切.Allegro Designer Entry CIS是全球应用最多且经过生产验证的原理图输入工具和强大的元件信息管理系统。
优点1、提供快捷,直观的,具备完备功能的原理图编辑工具2、通过层次式和变体(基于同一原理图,不同机型导出)设计提高复杂原理图的设计效率3、具备强大功能的CIS,帮助加速设计进程,降低项目成本4、原理图提供的自动缩放/搜索/导航功能,结合Allegro PCB Editor之间的交互探测和交互摆放,和集成的AMS—Simulatuor帮助提供设计的可生产性5、减少重复搜寻元件信息的时间,接收来自MRP,ERP和PLM的数据和支持关系型数据库使智能选择元件成为可能6、通过直接访问ActiveParts和ActiveParts门户网站,提供给选择原理图设计所需要的元件和直接获取器件供应商元件数据更大的便利,ActiveParts提供了超过200万份的元器件数据7、通过FPGA输出/输入双向数据流程自动整合可编程门阵列(FPGA)和可编程逻辑器件(PLD),从而缩短设计时间功能特色全功能原理图编辑器Allegro Designer Entry CIS,带有拼接式和层次式的原理图页面编辑器,它具有快捷、直观的原理图编辑的特点。
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_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。
第1章Cadence系统简介1.1 Cadence系统概述1.1.1博大精深的Cadence系统Cadence系统是一个大型的EDA软件,它几乎可以完成电子设计的方方面面,包括ASIC设计、FPGA设计和PCB板设计。
与另一EDA软件Synopsys相比,Cadence的综合工具略为逊色。
然而,Cadence在仿真、电路图设计、自动布局布线、版图设计及验证等方面却有着绝对的优势。
Cadence与Synopsys的结合可以说是EDA设计领域的黄金搭档。
此外,Cadence公司还开发了自己的编程语言skill,并为其编写了编译器。
由于skill语言提供编程接口甚至与C语言的接口,故而可以Cadence为平台进行扩展,用户还可以开发自己的基于Cadence 的工具。
实际上,整个Cadence软件可以理解为一个搭建在skill语言平台上的可执行文件集。
所有的Cadence工具都是用Skill语言编写的,但同时由于Cadence 的工具太多而显得有点凌乱。
这给初学者带来了更多的麻烦。
Cadence包含的工具较多,包括了EDA设计的各个方面。
本讲义旨在介绍Cadence的入门知识,所以不可能面面具到,只能根据ASIC设计流程,介绍ASIC 设计者常用的一些工具,例如仿真工具Verilog-XL,布局布线工具Preview和Silicon Ensemble,电路图设计工具Composer,电路模拟工具Analog Artist,版图设计工具Virtuoso Layout Editor,版图验证工具Diva与Dracula,最后简单介绍一下Skill语言的编程。
Cadence特点:1.全球最大的EDA公司2.提供系统级至版图级的全线解决方案3.系统庞杂,工具众多,不易入手4.除综合外,在系统设计,在前端设计输入和仿真,自动布局布线,版图设计和验证等领域居行业领先地位5.具有广泛的应用支持6.电子设计工程师必须掌握的工具之一Cadence功能:1.系统级设计:System-Level Design2.功能验证:Function Verification3.仿真:Simulation4.综合:Synthesis5.布局布线:Place-and-Route6.模拟、射频、混合信号设计:Analog,RF,and Mixed-Signal Design7.物理验证与分析:Physical Verification and Analysis8.打包:IC Packaging9.PCB设计:PCB DesignIC设计工具排行榜:1.VHDL仿真:Cadence→IKOS→Vantage→Synopsys2.行为综合:Synopsys→Alta3.逻辑综合:Synopsys→Compass→Mentor Graphics4.可测性设计:Synopsys→Sunrise→Compass5.低功耗设计:Synopsys→Epic6.布局布线:Cadence→Avant!→Mentor Graphics7.后仿真:Synopsys→Cadence→Compass→IKOS→Vantage1.1.2ASIC设计流程图1.1 ASIC典型设计流程设计流程是规范设计活动的准则,好的设计流程对于产品的成功至关重要。
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的工具可以通过CIW,Bindkey,Form,Menu等多种方式调用skill函数,送到skill语言的解释器来执行各种操作。
其中CIW(Command Interpreter Window),即启动Icfb的第一个窗口,包含一些常用的menu,一个输入行,以及一个输出区域,这里是常用的debug skill程序的地方,当然cadence也提供了Tools->Skill Development,有兴趣的话可以深入研究一下2.1 Skill函数的查阅方法Skill语言有n多函数,加上众多工具的接口函数,可以用成千上万来形容,初学者可能会感到晕头转向,无从下手。
其实只要了解基本的变量,控制语句,输入输出以及一些常用工具的基本函数就可以了,大多数函数都可以用到再查阅。
开始学习skill时可以仔细看看SKILL Language User Guide,其他的可以用到时再查阅,这里列出几个经常会用到的文档:SKILL Language Reference -Skill语言相关的函数,Cadence User Interface SKILL Functions Reference -Cadence应用程序图形界面接口函数,Design Framework II SKILL Functions Reference,SKILL Custom Layout Reference,SKILL Schematic Composer Reference分别是Cadence的Design Framework II,版图,电路的接口函数。
当然还有其他众多工具的接口函数,因此Skill需要方便的函数查阅方法,这里列出3种:1.最简单的方法,看~/CDS.log文件或者CIW的输出区域,把Options-> LogFilter都选上。
这里一般可以查阅在图形界面下运行的函数,如图,我们可以看到画path线的函数以及输出结果等2.在CIW里输入命令startFinder,或者在Terminal上输入cdsFinder& . Finder 适用于至少知道函数名的一部分,这里可以查到函数的用法简介。
例如上图我们看到画path的函数是leHiCreatePath(),但这是图形方式的函数,对应skill方式的函数呢用法呢,可以在Finder中输入CreatePath,这样我们就可以看到包含有CreatePath 的所有函数,如图,leCreatePath即是我们想找的函数,这里可以看到简单的用法介绍3.上面我们查到的关于函数用法的介绍很简单,如何知道其详细介绍呢。
当然如果你知道函数在那个文档里,直接打开就行了,如果不知道,就需要打开help的search功能,这里可以查到详细的功能用法。
运行cdsdoc&, 点击Search打开Cadence help的搜索功能,工具会自动启动一个http服务,同时打开搜索网页,启动服务后,你也可以在windows的IE里输入http://hostname:9000/search.htm,同样可以打开搜索页面,需要注意的是,在C:\WINNT\system32\drivers\etc\hosts文件中需要加入hostname对应的ip,如:127.0.0.1 localhost10.0.10.2 host1Cadence help的搜索功能默认是用Netscape打开搜索网页,如果没有装Netscape,可能会打不开网页。
可以先打开firefox,mozila等浏览器,再启动cadence doc搜索http服务,这样就可以打开搜索网页了3. Skill语言简介Skill语言的很多地方和C语言差不多,如变量,函数,控制结构,输入输出等,详细的介绍可以参考User Guide,这里只作简单介绍。
3.1. Skill的变量不需要事先声明,Skill第一次用到是会自动生成变量。
变量可以由字符、数字、“_” 和“?” 组成,注意第一个字符不能是数字和”?”。
由于Cadence所开发的Skill中的变量、函数都是第一个字母小写,以_为开头的是Cadence的专用函数,为了避免冲突,建议大家函数和变量命名都以大写字母开头。
3.2. Skill的函数的调用方式有三种,strcat( "Hello" "," " everyone" "!" ) ;常见的类C格式( strcat "Hello" "," " everyone" "!" ) ;类Lisp语言的格式strcat "Hello" "," " everyone" "!" ;上面的括号可以省略返回的结果都是=> "Hello, everyone!"推荐使用第一种方式,需要注意的是函数和第一个括号之间没有空格,否则会报错如:strcat ( "Hello" "," " everyone" "!" )=> *Error* eval: not a function - "Hello"这是调用skill函数的一个常见问题,其它的问题还有:a. 软件没响应,比如在CIW中输入段代码,软件没有反映,什么结果也没有,一般是因为( )或者” “不成对造成的,一般可以通过键入] 来解决,它表示补充完不对称的括号(可以代替任意多个右括号),如果还没有响应,键入“] 这时大部分情况下,系统会有响应b. 数据类型不匹配,如:strcat( "Mary had a" 5 )=>*Error* strcat: argument #2 should be either a stringor a symbol (type template = "S") – 53.3. Skill List是Skill基于Lisp(List Processing)语言的表现,它是skill数据对象的一个有序集合,skill数据甚至程序本身都可以看作是一个list,这是C语言中所没有的概念。
下面是skill list的简单例子List Explanation(1 2 3) A list containing the integer constants 1, 2, and 3(1) A list containing the single element 1( ) An empty list (same as the special atom nil)(1 (2 3) 4) A list containing another list as its second elementA). 创建list有以下几种基本的方法:Specify all the elements of the list literally with the single quote ( ‘ ) operator. Specify all the elements as evaluated arguments to the list function.Add an element to an existing list with the cons function.Merge two lists with the append function.1).用' 和list 定义一个list,注意两者的差别a = 1 => 1b = 2 => 2'( a b 3 ) => ( a b 3 )list( a b 3 ) => ( 1 2 3 )2).用cons命令添加一个元素到一个list的头部result = '( 2 3 ) => ( 2 3 )result = cons( 1 result ) => ( 1 2 3 )3).用append命令合并两个listLista = '( 4 5 6 ) => ( 4 5 6 )Listb = '( 1 2 3 ) => ( 1 2 3 )Listc = append( Lista Listb) => ( 4 5 6 1 2 3 )B). 访问list或者list中某些元素的方法:car访问list的第一个元素numbers = '( 1 2 3 ) => ( 1 2 3 )car( numbers ) => 1cdr访问list除了第一个元素外的其他元素,注意返回仍然是个listnumbers = '( 1 2 3 ) => ( 1 2 3 )cdr( numbers ) => ( 2 3 )nth用索引访问list的某个元素,注意索引从0开始numbers = '( 1 2 3 ) => ( 1 2 3 )nth( 1 numbers ) => 2member检查指定的元素是否在指定的list中,它只检查顶层元素的元素,返回值是从搜到值开始到结尾的listnumbers = '( 1 2 3 ) => ( 1 2 3 )member( 4 numbers ) => nilmember( 2 numbers ) => ( 2 3 )length计算list所包含元素的个数numbers = '( 1 2 3 ) => ( 1 2 3 )length( numbers ) => 3C). 关于xy坐标或者bBox边界list的访问在版图设计中,关于坐标的list是最长见的,它是一组2维的list,常见的表示方法有:用: 表示一个坐标的list,其结果和list命令一样,用xCoord和yCoord命令可以访问xy坐标xValue = 300yValue = 400aCoordinate = xValue:yValue => ( 300 400 )xCoord( aCoordinate ) => 300yCoord( aCoordinate ) => 400用list命令和' 来表示一个bBox,list命令先计算变量或者表达式,然后赋给list,' 表示的list和字面的一样,不会计算变量或者表达式的值bBox = list( 300:400 500:450 ) ;含有: 的bBox含有变量用listlowerLeft = 300:400upperRight = 500:450bBox = list( lowerLeft upperRight )' 表示的list严格按字面意思bBox = '(( 300 400 ) ( 500 450 ))。