HDL과 검증

Verilog에서 "always @(*)"라고 쓰는 의미로 올바른 것은?

  1. A클록 상승 에지마다 실행되는 플립플롭을 나타낸다
  2. B시뮬레이션 시작 시 한 번만 실행된다
  3. C블록 안에서 읽는 신호 중 하나라도 바뀔 때마다 실행되는 조합 회로를 나타낸다
정답과 해설 보기

정답: C. 블록 안에서 읽는 신호 중 하나라도 바뀔 때마다 실행되는 조합 회로를 나타낸다

always 뒤의 @( ) 안은 감지 목록(sensitivity list)이라고 하며, 어떤 신호가 바뀔 때 블록을 실행할지 지정합니다. "*"라고 쓰면 블록 안에서 읽는 모든 신호가 자동으로 나열된 것이 되어 조합 회로를 올바르게 나타낼 수 있습니다. 직접 나열하면 누락이 생기기 쉬우므로, 조합 회로에는 "@(*)"나 SystemVerilog의 always_comb를 사용하는 것이 안전합니다.

  • A. 클록 에지를 지정하는 것은 posedge 등입니다.
  • B. 한 번만 실행되는 것은 initial입니다.
  • C. 올바릅니다. 읽는 신호를 모두 자동으로 나열한 것과 같습니다.
이 분야 연습하기 분야로 돌아가기

HDL과 검증의 다른 문제

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

이 분야의 비교