Functional verification
https://en.wikipedia.org/wiki/Functional_verification
Intro
기능 검증은 논리 설계가 사양을 준수하는지 확인하는 작업입니다. 기능 검증은 "이 제안된 설계가 의도한 대로 작동하는가?"라는 질문에 대답하고자 합니다. 이는 복잡하며 대부분의 대규모 전자 시스템 설계 프로젝트에서 시간과 노력의 대부분(최대 70%)을 차지합니다. 기능 검증은 타이밍, 레이아웃, 전력과 같은 비기능적 측면도 고려하는 더 광범위한 설계 검증의 일부입니다.
https://www.youtube.com/watch?v=_bW0hvt4OSg&list=PLMonDzz7J8Snon0WuZsGzwqIrT0_16cOb
배경
트랜지스터 수가 무어의 법칙에 따라 지수적으로 증가했지만, 엔지니어 수와 설계 개발 시간은 선형적으로만 증가했습니다. 트랜지스터 복잡성이 증가함에 따라 코딩 오류 수도 증가했습니다. 대부분의 논리 코딩 오류는 부주의한 코딩(12.7%), 의사소통 부족(11.4%), 마이크로아키텍처 문제(9.3%)에서 비롯됩니다. 이에 따라 전자 설계 자동화(EDA) 도구가 트랜지스터 설계 복잡성을 따라잡기 위해 개발되었고, Verilog와 VHDL과 같은 언어도 EDA 도구와 함께 소개되었습니다.
기능 검증은 매우 어려운데, 심지어 단순한 설계에서도 존재할 수 있는 테스트 케이스의 방대한 양 때문입니다. 종종 설계를 포괄적으로 검증하려면 10^80개 이상의 테스트가 필요한데, 이는 평생 동안 달성할 수 없는 숫자입니다. 이 노력은 프로그램 검증과 동등하며 NP-hard 또는 그 이상으로 간주되며, 모든 경우에 잘 작동하는 해결책은 아직 찾지 못했습니다. 그러나 다음과 같은 여러 방법으로 접근할 수 있습니다. 이 방법들 중 어느 것도 완벽하지는 않지만, 특정 상황에서 도움이 될 수 있습니다:
- 논리 시뮬레이션은 논리를 구축하기 전에 시뮬레이션합니다.
- 시뮬레이션 가속은 논리 시뮬레이션 문제에 특수 목적 하드웨어를 적용합니다.
- 에뮬레이션은 프로그래밍 가능한 논리를 사용하여 시스템의 버전을 구축합니다. 이는 비용이 많이 들며 여전히 실제 하드웨어보다 훨씬 느리지만, 시뮬레이션보다 수 백배 빠릅니다. 프로세서에서 운영 체제를 부팅하는 데 사용할 수 있습니다.
- 형식 검증은 특정 요구 사항(공식적으로 표현된)이 충족되거나 교착 상태와 같은 원하지 않는 동작이 발생하지 않음을 수학적으로 증명하려고 합니다.
- 지능형 검증은 자동화를 사용하여 레지스터 전송 수준 코드의 변경 사항에 테스트 벤치를 적응시킵니다.
- HDL별 버전의 lint와 기타 heuristics을 사용하여 일반적인 문제를 찾습니다.
https://www.youtube.com/watch?v=qdlZJuZWjyQ&pp=ygUXRnVuY3Rpb25hbCB2ZXJpZmljYXRpb24%3D
유형
기능 검증에는 세 가지 유형이 있습니다: 동적 기능, 하이브리드 동적 기능/정적, 정적 검증.
시뮬레이션 기반 검증(또는 '동적 검증')은 매우 쉽게 확장되므로 널리 사용됩니다. 자극이 HDL 코드의 각 줄을 실행하는 데 제공됩니다. 테스트 벤치는 주어진 입력에 대해 설계가 사양에 맞게 작동하는지 확인하기 위해 의미 있는 시나리오를 제공하여 설계를 기능적으로 검증합니다.
시뮬레이션 환경은 일반적으로 다음과 같은 여러 유형의 구성 요소로 구성됩니다:
generator는 사양과 구현(HDL 코드) 간의 이상을 발견하기 위해 사용되는 입력 벡터를 생성합니다. 이 유형의 발생기는 계산적으로 비용이 많이 드는 NP-complete 유형의 SAT 솔버를 사용합니다. 다른 유형의 발생기에는 수동으로 생성된 벡터, 그래프 기반 발생기(GBM), 독점 발생기가 포함됩니다. 최신 발생기는 통계적으로 구동되는 directed-random 및 random 자극을 생성하여 설계의 무작위 부분을 검증합니다.
엄청난 입력 자극 공간을 고르게 다루려면 무작위성이 중요합니다. 이를 위해 이러한 발생기 사용자는 의도적으로 생성된 테스트에 대한 요구 사항을 과소 지정합니다. 발생기의 역할은 이 간격을 무작위로 채우는 것입니다. 이 메커니즘을 통해 발생기는 사용자가 직접 검색하지 않는 버그를 드러내는 입력을 생성할 수 있습니다.
발생기는 또한 자극을 설계 코너 케이스로 편향시켜 논리를 더욱 스트레스합니다. 편향과 무작위성은 서로 다른 목표를 가지며 이 사이의 절충이 있으므로 다양한 발생기는 이러한 특성의 서로 다른 조합을 가집니다. 설계 입력이 유효(합법적)해야 하고 많은 대상(편향 등)을 유지해야 하므로 많은 발생기가 제약 만족 문제(CSP) 기술을 사용하여 복잡한 테스트 요구 사항을 해결합니다. 설계 입력의 합법성과 편향 수단은 모델링됩니다. 모델 기반 발생기는 이 모델을 사용하여 대상 설계에 대한 올바른 자극을 생성합니다.
https://www.youtube.com/watch?v=UOA6Wez-GPs&pp=ygUXRnVuY3Rpb25hbCB2ZXJpZmljYXRpb24%3D
driver는 발생기가 생성한 자극을 설계 입력의 실제 입력으로 변환합니다. 발생기는 추상화된 수준에서 입력(트랜잭션 또는 어셈블리어)을 생성합니다. 드라이버는 이 입력을 설계 사양에 정의된 실제 설계 입력으로 변환합니다.
시뮬레이터는 설계의 현재 상태(플립플롭 상태)와 주입된 입력을 기반으로 설계의 출력을 생성합니다. 시뮬레이터에는 설계 넷리스트에 대한 설명이 있습니다. 이 설명은 HDL을 저수준 게이트 넷리스트로 합성하여 생성됩니다.
monitor는 설계 상태와 출력을 트랜잭션 추상화 수준으로 변환하여 나중에 확인할 '스코어보드' 데이터베이스에 저장합니다.
checker는 '스코어보드'의 내용이 합법적인지 검증합니다. 발생기가 기대 결과를 생성하는 경우, 체커는 실제 결과가 기대 결과와 일치하는지 확인해야 합니다.
중재 관리자는 위의 모든 구성 요소를 함께 관리합니다.
설계가 적절하게 실행되었는지 평가하기 위해 다양한 커버리지 메트릭이 정의됩니다. 여기에는 기능 커버리지(설계의 모든 기능이 실행되었는가?), 문장 커버리지(HDL의 각 줄이 실행되었는가?), 분기 커버리지(모든 분기 방향이 실행되었는가?)가 포함됩니다.
https://www.youtube.com/watch?v=zx__Z8YTOlg&pp=ygUXRnVuY3Rpb25hbCB2ZXJpZmljYXRpb24%3D
'반도체 > 회로설계' 카테고리의 다른 글
[📚세미피디아] Logic synthesis란? (0) | 2024.04.09 |
---|---|
[📚세미피디아] High-level synthesis란? (0) | 2024.04.08 |
[📚세미피디아] EDA Tool이란? (0) | 2024.04.08 |
[📚세미피디아] ESL [Electronic System Level] 설계 및 검증 (0) | 2024.04.08 |
[📚세미피디아] 집적회로설계란? Integrated circuit design (2) | 2024.04.06 |