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
- A조건에 해당하지 않을 때는 현재 상태에 머무른다는 것을 나타내고, 모든 경우에 next의 값을 정해 래치를 막기 위해
- B상태를 매번 IDLE로 되돌리기 위해
- C클록을 멈추기 위해
정답과 해설 보기
정답: A. 조건에 해당하지 않을 때는 현재 상태에 머무른다는 것을 나타내고, 모든 경우에 next의 값을 정해 래치를 막기 위해
상태 머신을 상태를 갱신하는 레지스터 블록과 다음 상태를 정하는 조합 회로 블록으로 나누어 쓰는 것은 흔한 형태입니다. 조합 회로 쪽에서는 start나 done이 0일 때 next에 대한 대입이 없으면 래치가 만들어집니다. 맨 앞에서 "next = state;"로 해 두면 어떤 조건에도 해당하지 않을 때는 현재 상태에 머무른다는 의도를 분명히 나타내면서 래치를 막을 수 있습니다.
- A. 올바릅니다. 기본값을 먼저 정하고 있습니다.
- B. 현재 상태를 유지한다는 의미이며 IDLE로 되돌리는 것이 아닙니다.
- C. 클록과는 관계가 없습니다.