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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2392|回复: 18

[求助] skill中pcell实现finger的问题

[复制链接]
发表于 2023-3-13 17:17:45 | 显示全部楼层 |阅读模式

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

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

x
请问大佬,下列for语句还需要添加什么参数可以实现随f的增加改变M1的数量

pcDefinePCell(list(ddGetObj("test") "testmos" "layout")
    ((l float 0.25)
     (w float 0.26)
     (f int 1 )
    )
    let((GateShape)
        for(groups 1 f
            GateShape=rodCreateRect(
                        ?layer list("M1" "drawing")
                        ?width  w
                        ?length l
                        ?netName                "D"
                        ?termName        "D"
                        ?pin                         t
                        ?origin                list(0 0)
           );end of rodCreateRect               
        );for
    );let
);pcDfinPcell

 楼主| 发表于 2023-3-14 17:33:22 | 显示全部楼层
pcDefinePCell(list(ddGetObj("liyu_test") "testmos9" "layout")
    ((l float 0.25)
     (w float 0.26)
     (nf int 1 )
    )
        let((GateShape1 GateShape2)
            for(f 1 nf           
            GateShape2=rodCreateRect(
                        ?layer list("M1" "drawing")
                                ?width  w
                                ?length l
                                ?netName            "D"
                                ?termName        "D"
                                ?name get_pname(concat("D" "_" f))
                                ?pin                t
                                ?origin                list(0 0)               
               );end of rodCreateRect     
             rodAlign(
                                ?alignObj                 GateShape2
                                ?alignHandle         "centerLeft"
                                ?refObj                         rodGetObj(get_pname(concat("D" "_" f-1)))
                                ?refHandle                 "centerRight"
               )                                       
        );for
    );let
);pcDfinPcell                           


搞定了,给大家一个参考


 楼主| 发表于 2023-3-14 10:36:45 | 显示全部楼层
给自己的参考

layout.txt

36.97 KB, 下载次数: 56 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2023-3-14 11:46:00 | 显示全部楼层
 楼主| 发表于 2023-3-15 16:14:05 | 显示全部楼层
分享文件

cdf.txt

12.42 KB, 下载次数: 36 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2023-6-20 11:57:06 | 显示全部楼层
procedure( m5321_sdMetStretch( info )
    let((returnVal gateWidth minLength maxLength dataValue tgObjName tgObjeNameList
                finger metList metPrint curBotY curTopY botY topY curLength botInc topInc minY maxY
                (debugging nil)
                )
                gateWidth=cdfParseFloatString((info->stretchMaster)~>parameters~>fw)*1e6
                minLength = 0.7
                maxLength = gateWidth-0.3
                minY = 0.15
                maxY = gateWidth-minY
                dataValue = info->paramVal
                tgObjName = (info->rodObj)~>name
                tgObjeNameList = parseString(tgObjName "_")
                finger = evalstring(cadr(tgObjeNameList))
                metList = evalstring(sprintf(nil "'( nil %s )", dataValue))

                (if get(metList concat(finger)) then
                        curBotY = car(get(metList concat(finger)))
                        curTopY = cadr(get(metList concat(finger)))
                        (if curTopY>(gateWidth-0.15) then curTopY=gateWidth-0.15)
                else curBotY=minY curTopY=maxY
                        )
                curLength = curTopY-curBotY+info->increment
                botInc = 0.0
                topInc = 0.0

                (case info->handleName
                        ("lowerCenter" botInc = info->increment)
                        ("upperCenter" topInc = info->increment)
                        )
                (when debugging
                        m5321_StretchPrint( info )
                        fprintf(stdout "curbotY=%L\n", curBotY)
                        fprintf(stdout "curtopY=%L\n", curTopY)
                        fprintf(stdout "botInc=%L\n", botInc)
                        fprintf(stdout "topInc=%L\n", topInc)
                        fprintf(stdout "curLength=%L\n", curLength)
                       
                        )
                (when minLength-curLength>=0.0 || curLength - maxLength >=0.0
                        botInc=0.0
                        topInc=0.0
                        )
                botY = curBotY-botInc
                topY = curTopY+topInc
                (when debugging
                        fprintf(stdout "metList=%L\n", metList)
                        fprintf(stdout "------botY=%L\n", botY)
                        fprintf(stdout "------topY=%L\n", topY)
                        )
                putprop(metList list(botY topY) concat(finger))
                metPrint=sprintf(nil "%L",metList)
                returnVal=substring(metPrint 6 strlen(metPrint)-6)       
                (when debugging
                        fprintf(stdout "metList=%L\n", metList)
                        fprintf(stdout "returnVal=%L\n", returnVal)
                        )
                returnVal       
        );end let
) ; ** procedure **
发表于 2023-6-21 09:50:06 | 显示全部楼层
大佬,还有 m5321_tapStretch?
发表于 2023-6-21 10:05:58 | 显示全部楼层
本帖最后由 sherlockd 于 2023-6-21 10:10 编辑

meishile
发表于 2023-6-25 11:01:36 | 显示全部楼层
orgin需要赋值成变量,使用rodAddToY/rodAddToX的相关命令,在循环中实现坐标按pitch改变。
 楼主| 发表于 2023-6-30 09:19:30 | 显示全部楼层


skb007 发表于 2023-6-25 11:01
orgin需要赋值成变量,使用rodAddToY/rodAddToX的相关命令,在循环中实现坐标按pitch改变。 ...


用rodAlign就行了,这个更方便
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-18 00:34 , Processed in 0.025993 second(s), 9 queries , Gzip On, Redis On.

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