HDL과 검증

Verilog에서 대입 종류를 구분해 사용할 때의 일반적인 가이드라인으로 올바른 것은?

  1. A어디서나 블로킹 대입(=)만 사용한다
  2. B클록으로 동작하는 순차 회로에는 논블로킹 대입(<=), 조합 회로의 always에는 블로킹 대입(=)을 사용한다
  3. C하나의 always 안에서 두 가지를 무작위로 섞어서 사용한다
정답과 해설 보기

정답: B. 클록으로 동작하는 순차 회로에는 논블로킹 대입(<=), 조합 회로의 always에는 블로킹 대입(=)을 사용한다

순차 회로를 논블로킹 대입으로 작성하면 모든 플립플롭이 동시에 값을 받아들이는 회로의 동작과 일치하며, 기술 순서나 다른 always 블록과의 실행 순서에 따라 결과가 좌우되지 않습니다. 조합 회로에서는 위에서부터 순서대로 중간 값을 계산해 가는 방식이 자연스러우므로 블로킹 대입을 사용합니다. 하나의 always 블록 안에서 둘을 섞지 않는 것도 중요합니다.

  • A. 순차 회로에서 블로킹을 사용하면 의도와 다른 회로가 되기 쉽습니다.
  • B. 올바릅니다. 시뮬레이션과 회로의 동작을 일치시키기 쉬워집니다.
  • C. 섞으면 동작을 알기 어렵고 오류의 원인이 됩니다.
이 분야 연습하기 분야로 돌아가기

HDL과 검증의 다른 문제

  1. Verilog에서 "always @(*)"라고 쓰는 의미로 올바른 것은?
  2. 조합 회로를 의도하여 위와 같이 작성했다. 발생할 수 있는 문제로 올바른 것은?
  3. 조합 회로를 의도하여 위와 같이 작성하면 논리 합성으로 무엇이 만들어지는가?
  4. 위 기술에서 래치가 만들어지는 이유와 대책의 조합으로 올바른 것은?
  5. 조합 회로의 always 블록에서 의도하지 않은 래치를 막기 위해 자주 쓰는 방법은?

이 분야의 비교