HDL과 검증
위 기술에서 sel이 X(불정)일 때 Verilog 시뮬레이션에서는 y에 b가 선택된다. 이 성질이 검증에서 문제가 되는 이유로 올바른 것은?
always @(*)
if (sel) y = a;
else y = b;
- Ay가 반드시 X가 되어 시뮬레이션이 멈추기 때문
- Bsel이 X일 때는 실제 칩에서도 반드시 b가 선택되기 때문
- 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)라고 불리는 문제입니다.