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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1587|回复: 28

[求助] hierarchical copy 库相关

[复制链接]
发表于 2024-10-1 07:42:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请叫一下各位, 大家有没有什么简单的办法,能够把一个库里面的所有cell herarchical copy  到另外一个库之后,批量加一个前缀或者后缀  ?


herachical copy 用virtuoso 自带的copy 就可以, 但是如何批量在新库里面加一个前缀或者后缀, 有什么直接的办法嘛? 是否只能通过自己写skill 来实现这一条路呢?
发表于 2024-10-1 10:52:18 | 显示全部楼层
假设所有的cell都在一个库里面,最简单,只要做两件事:1)cell的文件夹换名(加前缀或者后缀),这个用shell脚本就可以做到;2)更改电路层次关系中的调用关系,指向加了前缀或者后缀的cell,这个用SKILL脚本去做。如果cell分布在不同的库里面,那么上述第一步就改成对涉及到的库里面部分的cell需要改名或者拷贝成具有前缀或者后缀的cell。
 楼主| 发表于 2024-10-1 17:55:11 | 显示全部楼层


amodaman 发表于 2024-10-1 10:52
假设所有的cell都在一个库里面,最简单,只要做两件事:1)cell的文件夹换名(加前缀或者后缀),这个用she ...


在朋友的提示下,用chatGPT 写了一个,如下所示:
procedure(renameCellsWithPrefix(libraryName prefix)

    let((cells cell newCellName instances)
        cells = ddGetObj(libraryName)->cells

        foreach(cell cells
            let((oldCellName newCellName)
                oldCellName = cell->name
                newCellName = strcat(prefix oldCellName)

                if(strncmp(oldCellName prefix (length(prefix))) != 0
                    then
                        printf("Renaming cell %s to %s\n" oldCellName newCellName)
                        schRenameCell(libraryName oldCellName newCellName)

                        instances = schGetInstsInCellView(libraryName newCellName "schematic")

                        foreach(instance instances
                            let((instCellName newInstCellName)
                                instCellName = instance~>cellName
                                if(ddGetObj(libraryName instCellName)
                                    then
                                        newInstCellName = strcat(prefix instCellName)
                                        printf("Updating instance %s to point to %s\n" instCellName newInstCellName)
                                        instance~>cellName = newInstCellName
                                )
                            )
                        )
                )
            )
        )
    )
    println("All cells renamed with prefix and instances updated.")
)

;; Example usage:
;; renameCellsWithPrefix("my_library", "prefix_")


这个load 都virtuos 之后, 找一个库测试运行, 会报*Error* eval: not a function - length(prefix)
但是length 这个函数是skill 原有的啊, 我单独输入length("sdf")  测试都能正常返回3, 不知道为啥这个会报错到这里。 楼主帮忙看看是哪里的问题哈!

发表于 2024-10-1 18:05:53 | 显示全部楼层




  1. strncmp( oldCellName prefix length(prefix) )

  2. 去掉一个括号


复制代码
 楼主| 发表于 2024-10-1 18:42:06 | 显示全部楼层


这对括号是把length(prefix)  扩在一起有问题嘛?


去掉这一对括号了又报其他问题了, *Error* eval: undefiend function - schRenameCell
发表于 2024-10-1 20:05:56 | 显示全部楼层
去掉的括号是length前面的那个,那个是多余的。

还真以为ChatGPT帮你从无到有写一个代码出来啊?这个代码是它搜索之后抄来的,所以schRenameCell这个函数没定义啊,没抄全呗。
 楼主| 发表于 2024-10-1 20:14:23 | 显示全部楼层


amodaman 发表于 2024-10-1 20:05
去掉的括号是length前面的那个,那个是多余的。

还真以为ChatGPT帮你从无到有写一个代码出来啊?这个代码 ...


老铁, 对于确定功能的特定代码,ChatGPT 是有可能写个初版的,我之前也有成功过的例子。 它写出来的,可能会有一些错误, 所以遇到错误了我就具体去看错误。


Snipaste_2024-10-01_20-10-55.jpg

我把这个括号标出来, 按照标号出来,如果有错误的话,麻烦老铁帮忙指出来哈:

1:这个是if 的括号, 下文还有一个结束的括号,应该没有问题。
2/7 : 这个是strncmp 函数的一对括号
3/6 :  这个看起来是把整个length(prefix) 包了一遍的括号, 多包一次,感觉也没有问题啊。
4/5 : 这个是length 函数自己的一对变量括号。




发表于 2024-10-1 20:28:33 | 显示全部楼层
不对啦,SKILL语句里面if的 closing bracket是在 if 语句体的最后的(好几行之后了),不是这一行能够 close掉的。

去查一下strncmp函数是怎么调用的就知道了,需要几个arguments,一看就知道。

在此不用争论ChatGPT到底多强大了, 这是一个不完整的代码。
发表于 2024-10-1 20:33:43 | 显示全部楼层
这是一行语句中C语言的写法和Lisp语言的写法混淆的地方,在函数名前面加括号,只有在Lisp语言中才可以,比如你这一行可以写成:





  1. (strncmp oldCellName prefix (length prefix) )


复制代码


这是Lisp的写法,SKILL也可以解释通过的.  在Lisp语言中,所有的东西都是list,list的第一个元素可以是函数名,后面跟变量。
发表于 2024-10-1 20:34:00 | 显示全部楼层


kuxuanxinzai 发表于 2024-10-1 20:14
老铁, 对于确定功能的特定代码,ChatGPT 是有可能写个初版的,我之前也有成功过的例子。 它写出来的,可 ...


SKILL语言的特点之一就是括号不能乱用。在C语言里,你可以为了可读性随便增加括号,能加一层括号的地方就可以加两层三层……

SKILL语言不行。
SKILL支持C语言风格和LISP语言风格,或者二者的混用。
比如length(prefix)和(length prefix)是等价的。
在LISP风格中,括号内第一项被当做函数来调用。
所以,(length(prefix))会吧 length(prefix) 当做函数来调用。于是出错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-22 14:49 , Processed in 0.025442 second(s), 8 queries , Gzip On, Redis On.

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