Menu
Coddy logo textTech

Defining The States

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

challenge icon

チャレンジ

traffic light controllerは、特定の時間間隔で異なるライトの状態(Red、Yellow、Green)を順番に切り替える有限状態機械です。finite state machine (FSM)は、限られた数のstatesのいずれかになれる回路です。入力またはタイミングに基づいて、ある状態から別の状態へ変化します。

このプロジェクトでは、単純な交差点用のtraffic light controllerを構築します。traffic lightには3つの出力があります。

ライト出力意味
Redred = 1停止
Yellowyellow = 1注意
Greengreen = 1進行

ライトは次の順序で切り替わります。

Green → Yellow → Red → Green → …

タイミングシーケンス

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

このレッスンでは、traffic light controllerの状態を定義します。

traffic lightには3つの可能な状態があります。

状態ライトコード
GreenGreenライトON2'b00
YellowYellowライトON2'b01
RedRedライトON2'b10

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

行うこと:

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

  1. 2ビットのstateという名前のレジスタをDeclareします
  2. 6ビットのcounterという名前のレジスタをDeclareします(最大40秒のタイミング用)
  3. 組み合わせalwaysブロックalways @(*) begin ... endの内部に、case (state)を含めて出力の割り当てを追加します。redyellowgreenoutput regとして宣言されており、regはこのようなブロックの内部でのみ割り当てることができます。@(*)は、このブロックが読み取る値が変化するたびにブロックを再実行することを意味します。この場合はstateです。
    • 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: タスク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オンラインコンパイラ