HDL과 검증
조합 회로의 always 블록에서 의도하지 않은 래치를 막기 위해 자주 쓰는 방법은?
- A조건 분기를 가능한 한 많이 쓰고 else는 생략한다
- B블록 맨 앞에서 출력의 모든 신호에 기본값을 대입한 뒤 조건 분기를 작성한다
- C출력 신호를 모두 wire로 하고 always 안에서 대입한다
정답과 해설 보기
정답: B. 블록 맨 앞에서 출력의 모든 신호에 기본값을 대입한 뒤 조건 분기를 작성한다
블록 맨 앞에서 "y = 0; valid = 0;"처럼 출력에 기본값을 넣어 두면, 이후 조건 분기에서 어느 경로를 지나더라도 적어도 기본값이 대입되어 있으므로 값을 유지할 필요가 없어져 래치가 만들어지지 않습니다. 조건이 많은 상태 머신의 출력 기술 등에서 특히 유용합니다. SystemVerilog의 always_comb를 사용하면 래치가 만들어졌을 때 도구가 경고를 내 줍니다.
- A. else를 생략하면 래치의 원인이 됩니다.
- B. 올바릅니다. 어떤 경로에서도 반드시 값이 정해집니다.
- C. wire는 always 안에서 대입할 수 없습니다.