TL;DR;

$finish;를 이용하세요.

 

기본적으로 Verilog의 always 블럭은 영원히 돌아가게 되어있다.

그런데 만약 테스트 벤치에 특정 클럭 시점까지의 행동들만 들어있다면 그 이후에는 의미없는 행동이 계속 돌아갈 것이다.

Vivado나 Modelsim을 이용하는 경우라면 시뮬레이션 때 특정 단위의 클럭만큼 나누어 실행할 수 있지만 리눅스에서 iverilog를 이용한다면 Ctrl+C를 누르지 않는 한 시뮬레이터인 vvp가 영원히 돌아갈 것이다. 따라서 코드 단계에서 return 0;와 같은 프로그램의 종료 시점을 명시해주는 것이 편하다.

아래는 5클럭 주기로 간단한 Moore FSM을 돌리는 프로그램의 코드이다.

약 130클럭까지의 행동을 정해준 후 $finish;를 호출해 프로그램이 종료되도록 하였다.

 

 

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.