Programming 언어/Skill

[SKILL] pcDefinePCell 맛보기 - 2편

호드맨 2017. 2. 11. 00:32

pcDefinePcell() 맞보기 편에 이어서 적었던, GUI pcell을 이용한 방법이다. 복잡한 부분은 text base로 제작하는 것이 편하지만, GUI를 이용하면 기본적인 함수의 틀을 만들어 주기 때문에 쉽게 시작할 수 있다는 장점이 있다. TEMP_LIB라는 library에 test라는 pcell을 만들어 보겠습니다. 똑같이 rectangle을 하나 그렸는데 stretch line 두 개를 가로세로로 넣어서 X방향으로는 width 변수에 의해서, Y방향으로는 height에 의해서 변하도록 설정합니다.

stretch line을 넣은 모습

GUI로 작업을 마친 뒤에 Pcell - Compile - To Skill File... 을 선택하여 파일명을 적어주게 되면 해당 파일이 생성됩니다.

SKILL File로 생성
SKILL File로 생성

pcDefinePCell(list(ddGetObj("TEMP_LIB") "test_SKILL" "layout")
    ((height float 2.0)
        (width float 2.0)
    )
    let((width width0 width0offset height height1
            height1offset 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) == "width")
                )
            ))
        (width = (pcParamProp~>value))
        if(((pcParamProp~>valueType) == "boolean")
            (width = (width == "TRUE"))
        )
        (pcParamProp = car(exists(prop pcParameters
                    ((prop~>name) == "height")
                )
            ))
        (height = (pcParamProp~>value))
        if(((pcParamProp~>valueType) == "boolean")
            (height = (height == "TRUE"))
        )
        (width0 = width)
        (height1 = height)
        (width0offset = (width0 - 2))
        (height1offset = (height1 - 2))
        (pcLayer = 31)
        (pcPurpose = "drawing")
        (pcInst = dbCreateRect(pcCellView
                list(pcLayer pcPurpose)
                list((0.0:0.0)
                    ((2.0 + width0offset):(2.0 + height1offset))
                )
            )) t
    )
) 

이렇게 저장한 SKILL 파일을 보면 뭔가 복잡해 보이지만 각 구조가 자세히 작성되어 있어 수정만 해주면 복잡한 기능도 추가할 수 있다. 간단한 거라면 GUI만으로도 끝낼 수도 있다.