상태 정의하기
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 79번째.
챌린지
신호등 컨트롤러(traffic light controller)는 특정 시간 간격에 따라 다양한 신호등 상태(Red, Yellow, Green)를 순환하는 유한 상태 머신입니다. 유한 상태 머신(FSM)은 한정된 수의 상태(state) 중 하나에 있을 수 있는 회로입니다. 입력이나 타이밍에 따라 한 상태에서 다른 상태로 전환됩니다.
이 프로젝트에서는 간단한 교차로용 신호등 컨트롤러를 만듭니다. 신호등에는 세 가지 출력이 있습니다:
| 신호등 | Output | 의미 |
|---|---|---|
| Red | red = 1 | 정지 |
| Yellow | yellow = 1 | 주의 |
| Green | green = 1 | 주행 |
신호등은 다음 순서로 순환합니다:
Green → Yellow → Red → Green → …
타이밍 시퀀스
| State | 지속 시간 | 다음 State |
|---|---|---|
| Green | 30초 | Yellow |
| Yellow | 10초 | Red |
| Red | 40초 | Green |
이 레슨에서는 신호등 컨트롤러의 상태를 정의합니다.
신호등에는 세 가지 가능한 상태가 있습니다:
| State | 신호등 | 코드 |
|---|---|---|
| Green | Green 등 켜짐 | 2'b00 |
| Yellow | Yellow 등 켜짐 | 2'b01 |
| Red | Red 등 켜짐 | 2'b10 |
빠진 부분을 추가하여 module을 완성하세요.
수행할 작업:
상태 인코딩 정의: 0=Green, 1=Yellow, 2=Red
state라는 이름의 2비트 register를 Declare하세요.counter라는 이름의 6비트 register를 Declare하세요. (최대 40초 타이밍용)- 출력 assignments를 추가하세요:
- state가 0일 때:
green = 1,yellow = 0,red = 0 - state가 1일 때:
green = 0,yellow = 1,red = 0 - state가 2일 때:
green = 0,yellow = 0,red = 1
- state가 0일 때:
직접 해보기
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// TODO: Task 1 - 상태 레지스터 선언 (2비트)
// TODO: Task 2 - 카운터 레지스터 선언 (6비트)
// TODO: Task 3 - case (state)를 사용한 출력 할당
// 상태 0: green=1, yellow=0, red=0
// 상태 1: green=0, yellow=1, red=0
// 상태 2: green=0, yellow=0, red=1
endmodule