Cadence Skill程序实例解析

EDA软件 0 1204 佚名 收藏

下面以一个PutOnGrid.il的实例,来具体分析一个Skill程序,这个程序是用来把不在格点上的图形,移到格点上,这里对每段代码都作了详细的解释,大家可以作个参考。

/*******这里是多行注释开始标志,程序的开始一般写上一些介绍的信息,结束为******/

/* 我们画45度的path线时,中心线的点在格点上,拐角处图形肯定不在格点上,本程序是通过把path转换成polygon,再对polygon的点做处理,CIW中load此程序,选中off grid图形,运行PutOnGrid(Grid), Grid工艺规定的最小格点,如0.005 */

;这里是单行注释,到行尾

;定义OnGrid函数

procedure( OnGrid( Point ) ;用procedure定义函数OnGrid
    if( listp(Point) then
        ;如果Point是list的话,对list的每个元素递归重复OnGrid()函数,
        ;lambda定义一个没有函数名的函数
        ;mapcar函数用来根据一定的函数转换一个list,这里用递归的方法保留原来list的结构
        ;如’((1.2 2.6) (3.3 4.8)),如果Grid=0.5,则结果为’((1.0 2.5) (3.5 5.0))
        mapcar( lambda( (x) OnGrid(x) ) Point)
    else
        ;如果是一个数字的话,则通过Point/Grid取整,然后再乘以Grid,使图形的每个点移到格点上
        round((Point/Grid))*Grid
    );if then … else 语句结束
);procedure

;定义PutOnGrid函数

procedure( PutOnGrid( Grid )
let((SelectObj ) ;定义局部变量
SelectObj = geGetSelSet() ;版图中选定图形的函数,返回包含所有选中图形信息的一个list
foreach( Object SelectObj ;循环对每个选定的图形操作
    cond(
        (Object~>objType == "path" ;判定图形的类型是不是path
            Polygon = leConvertShapeToPolygon(Object) ;path转成polygon
            ;Polygon对应的points属性(是一个list)中每个元素通过OnGrid函数移动到格点上,
            ;然后把转换后的list重新赋给Polygon~>points属性
            Polygon~>points = OnGrid(Polygon~>points)
           )
        (Object~>objType == "polygon" ;判定图形的类型是不是polygon
            Object~>points = OnGrid(Object~>points)
           )
        (Object~>objType == "rect" ;判定图形的类型是不是rect
            ;需要改变的是rect的bBox属性(这里和polygon的points不同)
            Object~>bBox = OnGrid(Object~>bBox)
           )
        (Object~>objType=="inst" || Object~>objType=="mosaic"
            ;判定图形的类型是不是inst/mosaic,这里改变的是inst/mosaic的xy坐标
            Object~>xy = OnGrid(Object~>xy)
           )
    );cond ;你可以加上其他的情况
);foreach
);let
);procedure加上关键词结尾的注释是个良好的习惯


程序的主要代码就是上面的这些,如果你还想要更方便的图形界面方式,一个快捷键就可以操作的话,可以参考Cadence User Interface中的Form相关的内容。


相关推荐:

网友留言:

您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码