새로운 회사에서 새로운 공정으로 업무를 시작했다.
회사를 옮길 때마다 이전 회사에서 짜 놓았던 SKILL program 들은 그냥 두고 오기 때문에, 같은 것이라도 새로 짜야 하는 일이 반복되고 있다.
하지만 이전 회사에서 짜 놓았던 것도 머릿속에는 이미 남아있지 않기 때문에 또다시 새롭게 함수들을 찾아보며 끙끙대는 일이 반복되고 있는 중이다.
그런 이유로 오늘은 SKILL에 대한 첫 글을 올려볼까 한다.
먼저, SKILL programming은 왜 이렇게 어려운 걸까?
- SKILL을 사용하는 환경의 특수성
아마도 이게 가장 중요한 이유가 될 텐데, SKILL은 C, Phython, Perl 등과 같은 language와는 다르게 terminal 창에서 바로 실행해 볼 수 있는 언어가 아니다. SKILL은 cadence 사의 EDA tool에 적용되는 내부 언어이기 때문에 나같은 레이아웃 엔지니어들은 Virtuoso 를 실행한 후 Virtuoso의 command-input 창에서 실행 해야 되는 환경적 특수성이 있다. 그래서 virtuoso를 사용하는 회사에 다니지 않는다면 개인적으로 SKILL programming을 짜 보는 것은 라이센스 문제가 해결되지 않고서는 합법적으로는 불가능하다는 게 개인적으로 SKILL을 배우기 힘든 이유 중에 가장 큰 이유라고 생각한다.
- 불친절한 Document
배우기 위해서는 문서라도 봐야한다.
뭐, calibre나 synopsys 등 업무와 관련된 문서를 찾아보면 다 비슷하긴 하지만, (개인적으로) 유독 cadence document는 불친절하게 느껴진다. 일단 어떤 문서를 봐야 할 지 헤매다가 지쳐버리는 느낌.....가끔 문서를 찾아서 읽어보더라도 문서안에서 또 다른 문서를 보라는 안내도 많고, 여러 문서들의 중복되는 내용도 너무 많다. 일단 문서 자체가 너~~무 많고, document directory에 가 보면, 그나마 있는 document 종류도 엄청 많은데, 제목이 약자로 줄여져 있으니 뭐가 뭔지 알기 힘들다. Directory 각각 들어가서 문서 열어보고 하다 보면 하루가 지나가 버릴 수도 있을 정도. 게다가 문서 안에 소개되어 있는 함수는 끝도 없이 많은데, 비슷한 함수도 많고, 어떤 함수는 최신버전에만 사용되기도 하고 또 다른 함수는 최신 버전에서는 쓰지 않기도 한다. 하지만 함수가 어떤 버전에 사용되고 안되는지는 당연히 정보가 없기 때문에 실제 coding 시 몹시 열받을 수 있다.
- 낯선 문법
SKILL은 C, phython 등과는 다르게 LISP( Lots of Irritating Superfluous Parentheses )계열의 언어인데, LISP 계열의 언어는 기본적으로 개수를 셀 수 있고 변경 가능한 리스트가 기본 자료형으로 주어진다. 아마도 레이아웃 자체가 라이브러리, 셀, 뷰, 그 안에 포함되는 수많은 객체들의 특성들을 다뤄야 하는 언어이기 때문에 자연스럽게 LISP 계열 언어로 개발 된 듯 하다.
이 LISP 계열 언어는 대표적으로 함수형 언어이며, 괄호"()"를 많이 사용하는 언어이기에 C나 Python처럼 익숙한 문법이 아니다 보니 처음에는 다른 사람의 코드를 읽고 이해하는 것조차 어렵게 느껴진다.
그런데 SKILL은 LISP 계열 언어이기는 하지만 C나 Phython에서 사용하는 문법들도 병행하여 사용 가능하기 때문에 본인이 익숙한 스타일로 작성하면 된다.
하지만 LISP 스타일로 짤 때는 괄호 폭탄이라고 느껴질 수 있다. (짜 본 사람들은 안다. 괄호 하나 안맞으면 어떻게 되는지...)
문서마다 처음 설명되는 car, cdr 같은 함수들은 처음에는 쉬운 듯 해도 car(cdr(caaar list)) 뭐 이런식으로 나오기 시작하면 읽다가 길을 잃을 수도 있다. 암튼 문법 자체가 낯설어서 힘들 수 있다는 얘기.
- 레이아웃 객체 구조 이해 필요
SKILL 언어를 배우려는 목적은 레이아웃을 빠르고 효율적으로 하기 위함이다.
바꿔 말하면 레이아웃을 잘 알아야 SKILL programming도 잘 할 수 있다는 말이다.
좀 더 자세히 표현하자면 레이아웃의 shape, instance, label 등 레이아웃 만의 특수한 객체구조를 잘 이해하고 있어야 한다. 그래서 사실은 레이아웃을 겁나 잘하는 사람이 SKILL도 겁나게 잘하는게 이상적일 것이다.
실제로 EDA tool 관련 회사에서 여러 직원들이 메이저 반도체 업체에 지원들도 많이 해 주고들 계신데, 이분들이 SKILL은 정말 잘 짜주시는데, 이 때에도 실제 레이아웃에서 사용 가능한 SKILL을 짤 때는 현업 레이아웃 엔지니어와의 협업으로 업무가 진행되는 경우가 무척 많다.
- 참고할 자료와 배울 곳이 없다
다른 언어들은 인터넷이건 서적이건 참 많은 자료와 예제가 있지만, SKILL을 처음 배우는 사람이 찾아볼 만한 예제들은 정말 찾아보기 어렵다.
찾아보기 어려운 이유는 사실 레이아웃은 반도체 설계의 최종 결과물이기 때문에, 업무 관련된 많은 것들이 보안과 직결되어 있어서 외부로의 유출을 엄격히 금지하기 때문이다.
또 SKILL을 배우려고 해도 cadence 코리아에서 실시하는 SKILL 교육은 (일년에 몇 번 안됨) 무척이나 빠르게 마감이 되어버리고, 또 운좋게 교육에 참여하게 되더라도 교육대상자들의 수준이 천차만별이기 때문에 이런 경우에는 이해도를 높이기 위해 대체로 가장 쉬운 난이도로 교육이 진행된다. 그래서 일정 수준의 교육을 기대하고 갔다가 실망하고 오는 경우도 많다.
- 디버깅이 쉽지 않다
아무튼, 위의 어려움들을 극복하고 한 줄 한 줄 SKILL 코드를 짜 보기로 한다.
코드를 짠 후 virtuoso의 CIW 창이나 GUI 창에서 실행을 시켜보면, 에러 메세지가 참으로 간단하게 나와서 맨붕에 빠져버리기 일수이다. 뭐, 그냥 약간의 과장을 하자면 에러있어~ 이정도 메세지가 로그창에 출력되는 수준이다.
그럼 다시 한 줄 한 줄 머리를 쥐어 뜯으며 체크해야 하는 수준으로, step-by-step 디버깅 툴이 없다는 게 실제 코드를 작성할 때 힘들게 느껴질 수 있겠다.
그럼에도 불구하고 SKILL programming을 해야 하는 이유
위에서 설명한 것과 같은 어려움에도 불구하고 레이아웃 엔지니어라면 간단한 SKILL이라도 짜 봐야 한다는 게 필자의 생각인데, (오해는 마시길, 쥴리도 잘은 못짬 ㅠㅠ)
일단은, 복잡한 레이아웃 작업을 효율적으로 처리할 수 있다는 장점이 있는데, 공정이 FINFET 처럼 복잡해지면 한 블럭의 레이아웃을 완성하는 데 걸리는 시간 자체가 기존의 Planner TR과는 비교할 수 없이 길어지게 되었기 때문이다.
이렇게 길어진 레이아웃 시간을 최대한 줄이기 위해서는 SKILL을 이욯하여 효율적인 방법을 찾는 게 바른 길이 될 것이다.
또한, SKILL program을 통해서 반복된 작업을 줄일 수 있기 때문에 레이아웃 시간도 줄여 줄 수 있지만, 에러의 확률 또한 획기적으로 줄여 줄 수 있다.
PCELL 같은 자동화 기능을 적용 가능하다면 금상첨화인데, 당장 레이아웃 채용이라고 검색을 해 보자.
거의 대부분의 레이아웃 경력직 채용란에는 SKILL 가능한 엔지니어 우대, 혹은 PCELL 제작 가능한 이를 우대한다는 항목을 발견할 수 있을 것이다.
평소에 간단하더라도 SKILL programming을 꾸준히 연습하고 적용한다면 이력서에 SKILL program 및 PCELL 제작 가능하다는 한 줄을 넣을 수 있고, 이직할 때 무척 유리한 상황이 될 수 있다.
추천하는 SKILL 학습 자료
SKILL은 문서가 방대하기 때문에, 처음부터 무엇을 봐야 할지 막막할 수 있지만, 개인적으로 SKILL을 배우고자 하는 엔지니어들에게는 다음 세 문서를 먼저 추천해 본다.(사실 필자가 요즘 보고 있는 자료들...)
- Cadence SKILL Language User Guide
- SKILL의 기본 개념과 문법을 알기 쉽게(?) 설명한 가이드로, virtuoso document list에는 아마도 sklanguser 디렉토리에 있을 것이다.
- Cadence SKILL Language Reference
- 함수별로 세부 설명이 정리되어 있어, SKILL program 작성 시 사전처럼 참고하기 좋다. virtuoso document list에는 sklangref 디렉토리에 있을 것이다.
- Virtuoso Parameterized Cell Reference
- PCELL을 만들 때 꼭 필요한 기본 구조와 주요 함수들이 정리되어 있으므로 PCELL 을 짜고 싶을 때는 위의 두 문서 다음으로 읽어보면 좋다. virtuoso document list에는 pcellref 디렉토리에 있을 것이다.
이 세 문서부터 차근차근 읽어보면, SKILL을 이해하는 데 큰 도움이 되는데, 사실 이 세 문서 사이에도 중복되는 설명이 아주 많으니 넘길 것은 넘겨 가며 보면 된다.
실제 SKILL 예제를 찾는 방법
실제 코드 예제를 보고 배우고 싶은 분들께는 Cadence 공식 홈페이지의 커뮤니티 포럼을 추천한다.
일단은 cadence 홈페이지에 접속 후 회원가입을 한다.
회원 가입 후 로그인에 성공했다면, Support → Community Forums → Custom IC SKILL 카테고리로 이동하여 탐색해 보기로 한다.
이곳에는 전 세계 엔지니어들이 공유한 다양한 SKILL 코드 예제와, 유용한 팁들이 가득한데.
가끔 Cadence 직원들이 직접 답변을 남기기도 하고, 재수가 좋으면 내가 짜고 싶었던 SKILL code를 바로 찾을 수도 있는 곳이니 최대한 활용해 보도록 한다.
쥴리도 이정도는 포럼에 있겠다 싶은 것은 직접 짜기 전에 먼저 이곳을 뒤져보는 편.
앞으로 보안에 관련없는 내용들로 간단한 SKILL progam 또는 유용한 함수를 소개해 볼 수 있므면 좋겠다는 개인적인 바람이 생겼다.
그러기 위해서는 필자도 열심히 짜 봐야 할 것 같다.