Programming 11

[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 강좌] 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..

[SKILL 강좌] calculate_area : 2. callback 함수와 browser

지난번 글에서 간단한 stringField 하나를 가진 (Label 은 자투리) calculator라는 창 하나를 만드는 것과 reload 함수를 통해서 코드를 하나하나 수정하면서 진행할 때 작업하기 편한 환경을 만들어 봤습니다. skill language에 생소한 경우 gui까지 따라오려면 좀 어렵겠지만 user reference manual 등을 보면서 천천히 이해하다 보면 그렇게 복잡하지만은 않다는 걸 알 수 있을 겁니다. 뭔가 output (gui 창)을 보면서 뿌듯함도 느낄 수 있을 거고요. 이번엔 지난번 강좌를 잘 따라오셨다면 어렵지 않을 겁니다. gui 창에 몇 가지 field 들을 추가하고, 간단한 callback 함수들을 만들어 연결해 주도록 하겠습니다. callback 함수란 버튼 클릭..

[SKILL 강좌] calculate_area : 1. gui 설정과 reload 함수

예전에 작성해서 잘 써먹은 코드이지만, virtuoso LAYOUT EAD (혹은 EXL)의 기능으로 비슷한 기능이 있는 것 같다. 하지만 라이선스의 제약도 있고, 좀 더 간편하게 이용할 수 있어서 아래 코드는 남겨 둔다. 다만 사용하기 위해 수정이 많이 필요할 것 같다. 공정이 점점 작아지고, 설계 주파수 대역도 점점 올라가면서 high speed routing 구간의 matching issue 가 있었다. Full custom layout 을 진행하면서 이러한 경우 mismatch 가 없어야 하겠지만, 공정상의 issue 도 있고, human error의 여부도 있을 수 있다. 물론 golden simulation 은 parasitic extraction 하여 post simulation을 확인하는 ..