Layout 25

[SKILL] rodCreateRect 함수

Relative Object Design (ROD)에 관한 함수를 소개했던 글입니다. rodCreateRect() 함수인데, 간단한 것을 제작할 때는 일반적으로 사용하는 dbCreateRect() 함수와 별반 차이가 없어 보이지만, 나중에는 Guard-Ring 등을 제작할 때 유용하게 쓰입니다. 물론 공정에서 제공하는 경우가 많지만, 특별히 제작해야 될 경우 알아두면 도움이 됩니다. 1. Creating a Single Rectangle 튜토리얼에서도 간단한 Rectangle을 그릴 때는 rodCreateRect() 보다는 dbCreateRect를 쓰라고 되어있습니다. 기본적으로 cellView부터 값을 찾아옵니다. 혹시나 모르는 함수였다면 자주 쓰이는 것이니 기억해 두도록 합시다. cvId = deGe..

[SKILL] ROD (Relative Object Design) 이란?

Guard-Ring, Shelding Line, Via array 등의 일정한 패턴을 요구하는 곳에 쓰일 수 있는 ROD (Relative Object Design)에 대해 공부했었다. Techfile에서 제공되는 대부분의 Guard-Ring 은 이 ROD object로 제작되어 있다. 제공되는 것을 쓰는 것이 제일이지만, 긴급히 만들어 써야 할 때를 위해 알아두면 좋다. rodCreateRect( [?name S_name] ?layer txl_layer [?width n_width] [?length n_length] [?origin l_origin] [?bBox l_bBox] [?elementsX x_elementsX] [?elementsY x_elementsY] [?spaceX n_spaceX] [?..

[SKILL] pcDefinePCell 맛보기 - 2편

pcDefinePcell() 맞보기 편에 이어서 적었던, GUI pcell을 이용한 방법이다. 복잡한 부분은 text base로 제작하는 것이 편하지만, GUI를 이용하면 기본적인 함수의 틀을 만들어 주기 때문에 쉽게 시작할 수 있다는 장점이 있다. TEMP_LIB라는 library에 test라는 pcell을 만들어 보겠습니다. 똑같이 rectangle을 하나 그렸는데 stretch line 두 개를 가로세로로 넣어서 X방향으로는 width 변수에 의해서, Y방향으로는 height에 의해서 변하도록 설정합니다.GUI로 작업을 마친 뒤에 Pcell - Compile - To Skill File... 을 선택하여 파일명을 적어주게 되면 해당 파일이 생성됩니다.pcDefinePCell(list(ddGetObj..

[SKILL] pcDefinePCell 맛보기 - 1편

예전에 pcell 관련 강좌처럼 적었던 포스팅을 티스토리 에디터 변경으로 수정하였습니다. 내용은 같으니 예전에 보셨던 분은 꼭 다시 볼 필요는 없을 것 같습니다. 일단 기본적인 TEST_LIB라는 이름의 Library를 만들고 cellName이 rect인 pcell을 만들 겁니다. pcell의 기능은 width, height라는 두 변수를 입력받아 해당 크기로 Metal1 Layer의 사각형을 그리는 겁니다.pcDefinePCell( list( ddGetObj("TEST_LIB") "rect" "layout" ) ( ;# pcell parameters ( width float 1.00 ) ( height float 1.00 ) ) ;# end pcell ..

[SKILL 강좌] dbCreate.. Rect, Path, Polygon, Label 함수들

dbCreate 관련 함수들에 대해서 적은 강좌 글입니다. 일단 dbCreate 관련 함수들이 어떤 것이 있는지 찾아보려면 Finder에서 dbCreate라는 검색어로 검색해보면 정말 많은 함수들이 나오는데요.그중에 많이 사용되는 녀석들 몇 개만 살펴볼까 합니다. 다른 것들도 응용하면 비슷해요~ ◆ dbCreateRect() 함수dbCreateRect( d_cellView tx_layer [ t_purpose ] l_bBox ) => d_rect | nilCreates a rectangle. cv = deGetCellView()dbID = dbCreateRect(cv list("METAL1" "drawing") list(list(0 0) list(3 3)))description은 ..

[SKILL] dbOpenPanicCellView 와 panic.log

예전에 쉬어가기 코너처럼 작성했던 글이지만, 알면 굉장히 유용한 기능입니다. 저장을 안한채 Virtuoso가 오류로 닫혔는데 이 기능을 모른다면 몇 분~ 몇 시간의 작업을 날릴 수도 있습니다. 최근 사용하는 ICADV12, ICADV18 버전에서는 다행히도 오류로 갑자기 꺼지는 경우가 많지는 않네요. dbOpenPanicCellView( gt_lib t_cellName t_viewName [ t_version [ t_mode [ d_contextCellView ] ] ] ) => d_cellView | nil Opens a saved panic cellview from a physical panic file with extension .oa-. The cellview .oa- opens in read m..

[SKILL 강좌] geGetSelSet() 함수와 foreach 문

이번에 알아볼 녀석은 geGetSelSet() 함수입니다. Finder에서 함수 description은 이렇군요. geGetSelSet( [ w_windowId ] [ d_cellview ] ) => l_selectedSet / nil Returns a list of the currently selected objects in a window or cellview. 네, 선택된 object 들을 list로 반환해 주는 함수입니다. 이전에 응용하기 change_bracket 편에서는 cellView에 있는 모든 shape에서 동작시켰는데요. 이러한 경우도 있지만 실제로는 "선택된 녀석들만.." 실행하고 싶을 경우가 있습니다. 이러한 경우 사용되는 함수죠. geGetSelSet() 함수와 같이 사용하기 편한..

[SKILL 강좌] procedure (@rest @optional @key)

procedure에 대해서 배워봅시다. 이론은 별거 없습니다. 함수 만들어주는 함수이지요!# procedureprocedure( s_funcName(l_formalArglist) g_expr1 ...)=> s_funcName#Description# Defines a function using a formal argument list. The body of the procedure is a list of# expressions to evaluate. The body of the procedure is a list of expressions to be evaluated# one after another when s_funcName is called. There must be no white space..

[SKILL 강좌] change_bracket : label의 '<>' 를 '[]' 로

가끔 TOP 작업을 하다 보면 PnR block은 bus를 "[ ]"를 사용하고 schematic에서는 ""를 사용해서 verification 할 때 문제가 될 때가 있습니다. netlist에서 vi로 바꿔주는 경우도 있고 다들 각각의 방법으로 해결하실 텐데 앞서 배운 정규표현식을 통해 간단히 변경 가능합니다. AAA 의 4개의 label을 그려놓았습니다. operator를 설명하면서 같이 언급한 deGetCellView와 정규표현식 그리고 foreach 문을 이용해 AAA -> AAA [3:0]으로 바꿔봅시다. foreach(shape deGetCellView()->shapes label = shape->theLabel rexCompile("") label = rexReplace(label "]"..

[SKILL 강좌] 정규표현식 (rexCompile, rexMatchp, rexReplace..)

정규표현식은 perl에 있는 거 아닌가요? 하면 큰 오산이죠! SKILL 에도 있습니다. 자주 쓰일지는 모르지만 유용한 기능이죠. list 편과 마찬가지로 몇 가지 예제로 보고 갑시다. 자세한 사항은 virtuoso document에 잘 나와 있으니 확인하시면 도움될 겁니다. 일단 변수 하나를 만들어서 temp = "HODMAN BLOG!!" "HODMAN BLOG!!" rexMatch는 앞의 pattern이 뒤의 변수에 있는지 검사합니다. rexMatchp("HODMAN" temp) t rexMatchp("ASSURA" temp) nil rexCompile에서 특정 pattern을 compile 해 놓으면 rexCompile("HODMAN") t compile 된 pattern을 rexReplace를 ..