许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Cadence Skill编程入门指南

Cadence Skill编程入门指南

阅读数 54
点赞 0
article_banner

cadence skill

list

1.创建list:在script中尽量使用list,避免使用**’**

   2.cons添加一个元素到list头部:cons(1 list)

   3.append合并(lista listb)

   4.car访问第一个元素;cdr访问除了第一个元素以外的其他元素;nth访问某个元素;会经常用到:ll-x:caar ;ur-x:caadr; ll-y:cadar; ur-y:cadadr

   5.member检查元素(顶层元素)是否在指定的list中,返回搜索值到结尾的list

   6.length计算元素个数;

   7.bBox=list(-100:-100 100:100);当LF = -100:-100,UR = 100:100时,bBox=list(LF UR) //**即bBox=list((-100 -100) (100 100))

print

1.print(),可以输出到port file;

   2.println(),在显示的数据后多加个换行,可以输出到port file;

   3. printf  (),格式化输出结果. 但不能输出到port file; // %[-][width][.precision]conversion_code.对于precision,d:整数;f:浮点数;s:字符串;

   4.fscanf(file*stream *format [argument]):根据指定的数据格式,从输入流中读取数据,将其存储在argument文件中;

   5.gets(nextline inPort)函数:从input port中读取行,以回车结束读取;//skill的gets()和c语言中的gets()用法不一样

if(),when(),unless()

1.if(…then…else…):if后不能有空格;必须要有then,否则会error;

   2.when:当只有then的表达式时,就选when

   3.

case(),for(),foreach()

1:case(shapeType)函数提供分支选项,一般情况下不单独使用;

   2.foreach(variable list)循环

function skills

1.group statements:用{}的形式,将多个statements汇集到一个statement中.这样的方式和按部就班地写是一样的.以下两段代码的输出结果是一样的.

Boxlist=list(list(100:100 200:300) list(100:110 200:370))
foreach(bBox Boxlist
	bBoxHeight={
		lly=cadar(bBox)
		ury=cadadr(bBox)
		ury-lly
				}
	println(bBoxheight)
		);foreach
Boxlist=list(list(100:100 200:300) list(100:110 200:370))
foreach(bBox Boxlist
	lly=cadar(bBox)
	ury=cadadr(bBox)
	BboxHeight=ury-lly
	println(BboxHeight)
		);foreach

2.用procedure定义函数

   prodedure( function (variable)

   );procedure

Boxlist=list(list(100:100 200:300) list(100:110 200:370))
procedure(bBoxHeight(bBox)
	lly=cadar(bBox)
	ury=cadadr(bBox)
	ury-lly
		  );procedure
foreach(bBox Boxlist
	println(bBoxHeight(bBox))
		);foreach

syntax

1.操作符( operator  

   2.comments: /* and */进行段落 注释 ;在每一行分号后进行注释,一行写不完,用""代表下一行和这一行是一句话.

   3.转义 字符串  

   \n 换行

   \t 横向一个制表位置

   \v 纵向一个制表位置

   \b 退格

   \r 回车

   \f 换页Filter函数

主要应用的函数

  1. setof( s_formalVar l_valueList g_predicateExpression)其中, s_formalVar 变量为局部变量,作用于 g_predicateExpression 表达式中;l_valueList 变量为要过滤的List;g_predicateExpression变量为自定义的过滤表达式。setof函数会把l_valueList中的所有元素赋值给s_formalVar局部变量,并将此变量带入到g_predicateExpression表达式中,如果表达式返回的值为nil,在List中会将此素过滤。
setof( x '(1 2 3 4) (x > 2) ) => (3 4) 
setof( x '(1 2 3 4) (x < 3) ) => (1 2) 
setof( x '( 1 2 3 4 5 6 ) oddp(x)) => ( 1 3 5 ) 

2.ddGetObj():根据给定的lib名导入lib,读取lib信息

   3.deOpenCellView()和dbOpenCellViewByType():分别是定义window和读取cell

   4.leSetLayerSelectable(layername t):使要改动layer使可选状态

   5.geSelectAllFig():如果之前已经读入了cellview,不需要在括号内部填写cellname,默认是当前的cell

   6.leHiSize():在此之前指定sizevalue后,用这个函数可以实现layer size 的改动,但是必须调用window

   7.geSave():保存修改后的结果

   8.leCloseWindow():关闭打开的window

   9.结构体在skill中的用法:

   libID~>cells;将cells这个栏位的值(并不只是cell名字,而是对象)传“回”给libID
   cellname~>views~>name;将views下面的name栏位的值传“回”给cellname
   cellList~>name;将cellList中的name栏位的值传“回”给cellList

10.leSearchHierarchy():用来搜寻指定cell中特定条件的layer,结果是很多的对象(cell中该layer的对象)

layerL=leSearchHierarchy(cellview list(-1000:-1000 1000:1000) 32 "rectangle" list(list("layer" "==" list("CT" "drawing"))));这里的坐标指的是设定一个范围,在这个范围内搜寻;

以下是一段修改layer size大小的代码:

procedure(SizeLayerInLib(libname layername sizevalue)
	libID=ddGetObj(libname);导入lib,读取lib信息
	cellList=nil;预定义一个空的cell list
	foreach(cellname libID~>cells
		if(setof(viewname cellname~>views~>name viewname=="layout")
			then cellList=cons(cellname cellList)
		);end if
	);end foreach 通过不断循环,从lib的所有cell中筛选出有layout的cell
	foreach(cellname cellList~>name
		SizeLayerInCell(libname cellname layername sizevalue);调用对cell做操作的函数
	);end foreach
);end procedure
procedure(SizeLayerInCell(libname cellname layername sizevalue)
	WINDOW_ID=deOpenCellView(libname cellname "layout" "maskLayout" list(0:0 1000:1000) "a");打开1000*1000大小的window
	CELL_VIEW=dbOpenCellViewByType(libname cellname "layout" nil "a");打开一个cellview
	geDeselectAllFig();所有的object都先设置成不可选
	leSetAllLayerSelectable(nil);所有的layer shapes都先设置为不可选
	leSetLayerSelectable(layername t);使我们要选的layer shapes是可选
	geSelectAllFig();使这个cell中所有的object都是可选
	leSizeShapeForm->sizeValue->value=sizevalue;指定sizevalue
	leHiSize();进行size操作
	geSave();保存操作结果
	leCloseWindow();关掉打开的window
);end procedure	



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空