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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1395|回复: 0

[讨论] PCELL程序的编写

[复制链接]
发表于 2022-12-2 18:03:45 | 显示全部楼层 |阅读模式

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

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

x
编写pcell时,使用 dbReplaceProp是为什么,有什么作用吗。关于回调改如何设置callback
;==========================================================================

procedure( createM2_M1pcell( libName )
    pcDefinePCell(
    ;     library ID           cellname  viewname
    list( ddGetObj( libName )  "m2_m1"   "layout" )

    ; input parameters with default values
    (   (_rows    1)
        (_columns 1)
    )

    let( (cv tf quantum bag prop
          viaSpacing m1ViaEnc m2ViaEnc viaSize
          hOffset vOffset left right lower upper step h w deep)

        /* convenience abbreviations */
        cv = pcCellView
        tf = techGetTechFile( cv )
        
        /* the only reason i avoid the usual name "lambda" in favor of
         * "quantum" is that "lambda" is a reserved skill keyword that vim
         * highlights, and i don't want to see it highlighted everywhere...
         * */
        bag = dbOpenBag( ddGetObj( tf~>libName ) "r" )
        prop = dbFindProp( bag "minLength" )
        quantum = prop->value / 2
        dbCloseBag( bag )
        
    deep = rindex( techGetParam( tf "technology" ) "DEEP" )
   
    if( deep == "DEEP"
        then
          viaSize = 3 * quantum
        else
          viaSize = 2 * quantum
      )  
        

        /* via-via spacing */
        viaSpacing = techGetSpacingRule( tf "minSpacing" "via" )
        /* m1 enclosure of via */
        m1ViaEnc = techGetOrderedSpacingRule( tf "minEnclosure" "metal1" "via" )
        /* m2 enclosure of via */
        m2ViaEnc = techGetOrderedSpacingRule( tf "minEnclosure" "metal2" "via" )

        ;
        ; vias
        ;
        step = viaSize + viaSpacing
        hOffset = 0
        for( c 1 _columns
            left = hOffset
            right = left + viaSize
            vOffset = 0
            for( r 1 _rows
                lower = vOffset
                upper = lower + viaSize
                dbCreateRect( cv list( "via" "drawing" ) list( left:lower right:upper ) )
                vOffset = vOffset + step
            )
            hOffset = hOffset + step
        )

        ;
        ; metal 1
        ;
        left = -m1ViaEnc
        lower = -m1ViaEnc
        w = _columns*viaSize + (_columns-1)*viaSpacing + 2*m1ViaEnc
        h = _rows*viaSize + (_rows-1)*viaSpacing + 2*m1ViaEnc
        dbCreateRect( cv "metal1" list( left:lower left+w:lower+h ) )

        ;
        ; metal 2
        ;
        left = -m2ViaEnc
        lower = -m2ViaEnc
        w = _columns*viaSize + (_columns-1)*viaSpacing + 2*m2ViaEnc
        h = _rows*viaSize + (_rows-1)*viaSpacing + 2*m2ViaEnc
        dbCreateRect( cv "metal2" list( left:lower left+w:lower+h ) )

        dbReplaceProp( cv "viewSubType" "string" "maskLayoutParamCell" )
        dbReplaceProp( cv "function" "string" "contact" )
    )

    t
    ) ; end pcDefinePCell
) ; end createM2_M1pcell


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-27 12:53 , Processed in 0.014561 second(s), 7 queries , Gzip On, Redis On.

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