HDL과 검증

조합 회로의 always 블록에서 의도하지 않은 래치를 막기 위해 자주 쓰는 방법은?

  1. A조건 분기를 가능한 한 많이 쓰고 else는 생략한다
  2. B블록 맨 앞에서 출력의 모든 신호에 기본값을 대입한 뒤 조건 분기를 작성한다
  3. C출력 신호를 모두 wire로 하고 always 안에서 대입한다
정답과 해설 보기

정답: B. 블록 맨 앞에서 출력의 모든 신호에 기본값을 대입한 뒤 조건 분기를 작성한다

블록 맨 앞에서 "y = 0; valid = 0;"처럼 출력에 기본값을 넣어 두면, 이후 조건 분기에서 어느 경로를 지나더라도 적어도 기본값이 대입되어 있으므로 값을 유지할 필요가 없어져 래치가 만들어지지 않습니다. 조건이 많은 상태 머신의 출력 기술 등에서 특히 유용합니다. SystemVerilog의 always_comb를 사용하면 래치가 만들어졌을 때 도구가 경고를 내 줍니다.

  • A. else를 생략하면 래치의 원인이 됩니다.
  • B. 올바릅니다. 어떤 경로에서도 반드시 값이 정해집니다.
  • C. wire는 always 안에서 대입할 수 없습니다.
이 분야 연습하기 분야로 돌아가기

HDL과 검증의 다른 문제

  1. 다음 Verilog 기술 중 논리 합성에서 회로가 되지 않고 무시되는 것(시뮬레이션용 기술)은?
  2. 위와 같이 8비트 d 안의 1의 개수를 세는 기술을 논리 합성하면 어떤 회로가 되는가?
  3. 위 기술의 리셋 종류와 동작으로 올바른 것은?
  4. 동기 리셋과 비동기 리셋의 차이로 올바른 것은?
  5. 비동기 리셋을 사용하는 회로에서 리셋 해제(0에서 1로의 변화)를 2단 플립플롭으로 클록에 동기시킨 뒤 각 회로에 분배하는 이유로 올바른 것은?

이 분야의 비교