abby118的个人空间 https://blog.eetop.cn/1555282 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

留言板

facelist

您需要登录后才可以留言 登录 | 注册


JSing_Wong 2023-6-20 11:39
abby118: 可以分享下我是在哪里留的言吗? 大概看了下, 我加的那句话理论上应该在w做运算的前面加。 也就是let 语句定义完参数名称之后。let((L L0 .... L0offset ) when ...
已经可以了,谢谢!
我是copy的, if后面空格问题
我是在下面帖子看到的:
https://bbs.eetop.cn/thread-488873-1-1.html
感谢回复!
JSing_Wong 2023-6-20 09:27
abby118: 你好,有什么事情吗?
哈喽,早上好!
我最近在做pcell,找到一份帖子,有看到你回复了。
“试了很多次,终于成功了。
when(stringp(w) W=cdfParseFloatString(w)
if (W<0.001
then W=W*1e6
else  W=W))
上面这段话应该放在let函数运算W语句的前面!不是后面!”
可能我还是加错位置了,一直报错,想请教你具体是加载哪个位置呢?
谢谢!以下是我的pcell skill:
pcDefinePCell(list(ddGetObj("test_jc") "pmos_lv" "layout")
    ((l string "0.32u")
        (w string "1.2u")
    )
    let((L L0 L0offset ref_X ref_X1
            ref_X1offset ref_Y ref_Y2 ref_Y2offset ref_YC
            ref_YC3 ref_YC3offset W W4 W4offset
            pcMember pcStretchGroup stretchOffsetX stretchOffsetY pcLib
            pcMaster pcInst pcTerm pcPin pcPinName
            pcNet pcTermNet pcNetName pcTermNetName pcMosaicInst
            pcParameters pcParamProp pcStep pcStepX pcStepY
            pcRepeat pcRepeatX pcRepeatY pcIndexX pcIndexY
            pcLayer pcPurpose pcLabelText pcLabelHeight pcPropText
            pcParamText pcCoords pcPathWidth pcPolygonMargin
        )
        (pcLib = (pcCellView~>lib))
        (pcParameters = ((pcCellView~>parameters)~>value))
        (pcParamProp = car(exists(prop pcParameters
                    ((prop~>name) == "W")
                )
            ))
;        (W = (pcParamProp~>value))
        if( ((pcParamProp~>valueType) == "boolean")

                        (W = (W == "TRUE"))
        )
        (pcParamProp = car(exists(prop pcParameters
                    ((prop~>name) == "L")
                )
            ))
;        (L = (pcParamProp~>value))
        if( ((pcParamProp~>valueType) == "boolean")
                        (L = (L == "TRUE"))
        )
        (pcParamProp = car(exists(prop pcParameters
                    ((prop~>name) == "ref_X")
                )
            ))
        (ref_X = (pcParamProp~>value))
        if( ((pcParamProp~>valueType) == "boolean")
            (ref_X = (ref_X == "TRUE"))
        )
        (pcParamProp = car(exists(prop pcParameters
                    ((prop~>name) == "ref_Y")
                )
            ))
        (ref_Y = (pcParamProp~>value))
        if( ((pcParamProp~>valueType) == "boolean")
            (ref_Y = (ref_Y == "TRUE"))
        )
        (pcParamProp = car(exists(prop pcParameters
                    ((prop~>name) == "ref_YC")
                )
            ))
        (ref_YC = (pcParamProp~>value))
        if( ((pcParamProp~>valueType) == "boolean")
            (ref_YC = (ref_YC == "TRUE"))
        )
        (L0 = L)
        (ref_X1 = ref_X)
        (ref_Y2 = ref_Y)
        (ref_YC3 = ref_YC)
        (W4 = W)
        if( !numberp(ref_X1)
            (ref_X1 = 3.7)
        )
        (pcStepX = 0.475)
        (pcStepY = 0.75)
        (pcRepeatX = fix((((L - 0.305) / 0.475) + 1)))
        (pcRepeatY = fix((((W - 0.59) / 0.75) + 1)))
        (ref_X1 = (ref_X1 + ((L - (0.475 * fix(((L - 0.305) / 0.475))) - 0.305) / 2)))
        if( !numberp(ref_Y2)
            (ref_Y2 = 3.2)
        )
        (pcStepX = 0.475)
        (pcStepY = 0.75)
        (pcRepeatX = fix((((L - 0.305) / 0.475) + 1)))
        (pcRepeatY = fix((((W - 0.59) / 0.75) + 1)))
        (ref_Y2 = (ref_Y2 + ((W - (0.75 * fix(((W - 0.59) / 0.75))) - 0.59) / 2)))
        if( !numberp(ref_YC3)
            (ref_YC3 = 3.4)
        )
        (pcStepX = 0)
        (pcStep = (pcStepY = 0.248))
        (pcRepeatX = 1)
        (pcRepeat = (pcRepeatY = fix((((W - 0.248) / 0.248) + 1))))
        (ref_YC3 = (ref_YC3 + ((W - (0.248 * fix(((W - 0.248) / 0.248))) - 0.248) / 2)))
        if( (L0 < 0.32)
            then
            (L0 = 0.32)
        )
        if( (L0 > 50)
            then
            (L0 = 50.0)
        )
        (L0offset = (L0 - 0.32))
        (ref_X1offset = (ref_X1 - 3.7))
        (ref_Y2offset = (ref_Y2 - 3.2))
        (ref_YC3offset = (ref_YC3 - 3.4))
        if( (W4 < 0.6)
            then
            (W4 = 0.6)
        )
        if( (W4 > 50)
            then
            (W4 = 50.0)
        )
        (W4offset = (W4 - 0.6))
        dbReplaceProp(pcCellView "function" "string" "transistor")
        dbReplaceProp(pcCellView "_pcCompiledCounter" "int" 1332)
        dbReplaceProp(pcCellView "viewSubType" "string" "maskLayoutParamCell")
        (pcRepeat = (pcRepeatX = (pcRepeatY = 1.0)))
        (pcStep = (pcStepX = (pcStepY = 0.0)))
        (pcStepX = car(errset(0.475)))
        (pcStepY = car(errset(0.75)))
        (pcRepeatX = fix((((L - 0.305) / 0.475) + 1)))
        (pcRepeatY = fix((((W - 0.59) / 0.75) + 1)))
        (pcStepX = 0.475)
        (pcStepY = 0.75)
        for( pcIndexX 0 (fix(pcRepeatX) - 1)
            for( pcIndexY 0 (fix(pcRepeatY) - 1)
                nil
                (pcLayer = 3)
                (pcPurpose = "drawing")
                (pcInst = dbCreateRect(pcCellView
                        list(pcLayer pcPurpose)
                        list(((0.115 + ref_X1offset + (pcIndexX * pcStepX)):(0.12 + ref_Y2offset + (pcIndexY * pcStepY)))
                            ((0.19 + ref_X1offset + (pcIndexX * pcStepX)):(0.47 + ref_Y2offset + (pcIndexY * pcStepY)))
                        )
                    ))
            )
        )
        (pcRepeat = (pcRepeatX = (pcRepeatY = 1.0)))
        (pcStep = (pcStepX = (pcStepY = 0.0)))
        (pcStep = (pcStepY = car(errset(0.248))))
        (pcRepeat = (pcRepeatY = fix((((W - 0.248) / 0.248) + 1))))
        (pcStep = (pcStepY = 0.248))
        (pcIndexX = 0)
        for( pcIndexY 0 (fix(pcRepeatY) - 1)
            nil
            (pcLayer = 85)
            (pcPurpose = "drawing")
            (pcInst = dbCreateRect(pcCellView
                    list(pcLayer pcPurpose)
                    list((-0.208:(0.08 + ref_YC3offset + (pcIndexY * pcStepY)))
                        (-0.12:(0.168 + ref_YC3offset + (pcIndexY * pcStepY)))
                    )
                ))
            (pcLayer = 85)
            (pcPurpose = "drawing")
            (pcInst = dbCreateRect(pcCellView
                    list(pcLayer pcPurpose)
                    list(((0.44 + L0offset):(0.08 + ref_YC3offset + (pcIndexY * pcStepY)))
                        ((0.528 + L0offset):(0.168 + ref_YC3offset + (pcIndexY * pcStepY)))
                    )
                ))
        )
        (pcLayer = 67)
        (pcPurpose = "drawing")
        (pcInst = dbCreateRect(pcCellView
                list(pcLayer pcPurpose)
                list((-0.538:-0.25)
                    ((0.858 + L0offset):(0.85 + W4offset))
                )
            ))
        (pcLayer = 40)
        (pcPurpose = "drawing")
        (pcInst = dbCreateRect(pcCellView
                list(pcLayer pcPurpose)
                list((0.0:-0.12)
                    ((0.32 + L0offset):(0.72 + W4offset))
                )
            ))
        (pcLayer = 101)
        (pcPurpose = "drawing")
        (pcInst = dbCreatePath(pcCellView
                list(pcLayer pcPurpose)
                list((-0.164:(0.62 + W4offset))
                    (-0.164:-0.02)
                ) 0.18 "truncateExtend"
            ))
        (pcLayer = 101)
        (pcPurpose = "drawing")
        (pcInst = dbCreatePath(pcCellView
                list(pcLayer pcPurpose)
                list(((0.484 + L0offset):(0.62 + W4offset))
                    ((0.484 + L0offset):-0.02)
                ) 0.18 "truncateExtend"
            ))
        (pcLayer = 6)
        (pcPurpose = "drawing")
        (pcInst = dbCreateRect(pcCellView
                list(pcLayer pcPurpose)
                list((-1.488:-1.2)
                    ((1.808 + L0offset):(1.8 + W4offset))
                )
            ))
        (pcLayer = 17)
        (pcPurpose = "drawing")
        (pcInst = dbCreateRect(pcCellView
                list(pcLayer pcPurpose)
                list((-1.488:-1.2)
                    ((1.808 + L0offset):(1.8 + W4offset))
                )
            ))
        (pcLayer = 1)
        (pcPurpose = "dg2")
        (pcInst = dbCreateRect(pcCellView
                list(pcLayer pcPurpose)
                list((-0.288:0.0)
                    ((0.608 + L0offset):(0.6 + W4offset))
                )
            ))
        (pcLayer = 161)
        (pcPurpose = "text")
        (pcLabelText = "pmos_lv")
        (pcLabelHeight = 0.01)
        (pcInst = dbCreateLabel(pcCellView
                list(pcLayer pcPurpose)
                (0.0:0.0) pcLabelText "upperLeft"
                "R0" "roman" pcLabelHeight
            ))
        setSGq(pcInst "normalLabel" labelType) t
    )
)
  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 1

    粉丝
  • 5

    好友
  • 2

    获赞
  • 5

    评论
  • 280

    访问数
关闭

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

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

GMT+8, 2024-5-2 01:44 , Processed in 0.013126 second(s), 3 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部