Category Archives: verification

Related on SoC & IP verification method.

Modelsim에서의 Code Coverage

예전에 후배가 한 세미나 자료에서 그림을 많이 발췌합니다.

 

항상 검증을 언제 끝낼 것인가 하는 문제는 어렵습니다. 그래서, 검증할 때 coverage를 측정하여 검증을 언제 마칠것이냐 하는 것을 참고하게 됩니다. Functional verification때 고려하는 coverage로는 code coverage와 function coverage라는 것이 있는데, code coverage는 RTL 코드에 대한 분석을 기반으로 해당 문장이나 표현, 가능한 데이터 흐름이 현재 사용하고 있는 test program(혹은 stimulus) 에 의하여 어느 정도 수행되었는지 측정하는 것입니다.

즉, 여러분께서 RTL 코드를 만들었으니, 적어도 검증 중에 여기에 기술된 문장/표현/데이터 흐름은 모두 검증하는 것이 필요하다는 것이지요.

Functional coverage의 경우 사용자가 어떤 동작(function)을 수행하기 위하여 RTL 코드를 만들었으니, 이 stimulus에 의하여 해당 동작이 수행되었는지 확인하는 것입니다. 그런데, 툴은 이 RTL이 어떤 동작을 위하여 만들어진 것인지 알지 못하므로 assertion과 같은 방법을 이용하여 functional coverage를 잡아야 합니다.

 

여하튼, 본론으로 들어와 code coverage, 특히 line coverage에 있어서는 Modelsim이 상당히 편합니다. Modelsim에서 code coverage를 측정하는 건 상당히 쉽습니다. Modelsim 콘솔에서 다음과 같이 하면 되지요.

 

  1. vsim –coverage [Top Module Name]
  2. view_coverage
  3. code coverage –file [File Name] –lines
  4. coverage reload [File Name]

 

예를 하나 들어볼까요? 아래와 같은 4bit ALU를 코드가 있다고 하면, 의미 있는 동작이 있는 코드는 박스를 친 부분들일 것입니다.

 

이것을 다음과 같은 테스트 벡터로 동작시켜 봅시다.

 

 

이 경우 모든 line에 대하여 cover가 되므로, coverage가 100%가 되고, 해당 RTL에서 그 문장이 몇번 동작하였는지 보여줍니다.

간단하죠.

 

Cadence의 경우도 비슷한 code coverage툴이 있습니다. 전용 툴도 몇 개 있구요. 요즘엔 위와 같은 Line coverage이외에 앞에 설명한 path, toggle등의 복잡한 coverage도 잡아주므로 많은 도움이 되지요.

 

참, 일반적으로 line coverage는 반드시 100%를 충족시켜야 하며, path coverage의 경우도 100%에 근접하도록 해야하는 것으로 알려져 있습니다. ^^;

 

 

끊임 없는 삽질..

약간 정신이 없는 상태에서 일을 했더니만 결국은 삽질로 빠지는 경우가 많습니다.


오늘의 삽질은 perl 에서 ord의 사용에 관한 것이지요.


그 동안 compiler에 의하여 생성된 elf 파일을 objcopy utility로 binary file을 생성하고, 이걸 perl에서 $hexval = ord(getc(INHANDLE)); 과 같은 방법으로 verilog HDL에서 읽을 수 있는 파일 형식(readmemh()를 이용하는 거죠..)으로 변경해서 사용해 왔는데, 오늘 갑자기 이걸 sub routine으로 만들고 돌렸더니만 값이 이상하더군요.


그래서 해당 서브 루틴을 따로 빼서, 프로그램을 돌려 봤더니만 정상! @_@


한참을 헤매다가, Perl/Tk의 GUI에서 한글을 사용하기 위해서use encoding ‘utf-8’을 사용했다는 것을 깨달았습니다. ord는 encoding이 없을때는 binary를 hex값으로 바꿀때 상당히 유용하지만(ascii를 return하기 때문이지요), unicode setting에서는 binary를 해석해서 128보다 큰 값이면 unicode로의 변환을 시도하는 거죠 ㅠㅠ;


결국은 mwultong님의 blog에 있는 hex code conversion 부분의 코드를 일부 차용하여 프로그램을 변환 프로그램을 돌렸습니다.


buf16Array = unpack “C*”, $buf16; # 이 부분이 핵심이죠.. ^^;


역시 뭔가를 가정하고 만드는 건 좀 위험한 생각이었던거 같습니다. 저 프로그램에서 unicode를 사용하게 될 것이라고는 전혀 생각하지 않았었으니까요.. 실용주의 프로그래머라는 책을 보면 unicode를 항상 고려하라고 하던데, 이 규칙을 위배한 것이 문제겠지요.

여하튼, 심각한 삽질하지 않고 끝나서 다행입니다요~잇힝~
사용자 삽입 이미지

Technorati : , ,

Open Verification Methodology 공개!

VMM에 맞은 편에 존재하던 mentor의 AVM이 있었습니다만, 무게감이 떨어지는 듯 했었지요.

얼마전에 Cadence와 Mentor가 같이 OVM을 위하여 작업을 한다는 이야기가 솔솔 흘러나왔고, Synopsys의 합류를 권장했지만 거절당했다는 이야기도 있었지요. 그 OVM이 공개되었군요.. (언제 공개된거지?)
음.. 뉴스란을 보니 얼마되지는 않은것 같습니다만.

관심 있으신 분들은 다운 받아서 사용해 보신 후에 소감을 ^^;

http://www.ovmworld.org/


Technorati : ,