스키트 사격과 디자인 디버깅
  • 2015-12-08
  • 김언한 기자, unhankim@elec4.co.kr
  • 글|러로 리자티(Lauro Rizzatti) 검증 컨설턴트


검증 엔지니어들은 SystemVerilog 단언문을 트랜잭터와 결합함으로써 속도 저하 없이 무제한적인 디버깅 능력으로 디자인을 모니터링 할 수 있다. 이는 메모리 공간이나 시간 제약에 구애받지 않고 디자인에 대해 원하는 만큼 넓은 윈도를 제공하므로 버그를 신속하게 찾아낼 수 있게 됐다.

하드웨어 에뮬레이터의 사용을 위해 보급됐던 최초의 방법으로 오늘날까지도 가장 널리 사용되고 있는 방법이 인서킷 에뮬레이션(ICE) 모드이다. 이 모드에서는 아직 제작되지 않은 칩 대신 에뮬레이터를 물리적 타깃 시스템의 소켓에 꽂아 에뮬레이터 내부에 매핑되어 있는 검사 대상 디자인(DUT)의 실행 및 디버깅을 라이브 데이터와 함께 지원하게 된다.

이는 매력적인 검증 접근방법임에는 틀림없지만 일련의 문제점을 갖고 있다. 그 중에도 가장 심각한 문제는 그 무작위적인 성격에 있다. 즉 검사 대상 디자인을 디버깅할 경우 결정론적이거나 반복 가능한 거동이 결여되어 있는 것이다. 이해를 돕기 위해 비유를 들어 보겠다.

스키트 사격의 예를 들어보자. 스키트 사격은 날아가는 새를 시뮬레이트 하기 위해 트랩 하우스로부터 던져지는 클레이 표적을 쏘아 맞추는 사격 스포츠이다. 이 스포츠의 조건을 약간 바꿔 좀 더 까다롭게 만들어 보자. 이제 사격선수는 시야를 좁은 범위로 제한하는 안경을 씀으로써 클레이 표적의 궤적을 “짐작”해야만 하며, 궤적은 표적이 던져질 때마다 달라진다. 검증 엔지니어가 칩 디자인을 ICE 모드에서 디버깅할 경우 대처해야만 하는 문제도 이와 똑같다. ICE 모드에서 버그를 찾아내는 일 또한 좁고 제한된 시야를 통해 클레이 표적을 언뜻 보고 맞춰보려는 것과 마찬가지이다.

 

과거지사를 약간 살펴보는 것도 현황 파악에 도움이 될 것이다. 지난 20년 이상의 서베이 결과는 한결같이 설계 주기의 70% 가까이가 설계 검증에 소비되고 있음을 알려주고 있다. 긍정적으로 보자면, 설계 검증은 예측 가능하다는 점에서 어느 정도는 미리 준비할 수 있는 활동이다. 하지만 설계 디버깅은 미리 계획할 수 없는 일이다. 버그가 알 수 없는 위치와 시간에 알 수 없는 이유로 인해 예기치 않게 나타나기 때문이다.

엄청난 양의 임베디드 소프트웨어를 갖는 시스템온칩(SoC) 디자인에서는 하드웨어나 소프트웨어 버그가 알 수 없는 디자인 한 구석에 깊숙이 숨어 있다가 한참 실행된 후에야 나타날 수도 있다. 수십억 클록 사이클이 경과한 후에 버그가 나타나는 일도 분명히 있을 수 있다.

더욱 난감한 것은 디버깅이 무작위적인 성격을 갖기 때문에 버그를 찾아낼 때까지 반복적으로 실행하지 않으면 안 된다는 점이다. 버그가 결정론적이 닐 경우, 즉 연이어 실행해도 재현해낼 수 없다면 이를 찾아내는 일은 악몽으로 변할 수 있다.

중요한 미지수

디버깅에 수십억 검증 사이클의 긴 시퀀스가 필요한 수억 게이트 규모의 디자인에서는 위치, 시간 및 원인이라는 세 가지 중요 미지수로 인해 아무리 세심하게 짠 테스트 계획이라도 일정이 크게 지연될 수 있다. 경쟁이 치열한 시장에서 신제품 출시가 3개월 지연되면 총 매출액이 33%나 떨어질 수 있다. 이는 최고가의 검증 솔루션조차도 정당화될 수 있을 정도로 큰 값이다. 하드웨어 에뮬레이션이 고려되는 것은 바로 이 때문이다. 하드웨어 에뮬레이터는 초고속의 성능을 통해 실행 및 디버깅 속도를 높여준다. 사실 빠른 실행 속도야 말로 애당초 이들이 개발된 이유이기도 하다.

그 개념은 간단하다. 검사 대상 디자인을 아직 제작되지 않은 칩이 궁극적으로 탑재될 실제 물리적 타깃 시스템에 대해 점검하는 것이다. 따라서 테스트 벡터 작성이나 테스트벤치가 필요 없어진다. 실제 세계에서 철저하고도 신속하게 작업이 수행되도록 하기 때문이다. 분명치 않은 설계 영역들에 숨어 있는 고약한 버그들을 찾아내는 데는 아무래도 실제 세계가 임의의 소프트웨어 테스트벤치보다 나리라는 것이다.


인서킷 디버깅 문제

이것은 멋진 개념이었지만, 이 역시 완벽하지는 못한 것으로 판명됐다. 여러 가지 매력적인 전망에도 불구하고 칩 디자인을 ICE 모드에서 디버깅하는 일은 두 가지 이유로 인해 번거롭고 불만스럽다. 첫째, 에뮬레이터를 타깃 시스템에 연결시켜야만 한다. 이를 위해서는 물리적 타깃 시스템의 빠른 클록 속도를 상대적으로 느린 에뮬레이터의 클록 속도에 적응시키기 위한 속도 어댑터가 필요하다. 에뮬레이터의 실행 속도는 1,000배나 느릴 수 있기 때문이다. 기본적으로 이 어댑터는 선입선출(FIFO) 방식의 레지스터로서, 기능성과 정확성을 얻는 대신 성능을 잃어버리게 된다. PCIe나 이더넷과 같은 고속 프로토콜은 FIFO 방식이 갖는 본질적인 능력 한계에 대처하기 위해 성능이 하향 조정된다.

또한 어댑터와 연결 케이블로 인해 구성에 물리적인 의존성과 약점들이 추가되어 시스템 신뢰성에 부정적인 영향을 미친다. 게다가 이러한 구성은 프로토콜 당 하나의 테스트 케이스로만 제한되며, 코너 케이스(corner case) 테스팅이나 어떠한 종류의 ‘가상 시나리오(what if)’ 분석도 허용되지 않는다. 무엇보다도, ICE 모드 세팅은 타깃 시스템에 꽂았다 뽑았다 하는 일을 현장에서 도와주지 않으면 원격 액세스가 불가능하다.

 

둘째는 가장 과소평가되고 있는 단점인 결정론적 거동의 결여이다. 이것은 타깃 시스템이 디자인에 클록을 제공할 경우 ICE 모드에서 버그를 찾아내는 성능을 떨어뜨리고 작업을 지연시킨다. ICE 모드에서 하드웨어 에뮬레이터를 이용해 검사 대상 디자인의 버그를 추적하기 위해서는 특정 이벤트 시에 촉발되는 디자인 내 각 레지스터의 활동을 최대 속도로 캡처해야 한다. 커스텀 실리콘 기반의 에뮬레이터에서 각각의 디자인 레지스터는 연결의 컴파일 없이 트레이스 메모리에 연결된다. 런타임 시에 검증 엔지니어는 추적하는 클록 사이클 수와 추적될 디자인 레지스터 수 사이에서 절충할 수 있다.

상용 FPGA 기반 에뮬레이터에서는 제한된 수의 디자인 레지스터만이 컴파일 프로세스를 통해 트레이스 메모리에 연결될 수 있다. 추적을 위해 레지스터를 추가하거나 변경하려면 설계/반복 시간을 극적으로 떨어뜨려 디자인을 재컴파일 해야 한다. 사용자는 두 가지 에뮬레이터 유형 모두에서 추적되는 레지스터 수를 줄임으로써 추적 심도를 증대시키거나 혹은 그 반대로 할 수 있다.

그 결과, 사용자는 해당 디버깅 윈도를 찾아내 올바른 파형들을 덤프하게 될 때까지 몇 번이고 실행하는데, 그 회수는 수백 회에 이를 수도 있다. 그러나 진짜 문제는 매번 실행할 때마다 버그(동일한 버그)가 서로 다른 타임스탬프에서 감지될 수 있으며, 심지어는 예상치 못한 거동으로 인해 아무런 버그도 감지되지 않을 수도 있다는 것이다. 스키트 사격의 예가 기억날 것이다.

서드파티 IP가 탑재된 SoC의 경우를 고려해 보자. 고립 상태에서는 항상 제대로 작동하던 IP 코어가 SoC에 내장되면 작동하지 않는다. 이처럼 검사 대상 디자인 내에 깊숙이 내장되어 있는 IP를 ICE 모드를 통해 디버깅하려면 검증 팀은 수없이 많은 밤을 뜬 눈으로 지새우게 될 수도 있다.

희소식은 트랜잭션 기반의 통합 모델링 기술이 출현하면서 에뮬레이션 분야에 극적인 변화가 일어났다는 것이다.

물리적 타깃 시스템을 없애고 이를 C++/SystemVerilog를 통해 높은 추상화 수준으로 기술한 뒤 트랜잭터를 통해 검사 대상 디자인에 연결시킨 가상 테스트 환경으로 대체함으로써 모든 문제들이 사라져버린 것이다.

테스트벤치의 가용성

SystemVerilog를 통해 하이레벨 테스트벤치를 생성하는 일이 전통적인 Verilog에서 필요로 하는 시간의 몇 분의 일 내에 보다 적은 오류로 가능해진다. 트랜잭터는 기성품을 구입할 수 있다. 더욱 좋은 점은 멀티미디어, 네트워킹 및 스토리지와 같은 특정 시장 애플리케이션들을 겨냥하면서 가상 테스트벤치와 트랜잭터들을 포함하고 있는 테스트 환경 전체가 멘토 그래픽스의 벨로체2(Veloce2) 에뮬레이션 플랫폼을 지원하는 VirtuaLAB이라는 브랜드명으로 제공되고 있다는 것이다.

가장 중요한 점은 디자인 스티뮬러스가 결정론적이므로 디버깅 클로저가 보다 빨라졌다는 것이다. 트랜잭터를 통해 하드웨어 기술 언어(HDL) 시뮬레이션으로부터 에뮬레이션으로 매끄럽게 전환할 수 있게 됐다. 클록을 정지시키고 단계적으로 밟아나갈 수 있으며, 이제 ‘가상’ 시나리오가 가능해졌고, 코너 케이스를 모델화할 수 있다. 오늘날의 엔지니어들은 RTL(register transfer level) 코드를 작성하여 칩을 설계하므로 자신들의 디자인을 테스트하기 위해 실험실 장비를 접촉할 필요가 없다. 이제는 원격 액세스가 가능하며 이는 점점 더 널리 사용되고 있다.

검증 엔지니어들은 SystemVerilog 단언문을 트랜잭터와 결합함으로써 속도 저하 없이 무제한적인 디버깅 능력으로 자신들의 디자인을 모니터링 할 수 있다. 이는 메모리 공간이나 시간 제약에 구애받는 일 없이 디자인에 대해 원하는 만큼 넓은 윈도를 제공하므로 버그를 신속하게 찾아낼 수 있게 됐다. 따라서 엔지니어들은 시야가 제한된 스키트 사격 선수들의 경우와는 전혀 다른 환경에서 작업하게 된다. 

<저작권자(c)스마트앤컴퍼니. 무단전재-재배포금지>


#ICE   #디버깅  
관련 기사

  • 100자평 쓰기
  • 로그인

세미나/교육/전시
TOP