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/ 에서 해당 자료를 얻을 수 있습니다.

3 thoughts on “verilog-mode: verilog coder를 위한 Emacs의 친구..

  1. 회사 웍환경이 아직 solaris 8이다 보니
    emacs보단 vi가 더 접하기 쉽고 또 익숙하기도 한 것 같아요…

    남들이 저런 기능을 쓴 것을 본 건…
    프로젝트 같이 하는 silicon image 사의 alan이라는 아저씨 verilog code…
    xemacs로 저런 기능이 매우 즐겨 사용하는 것 같더라구요…
    처음 verilog 코드 봤을 때 /*AUTOARG*/나 /*AUTOINST*/라는 주석보구 갸우뚱했던 기억이 ^^;;
    하지만 (위에서 말씀하셨듯이) 출력을 입력보다 위에 쓰는 건 별루 맘에 안 들었던 것 같아요~ ㅋㅋ

    1. 저 역시도 솔라리스에서 vim+ctags 조합이 주력입니다. 요즘에 들어서야 xemacs+veriloog_mode 조합을 사용하게된 것이지요. 한번 해보면 상당히 편한점이 많습니다. ^^

  2. 구글로 뒤적거려 보니 바이너리로 설치할 수 있는
    xemacs-21.1.3-sparc-sun-solaris2.6-mule.tar.gz 파일을 발견했습니다…
    그런데 요새 버전이 21.5 이상 나오는 것 같은데요… 사용하는데 괜찮을까요?

    혹시나 싶어 야근해가며 겨우 낑낑 거려서 최신 버전 21.5.27 구해다가 설치하고 나서
    ( http://www.cisl.ucar.edu/nets/intro/staff/siemsen/tools/xemacs/ )
    open 툴바 버튼 눌러 보니…
    Feature not yet implemented: insert-gui-button requires ‘annotations’ package
    라는 메시지 뜨면서 파일열기 창 같은 것이 안 뜨더라구요ㅜ.ㅜ
    뭔가 덜 설정한 것 같은데… 그 이후로는 귀찮아서 안 건들였어요;;

    음… 아직까진 Ctrl이랑 M이랑 조합하는게 익숙하지 않아서…
    C-x C-c 만 써보고는 말았죠;;

    ==================================

    아… 이제 잘 돌아갑니다 ^^
    앞으로 뭔가 여러가지 mode 넣을 수 있을 것 같아요…
    위에서 실수한 것은 잘못된 package를 풀어 넣은 것 입니다;;

Leave a Reply