// 交通信号機のステートマシン module traffic_lights( clock, reset ); input clock, reset; reg [1:0] light; reg [3:0] cntr; // 状態の定義 parameter red = 'b00, blue = 'b01, yellow = 'b10; // 各状態の持続時間 parameter REDcount = 'h7, BLUEcount = 'h5, YELLOWcount = 'h1; // ステートマシンの定義 always @(posedge clock ) if ( reset ) begin light <= red; // 初期値は赤 cntr <= REDcount; // 赤の時間をセット end else case (light) red: begin // ライトが赤の時 if ( cntr == 0 ) begin light <= blue; cntr <= BLUEcount; end else cntr <= cntr-1; end blue: begin // ライトが青の時 if ( cntr == 0 ) begin light <= yellow; cntr <= YELLOWcount; end else cntr <= cntr-1; end yellow: begin // ライトが黄の時 if ( cntr == 0 ) begin light <= red; cntr <= REDcount; end else cntr <= cntr-1; end default: begin light <= red; // 変な状態は赤へ cntr <= REDcount; end endcase endmodule