Menu
CoddyTech

Logika Mesin Status

Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 80 dari 90.

challenge icon

Tantangan

Dalam pelajaran ini, kamu akan menambahkan logika transisi state ke pengontrol lampu lalu lintas. Mesin state menentukan kapan berpindah dari satu state ke state berikutnya.

Logika mesin state mengontrol kapan dan bagaimana lampu lalu lintas berpindah state.

Urutan State

Hijau → Kuning → Merah → Hijau → …

Tugasmu adalah menambahkan logika mesin state ke module.

Pada langkah ini, sinyal input baru, next, memicu setiap perubahan. Penghitung waktu akan ditambahkan pada langkah berikutnya. Pertahankan semua yang kamu tulis pada langkah sebelumnya, yaitu register state, deklarasi counter yang belum digunakan, dan blok output always @(*).

Yang harus dilakukan:

  1. Tambahkan port input 1-bit bernama next ke header module, setelah reset: input next,. Testbench memberikan pulsa padanya untuk meminta state berikutnya
  2. Tambahkan blok always @(posedge clk or posedge reset)
  3. Saat reset, atur state ke Merah (2)
  4. Saat next bernilai 1, pindah ke state berikutnya:
    • Jika state adalah Hijau (0): ubah ke Kuning
    • Jika state adalah Kuning (1): ubah ke Merah
    • Jika state adalah Merah (2): ubah ke Hijau

Coba sendiri

module traffic_light (
  input clk,
  input reset,
  input next,           // Pemicu untuk mengubah state
  output reg red,
  output reg yellow,
  output reg green
);

  reg [1:0] state;

  // Penetapan output
  always @(*) begin
    case (state)
      0: begin green = 1; yellow = 0; red = 0; end
      1: begin green = 0; yellow = 1; red = 0; end
      2: begin green = 0; yellow = 0; red = 1; end
      default: begin green = 0; yellow = 0; red = 1; end
    endcase
  end

  // TODO: Tambahkan logika mesin state (tanpa pengaturan waktu)
  // always @(posedge clk or posedge reset) begin
  //   if (reset) begin
  //     state <= 2;
  //   end else if (next) begin
  //     case (state)
  //       0: state <= 1;
  //       1: state <= 2;
  //       2: state <= 0;
  //     endcase
  //   end
  // end

endmodule

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online