Menu
Coddy logo textTech

Pisanie testbencha

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 82 z 90.

challenge icon

Wyzwanie

W tej lekcji utworzysz moduł testujący, aby sprawdzić, czy sterownik sygnalizacji świetlnej działa poprawnie.

Co należy zrobić:

Utwórz moduł testujący, który:

  1. Deklaruje sygnały (reg dla clk i reset, wire dla red, yellow, green)
  2. Tworzy instancję modułu traffic_light o nazwie uut
  3. Generuje zegar, który zmienia stan co 1 jednostkę czasu
  4. Utrzymuje reset przez 2 jednostki czasu, a następnie go zwalnia
  5. Uruchamia symulację przez 100 jednostek czasu

Symulacja jest sprawdzana na podstawie tego, co wypisuje, więc blok initial musi również wygenerować dokładnie te wiersze:

  1. Wypisz Traffic Light Test za pomocą $display przed ustawieniem zegara i resetu
  2. Po upływie 100 jednostek czasu wypisz Test complete za pomocą $display
  3. Zakończ symulację za pomocą $finish, które dodaje własny wiersz do wyniku

Spróbuj swoich sił

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

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

  // Przypisania wyjść
  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

  // Maszyna stanów z odmierzaniem czasu
  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: Zadeklaruj reg dla clk i reset
  
  // TODO: Zadeklaruj wire dla red, yellow, green
  

  // TODO: Utwórz instancję modułu traffic_light o nazwie uut
  // Podłącz clk, reset, red, yellow, green
  

  // TODO: Generuj sygnał zegarowy (zmieniaj stan co 1 jednostkę czasu)
  

  initial begin
    $display("Traffic Light Test");
    
    // TODO: Ustaw początkową wartość clk na 0
    
    // TODO: Zastosuj reset (reset=1 przez 2 jednostki czasu, następnie reset=0)
    
    
    // TODO: Uruchom symulację na 100 jednostek czasu
    
    
    $display("Test complete");
    $finish;
  end
endmodule

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online