HDL과 검증
조합 회로를 의도하여 위와 같이 작성했다. 발생할 수 있는 문제로 올바른 것은?
always @(a)
y = a & b;
- Ab는 회로에서 제거되고 y는 a와 같아진다
- B합성에서 오류가 발생하여 회로가 만들어지지 않는다
- Cb만 바뀌어도 시뮬레이션에서는 y가 갱신되지 않아, 합성한 회로(b가 바뀌면 y도 바뀜)와 동작이 어긋난다
정답과 해설 보기
정답: C. b만 바뀌어도 시뮬레이션에서는 y가 갱신되지 않아, 합성한 회로(b가 바뀌면 y도 바뀜)와 동작이 어긋난다
시뮬레이터는 감지 목록에 적힌 신호가 변할 때만 블록을 실행하므로, b만 바뀌었을 때는 y가 이전 값으로 남습니다. 반면 논리 합성은 목록을 보지 않고 블록의 내용으로 AND 게이트를 만들기 때문에, 실제 회로에서는 b의 변화도 y에 나타납니다. 시뮬레이션에서는 올바르게 보여도 회로는 다르게 동작하는 위험한 상태입니다. "@(*)"라고 쓰면 막을 수 있습니다.
- A. 합성은 AND 게이트를 만듭니다.
- B. 많은 합성 도구는 경고를 내면서 회로를 만듭니다.
- C. 올바릅니다. 감지 목록 누락의 전형적인 문제입니다.