PCell 만들 때 같이 만드는 CDF 파일 만들기
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 저장
)