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%에 근접하도록 해야하는 것으로 알려져 있습니다. ^^;

 

 

6 thoughts on “Modelsim에서의 Code Coverage

  1. 포스팅 감사합니다. 이런 기초적인 글의 지속적인 포스팅 부탁드립니다. ^^ 감사합니다.

    1. 네. 이런 종류로 만들어둔 문서가 몇 개 있기는 한데, 기회 될때마다 올리도록 하겠습니다.
      감사합니다.

  2. 간만에 다녀가네요. ㅎㅎ
    혹시 formal verification에 대한 경험있으시면 포스팅 한번 부탁드려도 될까요? ㅋㅋ

    날씨가 쌀쌀해지고 눈도 많이 내렸네요.
    건강유의하세요~

    1. reply로 쓰려다가 글로 썼는데요, 제가 일반적인 formal verification에는 좀 취미가 없어서요 ^^;
      예전에 CAD 알고리즘에 관심있었을때 논문도 좀 읽고, 툴도 좀 써보고 했는데.. C/RTL/netlist/P&R간의 등가성 체크가 이루어지지 않는다면 여전히 쉽지 않을 것 같습니다. 연산기나 간단한 로직에는 쓸만한거 같아요.
      요즘엔 한참동안 이쪽을 안봐서 얼마나 기술이 좋아졌는지는 모르겠습니다.

  3. Candence의 Incisive Code Coverage Tool을 쓰고 있습니다.
    말씀하신 것 과 같이 Code Coverage가 100%나와도 정확하다는 보장은 없으므로 Function Coverage가 중요하다고 생각합니다. Function Coverage도 쉽게 좀 다루어주세요. ^^

    1. 근 몇년동안 검증 부분에서 가장 신경써서 챙겨보는 것이 functional coverage인데요.. assertion 기반으로 spec을 기술하는 것이 C 모델 작성하는 것 만큼(혹은 더)이나 손이가는 일이라 뭔가 더 편한 방법이 필요하지 않을까 생각해요.
      요즘엔 그래서 Standard function/interface에 대해서는 VIP를 이용하는 추세가 많기도 하구요.
      이 부분은 한번 정리할 필요를 느끼고 있었으니, 곧 한번 올리도록 하죠.

Leave a Reply