HDL과 검증

위 상태 머신 기술에서 두 번째 always 블록 맨 앞에 "next = state;"를 쓴 이유로 올바른 것은?

always @(posedge clk)
    state <= next;
always @(*) begin
    next = state;
    case (state)
        IDLE: if (start) next = RUN;
        RUN:  if (done)  next = IDLE;
    endcase
end
  1. A조건에 해당하지 않을 때는 현재 상태에 머무른다는 것을 나타내고, 모든 경우에 next의 값을 정해 래치를 막기 위해
  2. B상태를 매번 IDLE로 되돌리기 위해
  3. C클록을 멈추기 위해
정답과 해설 보기

정답: A. 조건에 해당하지 않을 때는 현재 상태에 머무른다는 것을 나타내고, 모든 경우에 next의 값을 정해 래치를 막기 위해

상태 머신을 상태를 갱신하는 레지스터 블록과 다음 상태를 정하는 조합 회로 블록으로 나누어 쓰는 것은 흔한 형태입니다. 조합 회로 쪽에서는 start나 done이 0일 때 next에 대한 대입이 없으면 래치가 만들어집니다. 맨 앞에서 "next = state;"로 해 두면 어떤 조건에도 해당하지 않을 때는 현재 상태에 머무른다는 의도를 분명히 나타내면서 래치를 막을 수 있습니다.

  • A. 올바릅니다. 기본값을 먼저 정하고 있습니다.
  • B. 현재 상태를 유지한다는 의미이며 IDLE로 되돌리는 것이 아닙니다.
  • C. 클록과는 관계가 없습니다.
이 분야 연습하기 분야로 돌아가기

HDL과 검증의 다른 문제

  1. 밀리(Mealy)형 상태 머신의 특징으로 올바른 것은?
  2. 상태 머신의 상태 부호화에서 원핫(one-hot) 부호화의 특징으로 올바른 것은?
  3. 3개의 상태를 가진 상태 머신에서 상태를 기억하는 데 필요한 플립플롭 수의 조합으로 올바른 것은? (바이너리 부호화/원핫 부호화)
  4. 위 4비트 카운터에서 count가 15일 때 클록이 상승하면 count는 얼마가 되는가?
  5. Verilog에서 8비트 신호 a와 b를 더하여 그 결과를 8비트 신호 s에 대입했다(assign s = a + b;). 주의할 점으로 올바른 것은?

이 분야의 비교