verilog testbench 예제

이 장에서는 조합 회로 및 순차 회로에 대해 서로 다른 스타일로 테스트 벤치를 작성하는 방법을 배웁니다. 파일에서 입력을 읽을 수 있고 출력을 파일에 기록할 수 있는 메서드를 보았습니다. 시뮬레이션 결과와 예상 결과를 csv 파일에 비교및 저장하고 시뮬레이션 파형으로 표시합니다. 이는 csv 파일에서 오류를 찾는 것이 시뮬레이션 파형보다 쉽다는 것을 보여 주었으며, 이는 시뮬레이션 파형보다 쉽다는 것을 보여 주었던 것입니다. 이전 섹션에서는 한 파일의 줄을 읽은 다음 `for 루프`를 사용하여 해당 줄을 다른 파일에 저장했습니다. 또한,이초기`와 `항상`블록의 사용을 보았다. 이 섹션에서는 모든 기술을 결합하여 `순차적 디자인`의 예인 Mod-M 카운터의 결과를 저장합니다. Mod-m 카운터는 리스팅 6.4에서 논의됩니다. 이 리스팅에 대한 테스트벤치는 리스팅 9.6에 도시되어 있으며 파형은 도 9.7에 도시되어 있다. 목록은 이전 목록 9.2와 동일하지만 `항상 차단`은 `초기 블록`대신 사용되므로 디자인에 민감한 목록을 제공하고 테스트를 더 많이 제어 할 수 있습니다. 연속 클럭은 중요한 목록을 항상 블록(줄 19)으로 정의하지 않음으로써 19-26호선에서 생성됩니다. 이 시계는 28호선에서 사용됩니다. 또한 디자인의 결과가 원하는 결과(줄 35-36)와 일치하지 않는 경우에도 일부 메시지가 표시됩니다.

이러한 방식으로, 우리는 단지 단말 (그림 9.2 참조)을 읽는 것만으로 오류를 찾을 수 있습니다, 대신 결과가 너무 긴 경우 매우 어려울 수있는 전체 파형을 시각화 (도 9.3 참조). 또한 줄 35-36은 `초기 블록`의 `numref:`verilog_half_adder_tb_v`에도 추가할 수 있습니다. 테스트벤치는 시뮬레이션 용도로만 사용되기 때문에(합성용이 아님) 모든 Verilog 구문은 예를 들어 `for`, `display` 및 `monitor` 등의 키워드를 사용하여 테스트벤치를 작성하는 데 사용할 수 있습니다. 리스팅 9.3에서 `항상` 문은 테스트 벤치에서 사용됩니다. 입력 값과 해당 출력 값이 포함됩니다. 지정된 출력이 반 가산기에서 생성된 출력과 일치하지 않으면 오류가 표시됩니다. Exisiting MUX_2 예제 모듈을 사용하여 테스트 벤치를 만들어 보겠습니다. 위의 다이어그램을 참조하여 테스트 벤치 코드에 대한 템플릿을 만들 수 있습니다.

이제 이 모듈을 테스트하여 실제로 우리가 생각하는 것을 하고 있는지 확인하려면 테스트 벤치를 작성할 수 있습니다! _tb가 추가된 모듈과 동일한 모듈과 연결된 테스트 벤치의 이름을 지정하는 것이 좋습니다.