Tag Archives: PERL

Perl을 이용해서 검증할때 유용한 팁

뭐랄까요.. 요즘 이런 저런 일로 바쁘다보니, 사람이 좀 얇팍하게 글을 쓰게되네요. 🙂
(퇴고 없이 그냥 온라인에서 쓰는 글이라 앞뒤가 없을지도 모르겠습니다.)

오늘은 여러분들께서 perl을 이용해서 Verilog HDL을 위한 testbench를 작성할 때 간단히 명령어 해석기를 만들어 사용하는 방법을 알려드리죠.

이 방법은 제가 JTAG을 위한 protocol을 만들다가 생각해낸 방법인데요.. 아주 유용하게 쓰고 있습니다.
얼마전 AXI FileReader와 같은 간단한 명령어 해석기가 필요할 때도 쉽게 적용할 수 있구요.

예를들어, JTAG을 위한 몇몇 명령을 만들고, 이 명령을 이용해서 HDL model을 위한 신호 입력으로 변환시키는 과정을 생각해 봅시다.

1. 필요한 함수를 정합니다.
대충 다음과 같은 함수를 쓸 수 있겠지요?


rtnval = get_id();
do_intest(serin);
do_extest(serin);


2.
해당 함수를 perl에서 subroutine으로 만들어갑니다.
뭐, subroutine을 만드는 방법은 쉽죠?

3.
이 부분이 제일 중요한데요..


xxx.pl <filename.input>

이런식으로 처리하려면, 중간에 다음과 같은 루틴을 넣어줍니다.


do “$ARGV[0]”;

위의 한 행은 해당 파일($ARGV[0])에 지정된 “perl” 명령어들을 읽어와서 해석하는 부분입니다.
즉, 여러분께서 “filename.input” 이라는 입력 파일에 앞에서 작성한 subroutine을 “명령어 사용하듯” 적어두면, 이것이 perl script에서 읽혀서, “명령어를 해석하듯” 동작하게 됩니다.
이렇게 함으로써, 파싱하는 부분을 생략하고도, 그럴듯하게 명령어 해석기처럼 하나의 perl 스크립트를 만드는 것이 가능합니다.

이제 이러한 perl script에서 어떻게 HDL 테스트 벡터를 만들어내는지 생각해 봅시다.
간단히 생각할 수 있는 것은 두 가지 인데요.
첫번째는 ROM file형태로 만들어버리고, verification을 위한 testbench에서는 $readememh()를 써서 읽은 다음에 한 클럭에 하나의 신호 그룹을 뿌리는 방법이구요..
두번째는 각 subroutine에 printf FOUT 과 같은 file output을 사용해서, 간단한 verilog testvector를 만들어내고, 이를 verification을 위한 testbench에서 `include “xxx” 명령을 이용해서 읽어들이는 방법입니다.

둘 다 간단하죠?

한 마디로, perl을 이용하면 C로는 어렵게 해야 할 일이 아주 아주 편해지는 일이 많습니다. 그래서 verification engineer들에게 perl과 같은 scripting 언어가 사랑받는 것이겠죠.

오라일리의 perl책 세권.

perl을 잘 지원해주는 출판사인 오라일리(perl.com과 같은 사이트도 운영하죠)의 perl책 세권이 있습니다. 
(저는 개인적으로 낙타 대가리들이라고 부르곤하죠.. ^^; 근데, 왜 쿡북에는 산양이지요? )

perl을 주된 언어가 아닌 스크립팅 언어로 사용하는 엔지니어의 입장에서 각각을 리뷰해보도록 하겠습니다.

PERL 프로그래밍

이 책은 가장 기본적인 책입니다. 그리고, 가장 잘 설명된 책입니다.
하지만, 인간적으로 너무 두껍습니다. ^^;
즉, perl에 대해서 깊이 있게 보실분들께는 좋습니다만 저와 같이 간략한 스크립팅 언어로 사용하는 사람에게는 좀 무리가 있죠.. 재미삼아 읽기엔 말이죠.  펄에 대해서 제대로 아시고 싶으시다면 이책을 선택하십시요.

PERL 제대로 배우기

이책은 위 책의 좀 간략본이랄까요? 그런 책입니다.
단, 아무런 기초없이 보기엔 좀 무리인 책이기도 합니다.
프로그래밍 언어를 체계적으로 설명하는 맛은 없는 책이거든요.
웹페이지들에서 기본적인 perl문법은 익혔고, 가끔 문법 사항을 (빠르게) 볼일이 있다면 이책을 추천합니다.
그러나, 일반적인 목적으로는 추천하지 않는 책입니다.

Perl Cookbook

펄 계의 이단자.. 산양 머리 책입니다. ^^;
저같이 이런 저런 짜집기 코드를 만들어내는 사용자에게는 최고의 책입니다.
펄 스크립트를 짤 일이 있으면, 이책에서 알맞는 예제가 있는지 본 다음 주르륵보고, 비슷 비슷하게 작성하는 패턴을 쓰고 있습니다.  하기야 제가 사용하는 부분이 몇몇 간단한 루틴과 정규식의 조합, 가끔 시스템 명령 몇가지 정도니까요..

ASIC하시는 분이 perl을 익혀야겠다. 그리고, 써봐야겠다.. 라고 결심했다면..
우선 한국 펄 사용자 모임에 방문하셔서 간단한 사용법을 봅니다.
그리고, 펄 쿡북을 사십시요. ^^;

책 두권을 사야겠다라고 하면 perl 프로그래밍 책과 펄 쿡북을 사십시요.

책은 사기 싫다면, 펄사용자모임과 CPAN을 방문하십시요.

perl 과 tcl.. 개인적인 느낌..

 아마도 ASIC 엔지니어,그리고 경력이 좀 된다면 다들 간단한 쉘 프로그래밍이나, perl이나 tcl 정도는 다룰줄 아시리라 생각합니다.

부끄럽게도 저는 정말 간단한 정도의 할 줄 알다가, 1~2년 전부터 TCL을.. 1년전부터 perl을 좀 제대로 쓰고 있습니다.
예전에 했던 TCL은 사실 TK때문에 했던 것이라 상당히 간단한 수준이었고, 요즘에는 synopsys툴을 비롯한 많은 CAD툴에서 TCL 기반의 scripting을 지원하는 관계로 자주 쓰게 되었습니다.
잘쓰던건 아니지만, 예전에 했던 가닥이 있어서 그나마 쉽게 적응했지요.

TCL은 말 그대로 많은 툴에서 지원되고, 툴내에서 프로그래밍에도 편하고, 거기다가 TK라는 강력한 원군의 도움으로 ASIC 엔지니어에게는 이제 “필수”언어가 되었다고 생각합니다.
혹, ASIC 엔지니어를 지망하신다면, tcl은 배워두시는 것이 편하실 겁니다.

perl은 reporting language라는 이름 그대로, 문자 처리에 있어서는 발군!입니다.
사실 예전에는 노가다성 코드를 C로 작성해서 test bech같은것을 만드는 일이 많았는데, 요즘엔 대부분 perl로 처리합니다.
perl에 한번 물들고 나니, 왠만한 작업도 그냥 쉘 프로그래밍 안짜고 perl 기반으로 작업을 하게 된다는 엄청난 중독성이 있더군요.
강력한 정규식의 지원뿐만 아니라 수많은 확장과 간단한 문자열 처리!

설계자들에게는 정말 좋은 언어라고 생각됩니다.
perl과 verilog와의 조합을 위한 여러가지 준비도 http://www.veripool.com/에 상당한 수준으로 되어있으므로, 사용하시기에 어려움이 없으실 듯 합니다.

웍에서 perl 가지고 작업하다가.. perl을 찬미하고픈 마음에 갑자기 씁니다.