SKILL programming

PCell 만들 때 같이 만드는 CDF 파일 만들기

쥴리정 2025. 6. 2. 22:09

SKILL 언어로 PCell을 만들 때 사용하는 CDF (Component Description Format) 파일은, 해당 Cell이 가지고 있는 parameter들을 정의하고 관리하는 데 사용되는 메타데이터 파일로 쉽게 말하면, PCell에 어떤 파라미터가 있는지, 각 파라미터가 어떻게 동작하는지를 정의하는 역할을 한다.

 

CDF는 PCell 또는 일반 Cell의 파라미터를 정의하여, Layout Editor나 Schematic Editor 등에서 사용자가 해당 Cell의 파라미터를 GUI 상에서 손쉽게 수정할 수 있게 해주기 때문에 PCell을 만들 때 CDF file을 같이 만들어 주면 GUI로 파라미터를 입력하는 데 좀 더 편리하게 사용할 수 있다.

 

주의할 점은 PCell의 parameter 이름과 CDF 의 parameter 이름이 정확히 일치해야 한다.

단순하게 만드는 Pcell은 굳이 CDF 를 만들지 않아도 상관없겠지만 CDF file에 기술해 주는 순서대로 GUI의 parameter 입력 순서를 조절해 줄 수 있고, 몇 개의 항목 중에 parameter를 선택할 수 있는 cyclic 기능 등은 CDF로 기술해 주어야만 GUI상에서 구현이 가능하므로 이참에 CDF 파일 만드는 방법도 함께 알아두도록 하자.

쥴리의 블로그에 있는 예제를 복사에서 그대로 변경해서 사용하면 될 것이다.

 


하나의 parameter를 CDF로 만들기 위해서는 cdfCreateParam 함수를 사용한다.

cdfCreateParam  의 기본 형식은 다음과 같다.

 

cdfCreateParam(cdfHandle

  ?name    "paramName"                     ; parameter name

  ?type      "float"                                  ; float, string, boolean, int, cyclic 중에 하나를 선택

  ?choices   "listOfChoices"                 ; cyclic type 시 선택할 항목들 기술

  ?default     "1.0"                                 ; 기본값

  ?prompt    "Prompt shown in form"    ; GUI 창에 보이는 설명 또는 라벨

  ?units         "u"                                   ; u,n,p 등의 단위

  ?editable    t 또는 nil                         ; GUI 창에서 parameter 편집 가능 여부, 지정해 주지 않으면 default 값은 t

  ?display     t 또는 nil                         ; GUI 창에서 보여지는지 여부, 지정해 주지 않으면 default 값은 t

)

 

=>  SKILL language에서 parameter 앞에 ?가 붙는 것은 순서에 상관없이 필요할 경우 define해 주는 용도이기 때문에 위의 모든 항목을 설정해 줄 필요 없이 필요한 항목들만 지정해 주면 된다.

위에서 설명한 항목 외에도 많은 항목이 더 있지만 PCell을 만들 때는 위의 항목들만 알고 있으면 거의 문제없이 parameter를 만들 수 있다.


cdfCreateParam  의 예  : width라는 이름의 float type parameter를 생성하고 기본값을 0.5u로 설정하기

cdfCreateParam(cdfID

  ?name    "width"

  ?type      "float"

  ?default     "0.5"

  ?prompt    "Transistor  width"

  ?editable    t 

  ?display     t 

)

 


dbCreateBaseCellCDF 함수 :

 

dbCreateBaseCellCDF 함수는 cell definition level에서 CDF를 생성하는 함수로, 보통 PCell parameter를 정의할 때 사용되며 한 번만 정의되면 모든 instance에 적용된다.

 

dbCreateBaseCellCDF 함수 사용 예 :

 

   cdfID = dbCreateBaseCellCDF(libID "cellname")


cdfSaveCDF 함수 :

 

cdfSaveCDF 함수는 cell definition level에서 CDF를 저장하는 함수로, 사용법은 다음과 같다.

 

cdfSaveCDF(cdf)

 

여기서 cdf는 저장하려는 CDF object로 보통 cdfGetBaseCellCDF("libName" "cellName") 등을 사용하여 얻은 CDF..


그럼 이번에는 위의 dbCreateBaseCellCDF , cdfCreateParam , cdfSaveCDF 함수를 함께 사용하여 Pcell의 CDF를 만드는 구체적인 예인데, 필요한 이는 그대로 복사하여 library name, cell name, 및 각각의 parameter 내용들을 수정하여 사용하면 될 것 같다.

 

 

let( ( lib cell libId cellId cdfId)

     lib="TEST_LIBRARY"

     cell="PCELL_TEST"

     unless( cellId=ddGetObj(lib cell) error("Could not get cell %s." cell))

     when( cdfId=cdfGetBaseCellCDF(cellId)  cdfDeleteCDF(cdfId))

     cdfId=cdfCreateBaseCellCDF(cellId)

 

    cdfCreateParam( cdfId

        ?name      "routing_metal"

        ?prompt    "routing_metal"

        ?choices    list("M1" "M2" "M3" "M4")

        ?defValue   "M1"

        ?type          "cyclic"

        ?display       "t"

)

    cdfCreateParam( cdfId

        ?name      "routing_number"

        ?prompt    "routing_number"

        ?defValue   2

        ?type          "int"

        ?display       "t"

)

    cdfCreateParam( cdfId

        ?name      "vertical_routing"

        ?prompt    "vertical_routing"

        ?defValue   "t"

        ?type          "boolean"

        ?display       "t"

)

    cdfCreateParam( cdfId

        ?name      "metal_width"

        ?prompt    "metal_width"

        ?defValue   0.5

        ?type          "float"

        ?display       "t"

)

    cdfCreateParam( cdfId

        ?name      "metal_space"

        ?prompt    "metal_space"

        ?defValue   0.5

        ?type          "float"

        ?display       "t"

)

    cdfCreateParam( cdfId

        ?name      "metal_length"

        ?prompt    "metal_length"

        ?defValue   2.0

        ?type          "float"

        ?display       "t"

)

cdfSaveCDF(cdfId)

)

 


pcDefinePCell 함수와 dbCreateBaseCellCDF 함수를 함께 사용하여 PCell 완성하기

 

CDF 까지 포함하여 PCell을 만들기 위한 기본 형식을 간단한 사각형 그리기 예들 들어 정리해 본다.

 

pcDefinePCell(

  list(ddGetObj("TEST_LIBRARY") "PCELL_TEST" "layout")

list(

   (width     "float"    "0.2")

   (length    "float"    "1.0")

)

let(()

  dbCreateRect(pcCellView "M1" list((0:0) (width:length))

)  ;let

)  ;pcDefinePCell

 

let( ( lib cell libId cellId cdfId)

     lib="TEST_LIBRARY"          ; pcDefinePCell에 정의된 library 및 cellname

     cell="PCELL_TEST"

     unless( cellId=ddGetObj(lib cell) error("Could not get cell %s." cell))

     when( cdfId=cdfGetBaseCellCDF(cellId)  cdfDeleteCDF(cdfId))

     cdfId=cdfCreateBaseCellCDF(cellId)

 

    cdfCreateParam( cdfId

        ?name      "width"            ; pcDefinePCell에 정의된 parameter 이름과 같아야 함

        ?prompt    "width"

        ?defValue   0.2

        ?type          "float"

        ?display       "t"         

 )

    cdfCreateParam( cdfId

        ?name      "length"         ; pcDefinePCell에 정의된 parameter 이름과 같아야 함

        ?prompt    "length"

        ?defValue   1.0

        ?type          "float"

        ?display       "t"

)

cdfSaveCDF(cdfId)       ; CDF 저장

)