HDL과 검증
테스트벤치에서 회로에 대한 입력을 클록 상승과 같은 시각에 블로킹 대입으로 바꾸면 문제가 생길 수 있다. 주된 이유와 대책의 조합으로 올바른 것은?
- A회로가 바뀌기 전과 후 중 어느 값을 받아들이는지가 실행 순서에 따라 달라지기(경합) 때문. 입력은 클록 에지에서 조금 어긋나게 하거나 논블로킹 대입으로 바꾼다
- B클록 주파수가 자동으로 낮아지기 때문. 클록을 빠르게 한다
- C블로킹 대입은 테스트벤치에서 사용할 수 없기 때문. 모두 assign문으로 한다
정답과 해설 보기
정답: A. 회로가 바뀌기 전과 후 중 어느 값을 받아들이는지가 실행 순서에 따라 달라지기(경합) 때문. 입력은 클록 에지에서 조금 어긋나게 하거나 논블로킹 대입으로 바꾼다
같은 시각에 테스트벤치가 입력을 바꾸는 처리와 회로의 플립플롭이 입력을 받아들이는 처리가 일어나면, 시뮬레이터가 어느 쪽을 먼저 실행하느냐에 따라 받아들여지는 값이 이전 값이 되기도 하고 새로운 값이 되기도 합니다. 이는 시뮬레이션 경합(레이스)이며, 시뮬레이터에 따라 결과가 달라지기도 합니다. 입력을 하강 에지에서 바꾸거나, 조금 지연시키거나, 논블로킹 대입이나 SystemVerilog의 클로킹 블록을 사용하는 등으로 방지합니다.
- A. 올바릅니다. 시뮬레이션 경합(레이스)을 피하기 위한 방법입니다.
- B. 주파수가 바뀌는 것이 아닙니다.
- C. 테스트벤치에서도 블로킹 대입을 사용할 수 있습니다.