기능 검증

Functional verification

전자설계자동화에서 기능검증논리설계가 사양에 부합하는지 검증하는 작업이다.일상적으로 기능 검증은 "이 제안된 설계가 의도한 대로 수행됩니까?"라는 질문에 답하기 위해 시도합니다.이것은 복잡한 작업이며, 대부분의 대규모 전자 시스템 설계 프로젝트에서 대부분의 시간과 노력이 소요됩니다.기능 검증은 기능 검증 외에 타이밍, 레이아웃 및 전력과 같은 비기능적 측면을 고려하는 보다 포괄적인 설계 검증의 일부입니다.

기능 검증은 매우 어렵습니다.심플한 설계에서도 가능한 테스트 케이스의 양이 매우 많기 때문입니다.설계를 포괄적으로 검증하기 위한 10^80 이상의 테스트가 가능한 경우가 많습니다. 이는 평생에 걸쳐 달성할 수 없는 수치입니다.이 작업은 프로그램 검증과 동등하며, NP 하드 또는 그 이상입니다.모든 경우에 적합한 솔루션은 발견되지 않았습니다.하지만 여러 가지 방법으로 공격을 받을 수 있습니다.어느 것도 완벽하지는 않지만, 각각은 특정 상황에서 도움이 될 수 있습니다.

  • 논리 시뮬레이션은 로직을 구축하기 전에 시뮬레이트합니다.
  • 시뮬레이션 가속은 로직 시뮬레이션 문제에 특수 목적 하드웨어를 적용합니다.
  • 에뮬레이션은 프로그램 가능한 로직을 사용하여 시스템 버전을 구축합니다.이는 비용이 많이 들고 실제 하드웨어보다 훨씬 느리지만 시뮬레이션보다 훨씬 빠릅니다.예를 들어 프로세서에서 운영 체제를 부팅하는 데 사용할 수 있습니다.
  • 공식 검증은 특정 요건(공식적으로도 표현)이 충족되었는지 또는 특정 바람직하지 않은 동작(데드록 등)이 발생할 수 없음을 수학적으로 증명하기 위한 시도입니다.
  • 인텔리전트 검증에서는 자동화를 사용하여 레지스터 전송 레벨 코드의 변경에 따라 테스트 벤치를 조정합니다.
  • HDL 고유의 보풀 및 기타 휴리스틱스를 사용하여 일반적인 문제를 찾습니다.

시뮬레이션 기반 검증('동적 검증'이라고도 함)은 설계를 "시뮬레이션"하기 위해 널리 사용됩니다. 이 방법은 매우 쉽게 확장되기 때문입니다.HDL 코드의 각 라인을 연습하기 위한 자극이 제공됩니다.테스트 벤치는 특정 입력이 주어진 설계가 사양에 따라 수행되는지 확인하기 위한 의미 있는 시나리오를 제공함으로써 설계를 기능적으로 검증하기 위해 구축됩니다.

시뮬레이션 환경은 일반적으로 다음과 같은 몇 가지 유형의 컴포넌트로 구성됩니다.

  • 제너레이터는 의도(사양)와 구현(HDL 코드) 사이에 존재하는 이상을 검색하는 데 사용되는 입력 벡터를 생성합니다.이 유형의 발전기는 계산 비용이 많이 드는 NP-완전 유형의 SAT 솔버를 사용합니다.기타 유형의 제너레이터에는 수동으로 작성된 벡터, 그래프 기반 제너레이터(GBM) 전용 제너레이터가 있습니다.최신 발전기는 설계의 무작위 부분을 검증하기 위해 통계적으로 구동되는 유도 무작위 및 무작위 자극을 생성한다.무작위성은 사용 가능한 입력 자극의 넓은 공간에 걸쳐 높은 분포를 달성하기 위해 중요하다.이를 위해, 이러한 발전기의 사용자들은 의도적으로 생성된 테스트의 요건을 충분히 명시하지 않는다.이 공백을 무작위로 메우는 것이 제너레이터의 역할입니다.이 메커니즘을 통해 제너레이터는 사용자가 직접 검색하지 않는 버그를 표시하는 입력을 생성할 수 있습니다.발전기는 또한 논리를 더욱 강조하기 위해 자극을 설계 코너 케이스로 편향시킨다.바이어싱과 무작위성은 서로 다른 목표에 기여하고 그들 사이에 트레이드오프가 있기 때문에, 서로 다른 발전기는 이러한 특징의 다른 혼합을 가진다.설계에 대한 입력은 유효해야 하며(합법적) 많은 목표(바이어싱 등)가 유지되어야 하기 때문에, 많은 발전기는 복잡한 시험 요건을 해결하기 위해 제약 만족 문제(CSP) 기법을 사용한다.설계 입력의 적법성과 바이어싱 무기고를 모델링합니다.모델 기반 생성기는 대상 설계에 대한 정확한 자극을 생성하기 위해 이 모델을 사용한다.
  • 운전자는 발전기에 의해 생성된 자극을 검증 대상 설계의 실제 입력으로 변환합니다.생성기는 높은 수준의 추상화, 즉 트랜잭션 또는 어셈블리 언어로 입력을 생성합니다.드라이버는 이 입력을 설계 인터페이스 사양에 정의된 실제 설계 입력으로 변환합니다.
  • 시뮬레이터는 설계의 현재 상태(플립 플랍 상태)와 주입된 입력에 기초하여 설계의 출력을 생성합니다.시뮬레이터에는 설계 넷리스트에 대한 설명이 있습니다.이 설명은 HDL을 낮은 게이트레벨의 넷리스트에 합성함으로써 작성됩니다.
  • 모니터는 설계 및 출력 상태를 트랜잭션 추상화 수준으로 변환하여 나중에 확인할 수 있도록 '점수판' 데이터베이스에 저장합니다.
  • 검사자는 '점수판'의 내용이 합법적인지 확인합니다.제너레이터가 입력 외에 예상 결과를 생성하는 경우가 있습니다.이 경우 검사자는 실제 결과가 예상 결과와 일치하는지 확인해야 합니다.
  • 중재 관리자는 위의 모든 구성 요소를 함께 관리합니다.

설계가 적절하게 수행되었는지 평가하기 위해 다양한 적용범위 측정기준을 정의한다.여기에는 기능 커버리지(설계의 모든 기능이 실행되었습니까?), 문장 커버리지(HDL의 각 라인이 실행되었습니까?), 지점 커버리지(각 지점의 각 방향이 실행되었습니까?)가 포함됩니다.

도구들

「 」를 참조해 주세요.

레퍼런스