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