반응형

현대 디지털 설계 흐름의 필수 구성 요소 중 하나는 시뮬레이션을 통해 기능을 검증하는 것입니다. 이 기능 검증은 테스트 벤치를 사용하여 수행됩니다. 테스트 벤치는 테스트할 시스템을 하위 시스템으로 인스턴스화하고 하위 시스템으로 구동할 입력 패턴을 생성하고 출력을 관찰하는 Verilog 모델입니다. 테스트 벤치는 시뮬레이션에만 사용되므로 합성할 수 없는 추상 모델링 기술을 사용하여 자극 패턴을 생성할 수 있습니다. Verilog 조건부 프로그래밍 구성 및 시스템 작업을 사용하여 테스트 상태를 보고하고 출력이 올바른지 자동으로 확인할 수도 있습니다.

 

테스트 벤치 개요

테스트 벤치는 입력이나 출력이 없는 Verilog의 파일입니다. 테스트 벤치는 테스트할 시스템을 하위 수준 모듈로 인스턴스화합니다. 테스트 중인 시스템을 device under test(DUT) 또는 unit under test(UUT)라고 합니다.

 

수동 자극 생성

조합 논리 회로에 대한 자극을 생성할 때 절차 블록을 사용하여 DUT, 특히 타이밍 오류를 유발할 수 있는 모든 전환을 구동하기 위해 가능한 모든 입력 패턴을 생성하는 것이 일반적입니다.

 

다음 예제는 SystemX라는 DUT의 작동을 확인하기 위해 간단한 테스트 벤치를 만드는 방법을 보여줍니다. 테스트 벤치에는 입력 또는 출력이 없습니다. 따라서 모듈에 선언된 포트가 없습니다. 그런 다음 SystemX는 테스트 벤치에서 인스턴스화(DUT)됩니다. reg 유형의 내부 신호는 DUT 입력(A_TB, B_TB, C_TB)에 연결하도록 선언되고 와이어 유형의 내부 신호는 DUT 출력(F_TB)에 연결하도록 선언됩니다. 그런 다음 절차 블록을 사용하여 SystemX의 입력을 생성합니다. 절차 블록 내에서 지연 할당은 입력 패턴의 타이밍을 제어하는 ​​데 사용됩니다. 이 예에서 가능한 각 입력 코드는 초기 블록 내에서 생성됩니다. 출력(F_TB)은 시뮬레이션 도구를 사용하여 파형 또는 테이블 목록 형태로 관찰됩니다.

 

 

Verilog 테스트 벤치 내에서 여러 절차 블록을 사용하여 병렬 자극 생성을 제공할 수 있습니다. initial 블록과 always 블록을 모두 사용하면 테스트 벤치가 반복 신호와 비주기 신호를 모두 구동할 수 있습니다. initial always 블록은 시작 값과 반복 패턴을 제공하기 위해 동일한 신호를 구동하는 데 사용할 수도 있습니다.

 

다음 예제는 DUT에 대한 자극 패턴을 생성하기 위해 여러 절차 블록이 사용되는 비동기 활성 LOW 리셋이 있는 상승 에지 트리거 D 플립플롭에 대한 테스트 벤치를 보여줍니다.

 

 

시뮬레이터 성적표에 결과 인쇄

과거 테스트 벤치 예제에서 입력 및 출력 값은 시뮬레이터 도구 내의 파형 또는 목록 도구를 사용하여 관찰되었습니다. 각 명령문이 처리될 때 시뮬레이션을 추적하기 위해 시뮬레이션 값을 스크립트 창에 인쇄하는 것도 유용합니다. 텍스트 출력 시스템 작업을 사용하여 DUT의 입력 및 출력 외에 시뮬레이션 상태를 보여주는 메시지를 인쇄할 수 있습니다.

 

다음 예제는 입력과 출력을 시뮬레이션 도구의 사본에 인쇄하는 테스트 벤치를 보여줍니다. 테스트 벤치는 DUT에 지연이 포함되지 않은 경우에도 출력을 평가하기 전에 어느 정도 지연을 기다려야 합니다.

 

루프를 사용하여 자극 생성

계산과 같은 규칙적인 패턴을 따르는 자극을 생성할 때 루프는 입력 벡터를 생성하는 효과적인 방법이 될 수 있습니다. for 루프는 조합 논리 회로에 대한 철저한 자극 패턴을 생성하는 데 특히 유용합니다. 정수 루프 변수는 for 루프 내에서 증가할 수 있으며 DUT 입력에 reg 유형으로 할당됩니다. Verilog에서 정수가 reg 유형의 변수에 할당되면 reg의 크기와 일치하도록 잘립니다. 이를 통해 for 루프 내에서 증가하는 정수 루프 변수를 사용하여 입력 자극 패턴에 대해 바이너리 카운트를 생성할 수 있습니다.

 

다음 예제는 조합 논리 회로에 대한 자극이 for 루프를 사용하여 생성될 수 있는 방법을 보여줍니다.

 

 

자동 결과 확인

테스트 벤치는 이 책의 앞부분에서 설명한 조건부 프로그래밍 구성을 사용하여 결과를 자동으로 검사할 수도 있습니다.

 

다음 예제는 if-else 문을 사용하여 DUT의 출력을 확인하고 성적표에 PASS/FAIL 메시지를 인쇄하는 테스트 벤치의 예를 보여줍니다.

 

 

테스트 벤치에서 외부 파일 사용

테스트 벤치의 결과를 외부 파일에 기록해야 하는 경우가 종종 있는데, 그 이유는 육안 검사를 하기에 너무 장황하거나 시스템 검증에 대한 저장된 기록이 필요하기 때문입니다. Verilog는 파일 I/O 시스템 작업(: $fdisplay(), $fwrite(), $fstrong() $fmonitor())을 통해 외부 파일에 쓸 수 있습니다.

 

다음 예제는 입력 벡터와 DUT의 출력이 $fdisplay() 시스템 작업을 사용하여 외부 파일에 기록되는 테스트 벤치를 보여줍니다.

 

 

입력 벡터가 너무 커서 수동으로 입력하거나 별도의 프로그램에서 생성한 경우가 많습니다. 두 경우 모두 테스트 벤치에서 유용한 기술은 외부 파일에서 입력 벡터를 읽는 것입니다.

 

다음 예제는 DUT에 대한 입력 자극 벡터가 $readmemb() 시스템 작업을 사용하여 외부 파일에서 읽는 예를 보여줍니다.

 

 

 

반응형

+ Recent posts