상태 머신 로직
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 80번째.
챌린지
이 수업에서는 신호등 컨트롤러에 상태 전이 로직을 추가합니다. 상태 머신은 한 상태에서 다음 상태로 언제 이동할지 결정합니다.
상태 머신 로직은 신호등이 언제, 어떻게 상태를 변경할지 제어합니다.
상태 순서
초록 → 노랑 → 빨강 → 초록 → …
여러분의 과제는 모듈에 상태 머신 로직을 추가하는 것입니다.
이 단계에서는 새로운 입력 신호인 next가 각 변경을 트리거합니다. 타이밍 카운터는 다음 단계에서 추가합니다. 이전 단계에서 작성한 모든 내용(state 레지스터, 사용하지 않는 counter 선언 및 출력 always @(*) 블록)을 그대로 유지하세요.
할 일:
- 모듈 헤더에서
reset뒤에next라는 1비트 입력 포트를 추가하세요:input next,. 테스트벤치가 다음 상태를 요청하기 위해 이 신호를 펄스 형태로 보냅니다 always @(posedge clk or posedge reset)블록을 추가하세요- 리셋 시
state를 빨강(2)으로 설정하세요 next가 1이면 다음 상태로 이동하세요:- 상태가 초록(0)이면 노랑으로 변경
- 상태가 노랑(1)이면 빨강으로 변경
- 상태가 빨강(2)이면 초록으로 변경
직접 해보기
module traffic_light (
input clk,
input reset,
input next, // 상태 변경을 위한 트리거
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// 출력 할당
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// TODO: 상태 머신 로직 추가 (타이밍 없이)
// always @(posedge clk or posedge reset) begin
// if (reset) begin
// state <= 2;
// end else if (next) begin
// case (state)
// 0: state <= 1;
// 1: state <= 2;
// 2: state <= 0;
// endcase
// end
// end
endmodule기초의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러