HDL과 검증

위 기술에서 sel이 X(불정)일 때 Verilog 시뮬레이션에서는 y에 b가 선택된다. 이 성질이 검증에서 문제가 되는 이유로 올바른 것은?

always @(*)
    if (sel) y = a;
    else     y = b;
  1. Ay가 반드시 X가 되어 시뮬레이션이 멈추기 때문
  2. Bsel이 X일 때는 실제 칩에서도 반드시 b가 선택되기 때문
  3. CX가 "거짓"으로 취급되어 b라는 확정된 값이 나오므로, sel이 불정이라는 오류가 시뮬레이션에서 보이지 않게 되기 때문
정답과 해설 보기

정답: C. X가 "거짓"으로 취급되어 b라는 확정된 값이 나오므로, sel이 불정이라는 오류가 시뮬레이션에서 보이지 않게 되기 때문

Verilog의 if문은 조건이 X일 때 거짓으로 취급하여 else 쪽을 실행합니다. 그래서 y에는 b라는 확정된 값이 나오고, sel이 불정이라는 오류가 시뮬레이션에서 가려집니다. 실제 회로에서 sel은 0이나 1 중 하나이며, a가 선택될 수도 있습니다. 이를 X 낙관주의(X-optimism)라고 하며, X를 전파하는 방식으로 기술하거나 X를 검출하는 어서션을 넣는 등으로 대처합니다.

  • A. y는 X가 되지 않고 b가 되어 버립니다.
  • B. 실제 칩에서는 a와 b 중 어느 쪽이 될지 알 수 없습니다.
  • C. 올바릅니다. X 낙관주의(X-optimism)라고 불리는 문제입니다.
이 분야 연습하기 분야로 돌아가기

HDL과 검증의 다른 문제

  1. HDL에서 Z(하이 임피던스)를 출력하는 트라이스테이트 기술에 대해 일반적으로 올바른 것은?
  2. HDL 검증에서 사용하는 테스트벤치의 설명으로 올바른 것은?
  3. 테스트벤치의 위 기술로 만들어지는 클록의 주기는 얼마인가? (시간 단위는 1 ns로 한다)
  4. 테스트벤치에서 회로에 대한 입력을 클록 상승과 같은 시각에 블로킹 대입으로 바꾸면 문제가 생길 수 있다. 주된 이유와 대책의 조합으로 올바른 것은?
  5. 자기 검사형(self-checking) 테스트벤치의 특징으로 올바른 것은?

이 분야의 비교