Menu
Coddy logo textTech

状態の定義

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

challenge icon

チャレンジ

信号機コントローラーは、特定の時間間隔で異なる信号状態(赤、黄、青)を順番に切り替える有限状態機械です。有限状態機械(FSM)とは、限られた数の状態のうちの1つになることができる回路です。入力または時間に基づいて、ある状態から別の状態へ変化します。

このプロジェクトでは、単純な交差点用の信号機コントローラーを構築します。信号機には3つの出力があります。

信号出力意味
赤red = 1停止
黄yellow = 1注意
青green = 1進行

信号は次の順序で切り替わります。

Green → Yellow → Red → Green → …

タイミングシーケンス

状態継続時間次の状態
Green30秒Yellow
Yellow10秒Red
Red40秒Green

このレッスンでは、信号機コントローラーの状態を定義します。

信号機には3つの可能な状態があります。

状態信号コード
Green青信号 ON2'b00
Yellow黄信号 ON2'b01
Red赤信号 ON2'b10

不足している部分を追加してモジュールを完成させてください。

行うこと:

状態エンコーディングを定義する:0=Green、1=Yellow、2=Red

  1. ​​stateという名前の2ビットレジスタを宣言する
  2. counterという名前の6ビットレジスタを宣言する(最大40秒のタイミング用)。このステップでは使用しません。これを使ってカウントするタイミングロジックは、このプロジェクトの後の「遷移のタイミング設定」ステップで追加します
  3. 組み合わせ always ブロック内に出力割り当てを追加し、その中に case (state) を記述する。red、yellow、greenはoutput regとして宣言されており、regはこのようなブロック内でのみ割り当てることができます。@(*)は、このブロックが読み取る値が変化するたびにブロックが再実行されることを意味します。ここでは、読み取られる値は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

自分で試してみよう

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

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ