language 12

[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를 ..

[SKILL 강좌] list 함수들 (cons, append, car, cdr, nth, xCoord, yCoord...)

list에 자주 사용되는 함수들을 알아봅시다. car, nth, xCoord 이런 것들과 cons, append까지~;# 리스트 만들기list(1 2 3)(1 2 3)`(1 2 3)(1 2 3)temp_list = list(1 2 3)(1 2 3)temp_list(1 2 3);# 리스트 인지 판단listp(temp_list)t ;# 리스트 앞쪽에 연결cons(0 temp_list)(0 1 2 3) ;# 리스트 뒤에 리스트 연결append(temp_list list(4))(1 2 3 4)append(temp_list list(4 5))(1 2 3 4 5) ;# 리스트 뒤에 원소 연결append1(temp_list 4)(1 2 3 4);# 리스트의 첫번째 값car(temp_list)1nth(0 temp_li..

[SKILL 강좌] operator (-> , ~>)

list에 대한 내용을 적기 전에 SKILL에서 가장 간단하면서도 중요한 것을 빼먹었다. operator ("->" 또는 "~>" 지만 저는 "->"를 주요 사용하겠습니다.)의 사용에 대해서 알아봅시다.layout (물론 schematic이나 symbol도 마찬가지) 에는 수많은 DB 들로 이루어져 있는데요. 이러한 DB에 접근하는 방법은 "->"를 사용하는 겁니다. 가장 먼저 layout 하나를 열고 (저는 "temp_lib"라는 library에  "AAA"라는 cell을 만들어 열어보았습니다. 가운데에 보기 좋게(??) "HODMAN"이라는 label을 적어보았습니다. 여기서 한 가지 함수를 공부하고 가겠습니다.deGetCellView( [ w_window [ x_level ] ] ) ..

[SKILL 강좌] SKILL 을 배우고 싶은데 어떻게 하면 되나요?

예전 포스팅 글 중 가장 조회수가 많고, 처음 접하는 분들께 도움되는 내용의 글이었던 것 같다. 이번에 티스토리 에디터 변경 때문에 글을 조금 수정해 본다.블로그에 가끔 SKILL 코드를 남기면서 가장 많이 받은 질문은 이거였던 거 같네요.   Q. SKILL을 배우고 싶은데 어떻게 하면 되나요?    A. 답변드렸던 것은 보편화된 C나 java처럼 관련 서적이나 강좌 등은 거의 없으니 Log 보기, startFinder (혹은 cdsFinder), Virtuoso Documentation 활용하기와 구글 검색 정도였습니다. 간단하게 캡처된 화면으로 설명하자면1. Log 보기 - CIW 창의 menu에서 Option - Log Filter... 를 선택하여         \a Accelerated Inp..

[SKILL 강좌] calculate_area : 6. calibre report 작성 -끝-

gui로 여러 field 들을 만들어 보고, gds 뽑고, calibre rule deck까지 작성하였습니다. 간단한 툴을 만들기 위한 대부분의 기능들을 한 강좌에 담은 것 같아 뿌듯합니다. skill을 포함하여 SVRF, 각종 layout 에 연관된 기능을 많이 알아야 따라 하기 수월하니 조금 막히더라도 너무 낙심하지 마세요. gui는 이전 강좌에서와 똑같습니다. 다시 한번 캡처해서 협찬해 주신 권하연 님께 감사를! 이번 강좌에서는 만들었던 calibre rule deck을 실행시키고, 나온 결과를 보기 좋게 뜯어고치는 기능을 넣을 겁니다. 보고 싶은 양식대로 매번 고치긴 힘들잖아요.  ;# 일단 새로운 함수 하나 추가해 보겠습니다.;# 첫번째 변수 string을 두번째 변수 Num 만큼 길이로 늘려 ..

[SKILL 강좌] calculate_area : 5. calibre rule deck 생성

이번 강좌 글은 file 생성 부분이 있어서 조금 내용은 길지만 크게 복잡한 내용은 아닐 것 같습니다. 예전에 올렸던 원클릭 DRC, LVS 등과 같이, calibre Rule file을 생성한 뒤 ipc를 통해 calibre 실행시키는 내용입니다. 다른 점이 있다면 예전에는 rule 파일은 include 만 하면서 template 파일을 생성하였지만, 지금은 rule file 자체를 써야 합니다. 복잡한 rule은 아니니까 해볼까요. ;# calculate_area_step2() 함수 수정 procedure(calculate_area_step2() prog(() when(isFile("../veri/4_gds/touch_streamOut") calculator->cal_Label->value = "St..

[SKILL 강좌] calculate_area : 4. boolean button 과 export gds

gui 설정을 다 했다고 생각했는데 한 가지만 더 추가해보자. (역시 옵션은 하다 보면 자꾸 늘어남) 해당 layout DB의 gds를 뽑아서 calibre (SVRF)로 면적을 확인하려고 하는데, gds를 뽑을 건지 정해진 path에 기존에 뽑혀 있는 gds를 사용할 건지 옵션을 추가해보자. 이 경우 t / nil로 동작하는 boolean button 이 필요하게 된다. 앞 단계에서 만든 것과 유사하지만 다른 type인 boolean button을 만들어 보고 calculate_area() 함수에 export_gds 함수를 만들어 연결하겠다. 조금은 더 복잡하겠지만 gds를 뽑는 동안 다음 단계로 넘어가면 안 되므로 background에서 실행하면서 streamOut 이 완료되는 시점을 기다리도록 해보..

[SKILL 강좌] calculate_area : 3. cyclic field 와 main procedure

2단계가 글이 길어져서 gui 환경을 생각한 만큼 꾸미지 못했는데 나머지 check 하고 싶은 metal layer 선정을 위해 CyclicField를 만들어 보고 메인 run button과 procedure를 만들어서 2,3 단계에서 만든 각 field 들의 동작을 print 함수를 써서 확인해 보도록 하자. 실제로 코드 작성할 때 이런 식으로 처음부터 gui를 다 꾸미고 시작하는 경우는 많지 않고, 대부분은 완성된 후 옵션들이 하나씩 추가되는 형태일 것이다. 역시 첫 단추를 잘 꿰매어야 한다. script에 대한 완성된 결과를 image로 올리질 못해서 갑갑하기는 하지만 코드만 복붙 해도 어느 정도는 실행 가능할 것이므로 계속 진도를 나가 봅시다. # 3단계) cyclicField 추가, cyclic..