상태 정의하기
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 79번째.
챌린지
신호등 컨트롤러는 특정 시간 간격에 따라 서로 다른 조명 상태(빨간색, 노란색, 초록색)를 순환하는 유한 상태 머신입니다. 유한 상태 머신(FSM)은 제한된 수의 상태 중 하나에 있을 수 있는 회로입니다. 입력이나 타이밍에 따라 한 상태에서 다른 상태로 변경됩니다.
이 프로젝트에서는 간단한 교차로를 위한 신호등 컨트롤러를 제작합니다. 신호등에는 세 가지 출력이 있습니다:
| 조명 | 출력 | 의미 |
|---|---|---|
| 빨간색 | red = 1 | 정지 |
| 노란색 | yellow = 1 | 주의 |
| 초록색 | green = 1 | 진행 |
조명은 다음 순서로 순환합니다:
Green → Yellow → Red → Green → …
타이밍 시퀀스
| 상태 | 지속 시간 | 다음 상태 |
|---|---|---|
| 초록색 | 30초 | 노란색 |
| 노란색 | 10초 | 빨간색 |
| 빨간색 | 40초 | 초록색 |
이 레슨에서는 신호등 컨트롤러의 상태를 정의합니다.
신호등에는 세 가지 가능한 상태가 있습니다:
| 상태 | 조명 | 코드 |
|---|---|---|
| 초록색 | 초록불 켜짐 | 2'b00 |
| 노란색 | 노란불 켜짐 | 2'b01 |
| 빨간색 | 빨간불 켜짐 | 2'b10 |
누락된 부분을 추가하여 모듈을 완성하세요.
수행할 작업:
상태 인코딩 정의: 0=Green, 1=Yellow, 2=Red
state라는 이름의 2비트 레지스터를 선언하세요.counter라는 이름의 6비트 레지스터를 선언하세요. (최대 40초까지 타이밍 측정용)- 출력 할당을 추가하세요:
- 상태가 0일 때:
green = 1,yellow = 0,red = 0 - 상태가 1일 때:
green = 0,yellow = 1,red = 0 - 상태가 2일 때:
green = 0,yellow = 0,red = 1
- 상태가 0일 때:
직접 해보기
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// TODO: 작업 1 - 상태 레지스터 선언 (2비트)
// TODO: 작업 2 - 카운터 레지스터 선언 (6비트)
// TODO: 작업 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