状態の定義
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 79/90。
チャレンジ
信号機コントローラー(traffic light controller)は、特定のタイミング間隔で異なるライトの状態(赤、黄、青)を巡回する有限状態マシンです。有限状態マシン (FSM) とは、限られた数の状態(`state`)のいずれかをとることができる回路です。入力やタイミングに基づいて、ある状態から別の状態へと変化します。
このプロジェクトでは、シンプルな交差点の信号機コントローラーを作成します。信号機には3つの出力があります。
| 信号 | `Output` | 意味 |
|---|---|---|
| 赤 | red = 1 | 停止 |
| 黄 | yellow = 1 | 注意 |
| 青 | green = 1 | 進行 |
ライトは次の順序でサイクルします:
Green → Yellow → Red → Green → …
タイミングシーケンス
| `state` | 時間 | 次の `state` |
|---|---|---|
| `green` | 30秒 | `yellow` |
| `yellow` | 10秒 | `red` |
| `red` | 40秒 | `green` |
このレッスンでは、信号機コントローラーの状態を定義します。
信号機には3つの可能な状態があります:
| `state` | 信号 | コード |
|---|---|---|
| `green` | 青信号 点灯 | 2'b00 |
| `yellow` | 黄信号 点灯 | 2'b01 |
| `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