Menu
Coddy logo textTech

状態の定義

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 79/90。

challenge icon

チャレンジ

信号機コントローラーは、特定の時間間隔で異なるライトの状態(赤、黄、青)を循環する有限状態マシンです。有限状態マシン(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

  1. state という名前の2ビットレジスタを宣言する
  2. counter という名前の6ビットレジスタを宣言する(最大40秒までのタイミング用)
  3. 出力の割り当てを追加する:
    • 状態が0のとき:green = 1, yellow = 0, red = 0
    • 状態が1のとき:green = 0, yellow = 1, red = 0
    • 状態が2のとき:green = 0, yellow = 0, red = 1

自分で試してみよう

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

基礎のすべてのレッスン