Menu
Coddy logo textTech

状態の定義

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

challenge icon

チャレンジ

信号機コントローラー(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

  1. state という名前の2ビット `register` を `Declare` してください
  2. counter という名前の6ビット `register` を `Declare` してください(最大40秒までのタイミング用)
  3. 出力の `assignments` を追加してください:
    • `state` が 0 のとき: green = 1yellow = 0red = 0
    • `state` が 1 のとき: green = 0yellow = 1red = 0
    • `state` が 2 のとき: green = 0yellow = 0red = 1

自分で試してみよう

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

基礎のすべてのレッスン