Tag Archives: PLI

verification 시작..

예전에 99년에 학교에서 첫 버젼의 [wp]EISC[/wp]를 만들때는 검증에 별 생각이 없었습니다.
뭐, 프로그램 몇개 돌리면 되겠지.. 이런 느낌이랄까요..


생각해보면, 학교에서 만드는 것은 “학술적으로” 의미가 있는 부분에 대해서는 뭔가 이런 저런 시도를 해 보는데, 실제 중요한 동작 자체는 “벤치 마크 프로그램이 돌아가는” 정도로 그치고 말았었습니다. 그러다보니, 다양한 상황에 대한 검증이나 인터럽트 쪽은 아무래도 부족했었습니다.

학생 시절과 비교하였을때 회사에 와서 가장 많이 발전한 부분이라 생각하는 것은 “설계의 질”입니다. 특히, 검증의 질이 많이 향상되어가고 있고, 이를 바탕으로 설계의 질이 향상하는 것이겠지요.
회사에서 “검증의 중요성”을 심각하게 느끼게 되었고 몇년동안 이런 저런 검증 기법들을 적용하기도 했는데, 아무래도 실무에서 의미있는 결과가 나오기에는 미흡한 상태였습니다.
게다가 국내에서는 검증을 업으로 삼으시는 분은 상당히 적으신듯해서 여러 분들과 만나서 의견을 나눠봐도 “검증의 중요성”은 인식하지만, 검증을 업으로 삼는 분(소위 verification engineer)은 아직 만나보지 못했습니다. 음.. S사나 L사 같은데는 있을지도 모르겠습니다만.. 외부로 노출이 안되는 것인지.. 논문도 그렇고.. 설계하시는 분이 검증도 같이 하는 경우가 더 많죠.. (혹시 검증을 업으로 하시는 분계실까요?)

여하튼.. 이번 프로젝트에서는 제가 수행하는 설계 분량을 최대한 줄이고, specification과 verification쪽으로 집중하려고 하고 있습니다. 하지만, 프로젝트라는 것이 항상 그렇듯(^^) 잡은 일정보다 스펙 작성이 오래걸렸고..이런 저런 일을 하다보니, 이번달에 들어서야 이 프로젝트에서 제 관심의 대상이었던 verification쪽에 집중해서 verification plan을 짜고 있습니다. (사내 정보 보안 관계로 ^^; 일반론 이상을 이야기를 할 수는 없습니다만..)

이런 과정에서 Verilog PLI이니 [wp]assertion[/wp]이니, [wp]SCV[/wp]와 같은 것을 다룰 수 있는 기회가 많아지겠지요..^^;

Verilog 관련 검색에 대한 친절한(?) 답변과 리퍼러 로그..

요즘에 리퍼러 로그를 보니, 검색을 통하여 들어오시는 분들이 상당하시군요..
(덕분에 gzip 플러그인을 통해 전송량을 절반으로 줄여놨었지만, 다시 트래픽이 차오르고 있습니다. ㅠㅠ; 물론, 많은 분들이 찾아주시는 건 좋은 일이지요.. 이 분야에 관심 있는 분들이 많다는 것이니까요..)

이 포스팅은 리퍼러 로그에 남은 검색어를 통하여 살펴본, 제 블로그에 방문하시는 분들이 관심을 가지는 것에 대한 친절(?)한 답변들입니다. ^^;

verilog 관련
가장 많은 검색어는 verilog/VHDL 입니다. 요즘에 이걸로 수업받으시는 분들이 많고, 요즘이 term project 철이라서 검색 순위가 급증하고 있는 것이 아닌가 생각합니다.

* Verilog와 VHDL중에 어떤것이 더 좋은가..
둘 다 좋은 언어입니다. verilog가 “설계”라는 목적에 좀더 부합하고, VHDL이 “검증”에 더 편리한 기능을 제공합니다. 개인적으로 생각하기에 verilog가 설계만 따진다면 더 편하다고 생각합니다.

* VHDL -> verilog변환, verilog ->VHDL 변환
가끔 뉴스 그룹에서 이거 변환 프로그램 찾으시는 분들도 봤는데, vhdl2v 같은 전용 변환 프로그램이 있기는 합니다만, 시도해보시면 상당한 스트레스를 받을 것이라 생각합니다.  ESNUG에 나온 내용을 붙이자면, 잘 안된다! 입니다.

[#M_ESNUG내용보기|less..|http://www.deepchip.com/items/0386-11.html
Hello John,

I’m scrambling my head over this…

I am using VHDL-2-Verilog translator by ASC.  I could not translate my
functions from VHDL to Verilog — they are simply skipped!

My VHDL source code has a package which has some function declarations
(eg. calculate_lrc(data)) and definitions in it.  The problem is when I try
to convert the package or code from VHDL to Verilog, the functions are
skipped.  So the verilog file just has constants and no “function”, as if
there was no function declaration in the original file.

I tried using -Function_Map option but it would only allow me to keep the
original function call but the parameters are skipped.  Also no function
conversions.

So does ASC’s vhdl2v not support function and procedure conversions from
VHDL to Verilog?

  – Rakesh Mehta
     Nortel Networks
_M#]

대안으로는 verilog나 vhdl이나 동일한 중간 포맷으로 해석해서 사용하는 툴을 쓰는 건데..
제가 사용해본 것은 Summit design의 visual HDL로 변환하는 것이었는데, 역시 structural 설계는 잘되는데 약간 behavioral하게 설계된건 잘 안되었습니다.

만일 동작만 보면되고, 안의 내용은 필요없다! 라고 생각하신다면, synopsys에서 합성한 후에 원하는 format으로 netlist를 출력해서 시뮬레이션에 사용하는 것이 제일 속편합니다. 물론, simulation용 라이브러리를 물어야 하지만 말입니다.
(뭐, 요즘엔 ncsim이나 modelsim이나 모두 VHDL/Verilog를 single kernel에서 시뮬레이트해서 이런 필요는 없겠지만.. 라이센스 문제가 아닌 이상엔 말이죠..)

* verilog에서의 #
위의 문법은 원하는 만큼 지연을 발생시키는 것입니다. 합성시에는 무시됩니다.

* verilog에서의 <=과 = 의 차이
blocking assignment와 non-blocking assignment를 혼동하시는 분들이 생각보다 많은데요..(저도 verilog 처음에 잘 몰랐습니다.) blocking assignment는 “시간이 흐르지 않는 상태(흐르지 않게 block하면서)에서 값이 저장된다”이구요.. non-blocking assignment는 “시간이 흐르면서 값이 저장된다” 입니다.
즉, 아래와 같은 연속된 assign의 경우 위의 blocking을 사용하였을때 d는 a의 값을 가지게 됩니다. 값의 할당 자체에 시간이 소모되지 않도록 하나의 할당이 끝날때까지 시간을 멈추기 때문입니다…
그런데, 밑의 nonblocking 예에서는 “값을 할당하자”라는 것은 현 시점에서, 값이 갱신되는 것은 delta delay이후에 이루어지게 됩니다. 왜냐하면, 값이 할당되든 안되든 값을 할당하겠다는 3개의 문장을 모두 보고나서 delta delay이후에 값이 갱신되기 때문이죠.

[CODE]b = a;
c = b;
d = c;

b <= a;
c <= b;
d <= c;[/CODE]

이해 되시려나요?

* verilog PLI 관련
예전에 계속쓰려다 잠시 중단되었는데, PLI 관련 내용은 요즘에 제 작업 관계로 앞으로 1~2개월동안 자주 올라올 확률이 높습니다. 테스트 벤치 생성 유닛과 scoreboard를 C로 만들고 이걸 verilog PLI로 연결할 예정이거든요..
기대하셔도 좋을듯..

다른 검색을 통한 리퍼러 로그..
Design Compiler와 VCS, Modelsim에 대한 검색이 많았습니다.
사실, 툴에 대해서는 소개나, 새소식만 하고 있어서 별다른 내용이 없었는데 말이죠.. ^^;
참.. 시뮬레이션 하는 방법은 quick reference guide를 살펴보시면 쉽게 하실 수 있습니다. ^^;

프로세서에 대한 검색으로 들어오신 분들도 많았습니다. intel, AMD, ARM, calmRISC, M-Core, EISC(감사합니다.)
블로그에 좀더 프로세서에 관련된 좋은 내용을 적을까 싶기도 한데.. 이쪽 분야 하시는 분이 워낙 적어서 누가 관심이 있을까.. 라는 씨니컬한 마음이 될때도 있습니다. ^^;

아.. 특이한것이 virtual UART를 검색해서 들어오신 분이 계시던데..
제가 이 블로그에서 PLI + TCL/TK를 조합한 virtual UART라는 걸 만든적이 있다고 말씀을 드린적이 있는데, 검색해서 들어오신분은 아마 회사분이 아니실까 생각합니다. 회사분이시라면 인트라넷에 올라간 virtual UART 관련 메뉴얼을 참조하세요.. 소스코드와 작성법이 다 있으니까요..^^;

찾아주신 분들 모두 감사드립니다.

verilog HDL, System Verilog, system C, e, vera.. PLI

대충 ASIC 엔지니어들이 사용하는 언어들이죠..

아니! VHDL을 빼 먹었잖아~! 하고  말 하시는 분도 있겠지만, 개인적으로 석사 3학기때 이후로 VHDL은 안쓰고 있는지라, 잘 몰라서 그렇다.. 라고 생각하셔도 좋겠습니다.
또한, 개인적으로는 VHDL이 verilog에 비하여 많은 부분에서 상당히 밀리고 있으며, 그것이 요즘 경향이라고 생각하고 있는 점도 없지않아 있습니다.

VHDL 사용자 분들은 VHDL의 유연함과 OOP적인 요소를 장점으로 꼽으시는데, 예 맞습니다. ^^;
근데, VHDL의 유연함과 OOP적인 장점은 검증이나 description에서는 편하지만, 설계 자체에 있어서는 그리 편하지 않지요..
verilog HDL의 장점은 말 그대로, 간단히 설계할 수 있다는 점 아니겠습니까.

96년도 정도에는 VHDL이 세상을 곧 지배할 것 같았지만, 사실 95년도에 verilog가 IEEE표준이 되고, 열약했던 시뮬레이션 툴들이 (네, verilog-XL이 있습니다만, 다른 대안이 없었지요..) 정비되면서, 실무쪽에서는 거의 verilog HDL로 정리된것 같습니다.

학교쪽에서야 아직 VHDL을 많이 사용합니다만.. ^^; 학교 이야기겠구요..

오늘 주절히 주절히 ASIC에서 사용되는 언어들을 제목으로 단 것은 바로, verilog의 약점인 검증 부분을 채우기 위한 노력들입니다.
verilog HDL은 verilog 2001이라는 새로운 표준에서 검증을 위한 다양한 기능과 좀더 편한 설계를 위하여 보강하고 있으며 (이 부분에 대해서는 예전 posting인 verilog HDL 2001을 보세요~), 좀더 강력한 기능으로 system verilog를 정의하였습니다.

system verilog는 강력한 assetion과 더불어 데이터 구조의 지원등으로 설계쪽 보다는 검증의 편의성을 노린 흔적이 역력합니다.
이는 최근에 역시 IEEE표준으로 지정된 검증계의 기린아 ‘e’ 언어를 노리고 있는 것이 거의 확실한듯 합니다.
아직은 e과 약간 다른 전장을 놓고 다투고 있습니다만, 거의 다가갔죠.. 전운이 감도는 시장입니다.
물론, e가 cadence를 위주로 지원되고 있다면, system verilog는 좀더 많은 EDA업계의 지원을 받고 있으니까 약간 더 유리하지 않을까 하는 생각입니다.

단, 그동안 e 언어가 가지고 있던 그 화려한 경력과 know-how가 가득담긴 코드들이 있으니, 최종 일전이 어떻게 될지는 모르겠습니다.

vera의 경우 synsopsys가 밀어주는 검증언어인데, 상대적으로 VCS가 약하니까 덩달아 사그러드는 느낌입니다. 몇년전 부터 vera spec을 open하고 openvera를 퍼트리려고 노력중인데, 아직 멀었습니다.
e 언어가 공개되기 전에 하지.. 아쉽…

한때 차세대로 불리우던 systemC가 있군요..
뭐, 아직도 차세대 system C라고 해야 할까요?
설계 언어로서는 좀 그런것 같구요.. (synthesiable subset만으로 설계하느니 verilog로 하는게 100만배 쉽습니다. ^^; 역시 각각에 분야에 맞는 것이 있는 것이죠) 최근에는 cadence에서 낼롬 기증한 SCV(예전의 testbuilder인데, 일부를 기증해서 표준화 했습니다.)를 필두로, 검증을 위한 환경으로는 폭넓게 받아들여지고 있는 듯 합니다.

아무래도, coverification의 관점에서도 C기반의 interface가 지원되는 것이 편하니까요..

system C와 verilog간의 co-simulation에 약간 그림 이쁘게 보여주고, 좀 쉽게 해주는 것에 여러 회사가 도전중입니다. CoWare도 있구요..
뭐, 전반적으로 회사들의 평은 거의 “악평일색”입니다.  놀라운 이야기입니다.
그림 나오고 다 좋은데, 잘 안돌죠.. 아직은 1~2년 정도 지나서 좀더 진화해야 할 듯 합니다.

차라리, PLI에 TCL/TK를 연결하는 것이 이쁘고 좋습니다. ^^; 무료인데다 자유롭죠..
PLI도 재미있고, TCL/TK도 재미있고..
아주 즐겁지 않습니까?

얼마전에 회사에서 재미삼아 virtual UART라는 시뮬레이션때 사용가능한 터미날 프로그램을 PLI와 TCL/TK로 만들었는데, 개인적으로 즐거운 작업이었습니다. ^^;

나중에 이 블로그로 공개될 기회가 있겠죠..