在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: yanpflove

[原创] 十字标尺 crossruler 简洁写法 ^.^

[复制链接]
发表于 2020-9-22 17:57:34 | 显示全部楼层


yanpflove 发表于 2019-2-13 09:33
回复 4# hccaiwh

是哎,这个好用。


你好,小弟初学skill ,您写的代码中geGetEditRep()这个函数在这段代码中具体实现了什么作用,我查了skill finder,但还是不明白。希望大哥结合这个代码为我解释一下,小弟不胜感激。

 楼主| 发表于 2020-9-23 09:53:50 | 显示全部楼层


LXS13225665126 发表于 2020-9-22 17:57
你好,小弟初学skill ,您写的代码中geGetEditRep()这个函数在这段代码中具体实现了什么作用,我查了ski ...


你好,
本程序通过以同一起点创建4个标尺,行程十字标尺。
1,通过enterPoint()获得鼠标单击点的坐标,也就是单个标尺的起点,即十字标尺的坐标原点;
2,通过leCreateRuller()创建一个标尺,其语法是leCreateRuller(d_cellViewId l_points),需要两个参数:
第一个参数d_cellViewId,需要给出要编辑的cellview的Database ID;
第二个参数l_points,需要给出list形式的ruler的顶点坐标,本例中通过enterPoint()获得标尺原点坐标,赋值给变量point,对其进行加减标尺长度的计算,以获得不同顶点坐标。
3,geGetEditRep(),是geGetEditCellView()的简写形式,返回正在编辑的cellview的Database ID,作为leCreateRuller()的第一个参数。

微信截图_20200923094842.png
发表于 2020-9-23 14:20:29 | 显示全部楼层


yanpflove 发表于 2020-9-23 09:53
你好,
本程序通过以同一起点创建4个标尺,行程十字标尺。
1,通过enterPoint()获得鼠标单击点的坐标,也 ...


谢谢大哥的详细讲解,我总算明白了,w_windowId是需要操作的地址,d_cellview是具体操作。这个函数是给createRule()提供操作地址。不知道我理解的对不对。再次感谢大哥赐教。
 楼主| 发表于 2020-9-23 16:04:20 | 显示全部楼层


LXS13225665126 发表于 2020-9-23 14:20
谢谢大哥的详细讲解,我总算明白了,w_windowId是需要操作的地址,d_cellview是具体操作。这个函数是给cr ...


你好,


w_windowId是需要操作的地址,d_cellview是具体操作。这个函数是给createRule()提供操作地址。

1,首先祝贺你,你能理解到“这个函数是给createRule()提供操作地址”已经很成功了。
2,如果我们只是需要大概读懂需要使用的skill脚本,到这儿就完全足够了。
3,如果有更高需求,需要深入理解skill,理解cadence virtuoso,那么你当前的理解是很不准确的,以下内容的理解需要一定的计算机水平:
(I)ID是ID,地址是地址,不是同义词,用你已经理解的“地址”的概念,来帮助理解新概念“ID”可能并不是个好选择,我们直接来理解ID就好了,不需要扯地址的事。
(II)这里涉及到数据结构了,我们的设计数据在OpenAccess数据库中是以对象(object)的形式存储的,物理上的形状、端口、器件、cellview等都是对象;逻辑上的线网也是对象。
微信截图_20200923153301.png
(III)读取数据库中的对象,通过handle(句柄),object identifier or ID(对象标识符),ID会指向对象。一个window有ID,一个cellview有ID,一个property也有ID,一根连线也有ID,通过ID就能找到对象。我们不能直接操作对象的ID,必须通过特定的函数才能获得一个对象的ID,这个脚本中的函数geGetEditRep(),geGetEditCellView()都是获得对象的ID的,除此之外,还有好多获得对象ID的函数。
微信截图_20200923151650.png
(IV)对象ID和地址的关系,一个对象是怎么存储的,存储在哪个地址上,由数据库管理系统来管理。
(V)当一个对象作为一个函数的参数时,指定对象的ID,比如leCreateRuler(d_cellViewId l_points)中的第一个参数d_cellViewId,需要给出cellview的ID,这个cellview告诉leCreateRuler()函数在哪儿画标尺。
(VI)所以你说“w_windowId是需要操作的地址,d_cellview是具体操作。这个函数是给createRule()提供操作地址”,是不对的,w_windowId和d_cellview都是ID,一个是window的ID,一个是cellview的ID,geGetEditRep()为leCreateRuler()提供了第一个参数cellview的ID。

朋友,skill语言不是layout工程师的必修科目,工艺流程、器件结构和版图画法才是大多数版图工程师更应该花功夫的地方,从局部到整体,参照《模拟电路版图的艺术》的目录安排提升自己的方向。
Skill语言编程,稍微了解即可,不是模拟版图设计工程师的必修课。


发表于 2020-12-2 15:56:37 | 显示全部楼层


zqihong 发表于 2020-2-11 13:50
在point=enterPoint()后面加几句就可以解决了
cvid=geGetEditCellView()
winid=geGetWindowCellView( ...


也遇到个问题,X到group中的时候,这个十字标尺只在上一层产生,而非group内部,请问怎么修改?谢谢!
发表于 2020-12-3 09:30:23 | 显示全部楼层
谢谢大神解答
发表于 2021-6-27 20:26:30 | 显示全部楼层
比之前用的简洁多了,厉害
发表于 2021-6-28 16:41:02 | 显示全部楼层
好励志啊,向前辈学习!
发表于 2021-7-16 11:04:11 | 显示全部楼层
学习
发表于 2021-7-26 11:10:08 | 显示全部楼层
老哥,你头像是本人嘛,很面熟
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-21 22:58 , Processed in 0.021344 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表