Menu
CoddyTech

Menulis Testbench

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

challenge icon

Tantangan

Dalam pelajaran ini, kamu akan membuat testbench untuk memverifikasi bahwa pengontrol lampu lalu lintas berfungsi dengan benar.

Yang harus dilakukan:

Buat testbench yang:

  1. Mendeklarasikan sinyal (reg untuk clk dan reset, wire untuk red, yellow, green)
  2. Membuat instance module traffic_light dengan nama uut
  3. Membuat clock yang berganti setiap 1 satuan waktu
  4. Menerapkan reset selama 2 satuan waktu, lalu menonaktifkannya
  5. Menjalankan simulasi selama 100 satuan waktu

Simulasi diperiksa berdasarkan hasil cetaknya, jadi blok initial juga harus menghasilkan baris-baris berikut secara tepat:

  1. Cetak Traffic Light Test dengan $display sebelum clock dan reset disiapkan
  2. Setelah 100 satuan waktu, cetak Test complete dengan $display
  3. Akhiri simulasi dengan $finish, yang menambahkan barisnya sendiri ke output

Coba sendiri

module traffic_light (
  input clk,
  input reset,
  output reg red,
  output reg yellow,
  output reg green
);

  reg [1:0] state;
  reg [5:0] counter;

  // 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

  // Mesin keadaan dengan pengaturan waktu
  always @(posedge clk or posedge reset) begin
    if (reset) begin
      state <= 2;
      counter <= 0;
    end else begin
      if (counter == 0) begin
        case (state)
          0: begin
            state <= 1;
            counter <= 10;
          end
          1: begin
            state <= 2;
            counter <= 40;
          end
          2: begin
            state <= 0;
            counter <= 30;
          end
        endcase
      end else begin
        counter <= counter - 1;
      end
    end
  end

endmodule

module testbench;
  // TODO: Deklarasikan reg untuk clk dan reset
  
  // TODO: Deklarasikan wire untuk red, yellow, green
  

  // TODO: Instansiasikan module traffic_light dengan nama uut
  // Hubungkan clk, reset, red, yellow, green
  

  // TODO: Buat clock (ubah nilainya setiap 1 satuan waktu)
  

  initial begin
    $display("Traffic Light Test");
    
    // TODO: Inisialisasi clk ke 0
    
    // TODO: Terapkan reset (reset=1 selama 2 satuan waktu, lalu reset=0)
    
    
    // TODO: Jalankan simulasi selama 100 satuan waktu
    
    
    $display("Test complete");
    $finish;
  end
endmodule

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online