Menu
Coddy logo textTech

Writing The Testbench

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 82 / 90.

challenge icon

Görev

Bu derste, traffic light denetleyicisinin doğru çalıştığını doğrulamak için bir testbench oluşturacaksın.

Yapılacaklar:

Şunları yapan bir testbench oluştur:

  1. Sinyalleri tanımla (clk ve reset için reg, red, yellow ve green için wire)
  2. traffic_light module'ünü uut adıyla örnekle
  3. Her 1 time biriminde bir kez değişen bir clock oluştur
  4. Reset'i 2 time birimi boyunca uygula, ardından serbest bırak
  5. simulation'ı 100 time birimi boyunca çalıştır

simulation, yazdırdığı çıktıya göre denetlendiğinden, initial block'unun da tam olarak şu satırları üretmesi gerekir:

  1. clock ve reset ayarlanmadan önce $display ile Traffic Light Test yazdır
  2. 100 time biriminden sonra $display ile Test complete yazdır
  3. Çıktıya kendi satırını ekleyen $finish ile simulation'ı sonlandır

Kendin dene

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

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

  // Çıkış atamaları
  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

  // Zamanlamalı durum makinesi
  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: clk ve reset için reg bildir
  
  // TODO: red, yellow, green için wire bildir
  

  // TODO: traffic_light modülünü uut adıyla örnekle
  // clk, reset, red, yellow, green bağla
  

  // TODO: Saat üret (her 1 zaman biriminde değiştir)
  

  initial begin
    $display("Traffic Light Test");
    
    // TODO: clk'yi 0'a başlat
    
    // TODO: Reset uygula (2 zaman birimi için reset=1, sonra reset=0)
    
    
    // TODO: Simülasyonu 100 zaman birimi çalıştır
    
    
    $display("Test complete");
    $finish;
  end
endmodule

Temeller bölümündeki tüm dersler

Kendi başına pratik yap: Online Verilog derleyicisi