Category Archives: SoC & IP design

verilog-mode: verilog coder를 위한 Emacs의 친구..

태초에 두가지 에디터를 종교로 삼는 집단이 있었으니, 한 부류는 vi를 숭배했으며 또한 부류는 emacs를 숭배하였다.

종종 신앙으로까지 불리울 정도로 [[Emacs]]나 [[vi]]는 폭넓은 사용자 층을 지니고 있습니다. 물론, 국내에서는 unix/linux환경보다는 압도적인 PC환경이고, 설계도 왠만하면 PC에서 수행하려는 경향이 강한지라.. [[ultraedit]]나 [[acroedit]]를 좋아하시는 분들이 더 많습니다.

물론, 한번 빠져들면 종교가 될 정도로 강력한 vim+ctags 의 조합은 대부분의 PC용 에디터보다 훨씬 좋았습니다. 그러한 종교를 개종 시킬만큼 강력한 강적이 나타났으니 바로 [[verilog-mode]] 입니다.
최근 [[linux]]의 emacs에는 대부분 verilog-mode가 같이 깔려 있는데, 특히 top module에서 하위 모듈을 instantiation할때 엄청나게 편합니다!!!!!

간략하게 설명드리자면, [[verilog]] mode는 emacs에서 사용되는 verilog 입력 모드인데, AUTO라는 강력한 기능이 있습니다. 예를 들어, /*AUTOARG*/같은 경우

module aaa(/*AUTOARG*/);

와 같이 적어두고, 필요한 입출력들을 기술하면 module의 argument는 자동적으로 생성됩니다.

가장 강력한 기능이라 생각하는 부분은 /*AUTOINST*/기능인데, 이 기능은 만일 aaa라는 모듈을 instantiate할때

aaa U0_aaa(/*AUTOINST*/)

라고만 적어두면, 자동적으로 aaa.v를 읽고, 그 입출력을 분석해서 /*AUTOINST*/라고 되어 있는 부분에 name based instantiation을 수행합니다.

회사 후배들에게 농담으로 하는 말로, 1시간은 낑낑댈거, 10초면 합니다. 단순히 Ctrl-C, Ctrl-A를 눌러서 원하는 하위 모듈을 instance할 수 있으니까요. 그래서, 재미삼아 xemacs에서 verilog mode를 한번 쓴 이후에는 계속 emacs에 적응중입니다. (물론, vim에서 emacs batch command로 설정해서 verilog mode를 사용할 수도 있습니다. 그런데, 스타일이 별로입니다. (탭이 들어가죠..전 탭을 싫어해서.))

emacs 자체도 상당히 강력한지라 (역시 종교라니까요~), 즐겁게 작업할 수 있습니다.

개인적으로는 verilog mode의 단점으로 몇몇 환경 설정에서 단점이 보였습니다.
우선, /*AUTOARG*/ 나 /*AUTOINST*/ 에서 출력, 입력 순으로 나열되는 것입니다.
이건, 사실 예~~~전의 primitive를 만들때의 design rule이고, 요즘 RMM 룰로 보았을때는 클럭,리셋,입력,출력의 순이 되어야 정상인데 말입니다.

그래서, input/output 순서가 가능한한  RMM의 형식에 맞도록 수정된 verilog-mode를 만들어 봤습니다. Lisp를 잘 몰라서, 대충만 바꿨지만 쓰는데 문제는 없어 보입니다.

또, 국내 실정상 linter를 잘 쓰지 않기 때문에 이 부분은 nc-verilog에서 문법 체크만 하는 옵션으로, 헤더는 개인적인 license헤더로 수정되어 있습니다.  필요한 경우 그 부분만 수정하시면 되겠습니다.

verilog-mode에 유용한 자료로서, 저자가 SNUG에서 발표한 verilog-mode의 간략한 설명입니다.

이걸 보시면, verilog-mode가 어떤것인지 아주 쉽게 이해가 되실것입니다.
.. 여담이지만, 외국 SNUG에서는 이런 좋은 발표가 많은데… 유독 SUNG korea의 경우는 좀 약한 면이 없잖아 있어서 아쉽습니다.

verilog mode에 대한 자세한 사항은 http://www.verilog.com/ 혹은 http://www.veripool.com/ 에서 해당 자료를 얻을 수 있습니다.

프로세서/비메모리 반도체 설계를 희망하시는 분들께..

간혹, 학부의 후배들이 반도체 설계쪽 일을 하려면 어떻게 해야 하냐고 물어보더군요.
뭐, 저같은 경우는 해당 연구실에 들어가라고 하지만.. 참 추상적인가 봅니다.

비메모리 반도체라는 것은 사실 상당히 넓은 범위를 의미하므로, 제가 하는 쪽 분야 즉, 로직 설계 부분(소위  front-end라고 하는..)에 대해서만 이야기를 하고자 합니다.

학부때 필수적으로 알아야 하는/혹은 들어두어야 하는 과목들은 다음과 같습니다.

1. 디지털 로직: 로직에 대한 기본이 있어야만 이 일을 제대로 할 수 있습니다. 어려울거 없고, 학부 정도의 디지털 로직 부분의 기초만 탄탄하면 됩니다. 사실 디지털 로직은 대학의 전자공학/컴퓨터 공학과에 처음 배우는 것이고 그 이전의 배경지식이 필요없으므로, 가장 편한 과목중의 하나입니다.

2. C/C++ , 컴퓨터 언어: C/C++는 사실 엔지니어간에 있어서 기본 언어입니다. (그야말로 언어! 입니다.) 어떤 동작을 구현하자.. 이런걸 그냥 C/C++로 짜서 전달하는 경우도 많습니다. 그리고, C의 경우 컴퓨터 구조를 많이 포함하고 있어서 도움이 됩니다.

3. 컴퓨터 아키텍쳐: 컴퓨터 아키텍쳐는 딱히 프로세서 설계를 지망하지 않더라도, 하드웨어 설계에 필요한 I/O 프로토콜등의 기본적인 대부분의 지식이 들어 있습니다. 하드웨어 설계를 지망하시는 분들께는 매우 매우 중요한 과목입니다. 소프트웨어 하시는 분들도 “최적화된” 소프트웨어를 작성하시는데 아키텍쳐의 지식이 중요합니다.

아마도 위의 3가지 과목은 하드웨어 설계를 희망하시는 분들께는 가장 중요한 기본 과목이 아닐까 생각합니다. 또한 위의 과목은 “소프트웨어 개발”을 하고자 하시는 분들께도 중요합니다.

하드웨어 설계를 하시고자 하시는 분들은 이외에도 아래 과목을 반드시 들어야 합니다.

디지털 설계: 학교마다 이름이 다릅니다만, 실무적인 일들.. HDL을 다룬다던지 하는 첫 과목입니다. 조금 진보적인 교수님들은 디지털 로직 과정에서 HDL을 다루기도 합니다만..  HDL을 배울때는 반드시 HDL로 로직을 만들었을때 어떻게 구현될 것인가.. 즉 어떤 회로가 나올 것인가를 배워두는 것이 좋습니다. 🙂
게다가 HDL은 하드웨어 설계를 하시는 분들에게는 주된 설계 방법이므로, verilog던 VHDL이던 한가지는 “정통하게” 배워두시는 것이 좋습니다. 그리고, 다른 언어도 읽을 수 있을 정도는 되셔야 합니다.

교양적으로 들어야 하는 과목은 무수히 많습니다만..

  • 전기회로/전자회로/물리전자: 설계시에 여러가지를 이해하는데 많은 도움을 줍니다.
  • 신호처리/디지털 신호처리: 요즘 프로세서가 대부분 신호를 다룹니다. 그래픽, 영상, 음성.. 이런것에 대한 알고리즘을 하드웨어로 만드는 일이 많은데.. 이런일을 하게 될때 도움이 됩니다.
  • 디지털 통신: 통신 프로토콜을 아는 것이 I/O등의 프로토콜을 만ㄴ드는데 참 많이 도움이 됩니다. 물론, 이쪽 설계를 하는 경우도 많고요..
  • 소프트웨어공학: 의외시겠지만.. 소프트웨어 공학에서 배우는 team work 개념은 회사에서 일할때 많은 도움을 줍니다.

실무에서 도움을 줄만한  것들로는

리눅스/유닉스 관리도 해보셨으면 도움이 되고요.. 스크립팅 언어를 배워두는 것도 중요합니다. 노가다를 줄이기 위해서.. ^^;

아마도, 제가 있는 비메모리 설계 분야가 인력 부족을 심하게 겪고 있는 분야가 아닌가 생각됩니다. 발전 가능성도 많고요.. 잘 아시는 대기업들과 많은 중소기업들이 이쪽 분야에 많이 배치되어 있습니다.
위에서 보셨겠지만, 수학/물리의 기본이 적더라도 시작할 수 있는 분야이기도 합니다. 🙂

많은 분들이 도전하셨으면 합니다.

시납시스의 여전한 이야기.. SNUG Seoul 2006, MiniDAC

HDL을 이용해서 로직을 설계하고, 비메모리 반도체 만드는 사람들에게 있어서 필수 설계 도구(CAD)툴로는 synopsys의 design compiler를 들수 있겠습니다.

로직 합성 분야에서 약 90%이상의 점유율을 보이고 있는 것으로 조사(ESNUG에 따르면)되고 있으니, 거의 표준 설계 도구겠지요..

이 synopsys에서 오늘 miniDAC을 진행했습니다. babyworm은 이런 쇼를 좋아하는 편이라 올해도 빠지지 않고 갔지요. 시납시스에 있어서 가장 중요한 이슈는 이제 더이상 로직합성이 아닙니다 (가장 중요한 돈 벌이도구임에는 틀림없고, 여전히 중요합니다만..).
전체 설계 과정인 “HDL설계 및 시뮬레이션” -> “로직 합성” -> “auto P&R” 과정에서 중간에서 압도적인 점유율을 가지고 있고, 가장 중요한 과정을 잡고 있는 시납시스는 요즘 auto P&R부분에 상당한 신경을 쓰고 있습니다.
즉, HDL 설계 이후의 모든 과정을 점유하고자 하는 의욕을 보이고 있고, 그 성과는 아주 가시적으로 보입니다. auto P&R에서 한창 잘 나가던 apollo라는 툴을 가지고 있던 avant!사를 인수합병하면서, 새롭게 astro라는 툴을 내놓았고(사실 거의 apollo와 비슷했습니다.), 이제는 design compiler의 GUI인 design vision과 유사한 모양새를 가진 IC compiler를 주력으로 만들었으니까요.

시납시스에서는 Galaxy Design Platform을 표방하고, 로직 합성과 physical synthesis, P&R 과정을 하나의 플랫폼으로 동일한 DB를 묶는 큰 과정을 벌이고 있습니다.

이러한 과정은 예정되어 있던 수순이라고 할수 있는데, 좀 아쉬운 면이 있습니다.
사실 2년전쯤에 ESNUG에서는 RTL2GDSII라는 툴로 시끌 시끌했습니다. 위의 모든 과정을 하나로 묶는 굉장한 툴을 시납시스에서 개발중이라는 루머가 흘러나왔고, 이 툴이 IC-Compiler라는 이름으로 이름 지워졌다는 이유였습니다.

하지만, 공개된 결과는 실망스럽게도 Design-Compiler부분을 건드리지 않는 방법(하지만, design compiler 에서 virtual P&R을 하면서 정밀도를 높이는 – topological synthesiss – 방법을 사용하는)을 이용하는 것으로 결정되었기 때문입니다.
사실, 현재의 모양도 거의 합성 과정에서 P&R이 고려되고, P&R과정에서 합성도 병행되므로 합치려 했다는 말이 설득력이 있으며, 합치는 것이 더 맞겠지요..
아마도, 두가지 툴을 합치면 과도한 프로그램 값을 받아야 한다는 압박감.. (이 전체 플로우를 합치면 툴값만 한 10억하니까.. 여러툴에 10억을 지출할 회사도 1툴에 10억을 지출할 회사가 많을까.. 하는 의구심이랄까요.. 게다가 로직합성까지만 하는 회사도 많고, p&r만하는 회사도 많으니까요..), 혹은 수익에 대한 고려.. 이런게 아니었을까 싶습니다.

시납시스의 최근 miniDAC은 power minimization, 특히 clock gating/(MTCMOS를 이용한) power gating.
DFM에서 더 나아간 DFY. DesignWare (verification) IP, system verilog에 대한 적극적인 지원.. 이렇게 진행됩니다.

사실 첫번째 아이템은 항상 제가 관심을 가지고 보는 것인데.. 사실 power gating의 경우 공정에서 지원해 줘야 하는 것이니.. 좀 어려움이 많고요.. (TSMC와 같은 leading fab이 아닌 경우 별로 지원 안해줍니다…)
clock gating에 필요한 ICG cell도 사실 SMIC나 GSMC모두 구하기가 상당히 어려웠습니다. (말도 안되는 이야기같지만, 디자인 하우스의 이야기를 믿자면.. 국내에서 저희회사에서 처음으로 요구했다네요.. 왠지 신뢰가 안가는 말입니다.. clock gating은 외국에서라면 자주 쓰는 건데 말입니다… 아무 둘러댄거 아닌가 생각하는데, 사실이라면 좀 심각합니다.  )

DFM, DFY는 physical synthesis, P&R에서 고려되는 부분이니, 저희 같은 front end회사는 좀 밋밋한 느낌입니다. (볼때마다.. 아~ 그래야지~  그런 느낌이랄까요)

DesignWare verification IP를 국내에서 대기업말고 쓰는 곳이 있을지 좀 의문도 들구요.. ^^; 워낙 비싼데다가, 국내 ASIC회사중에 그정도로 검증에 대한 인식이 있는 회사가 있을까요?

System Verilog에 대한 지원은 좀 의외이긴 합니다. 사실 SystemC가 synopsys/cadence의 지원으로 커가고 있는 중이어서, 예전에 systemC에 대한 지원을 시납시스에서 줄일 예정이라는 말을 들었을때… “에이~ 거짓말~”.. 그랬는데.. 사실인지도 모르겠습니다.

SCV를 필두로 cadence의 영향력이 systemC에 커지는 것이 별로 보기 안좋게 여겨져서, system verilog에 대한 지원을 강화하는 걸로 나타났는지도..

사실 miniDAC에 가면 선/후배들을 볼 기회가 많아서 오랫만에 사람보는 재미도 있고 합니다.

오늘의 miniDAC에서 생긴 수익은…바로.. 이겁니다.

시납시스에서 준 타거스 가방

가끔은 이맛에 CAD vendor쇼에 갑니다.