Menu
Coddy logo textTech

Tworzenie sygnałów testowych

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

Bodziec odnosi się do wartości wejściowych, które stosujesz w swoim projekcie, aby sprawdzić, czy działa poprawnie. Zmieniając dane wejściowe i obserwując dane wyjściowe, możesz zweryfikować, czy projekt zachowuje się zgodnie z oczekiwaniami.

Pomyśl o tym jak o testowaniu maszyny: naciskasz różne przyciski (bodziec) i obserwujesz, co się dzieje (wyjścia). Tworzenie dobrych bodźców jest niezbędnym elementem pisania testbencha.

Na przykład przyjrzyj się bodźcowi w następującym testbenchu:

module testbench;
  reg a, b;
  wire c;
  
  and_gate dut (
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin
    // BODZIEC ZACZYNA SIĘ TUTAJ
    
    // Przypadek testowy 1: Oba wejścia mają wartość 0
    a = 0; b = 0; #10;
    
    // Przypadek testowy 2: a=0, b=1
    a = 0; b = 1; #10;
    
    // Przypadek testowy 3: a=1, b=0
    a = 1; b = 0; #10;
    
    // Przypadek testowy 4: Oba wejścia mają wartość 1
    a = 1; b = 1; #10;

    // BODZIEC KOŃCZY SIĘ TUTAJ
    
    $finish;
  end
endmodule

Każdy bodziec jest stosowany, a następnie czekamy 10 jednostek czasu (#10) przed kolejnym bodźcem. Dzięki temu DUT ma czas na wygenerowanie wyjścia.

Metody tworzenia STIMULUS

MetodaNajlepsze zastosowaniePrzykład
Przypisania sekwencyjneProste testya = 0; b = 0; #10;
Pętla forTestowanie wszystkich kombinacjifor (i = 0; i < 4; i++)
Pętla repeatPowtarzające się wzorcerepeat (10) #5 clk = ~clk;
Pętla foreverSygnały ciągłeforever #5 clk = ~clk;

Metoda 1: Przypisania sekwencyjne

Najprostszy sposób na utworzenie STIMULUS. Przypisujesz wartości jedna po drugiej, z opóźnieniami.

initial begin
  a = 0; b = 0; #10;
  a = 0; b = 1; #10;
  a = 1; b = 0; #10;
  a = 1; b = 1; #10;
  $finish;
end

Metoda 2: Pętla for

Przydatna, gdy chcesz przetestować wszystkie możliwe kombinacje danych wejściowych.

integer i;

initial begin
  for (i = 0; i < 4; i = i + 1) begin
    {a, b} = i;
    #10;
  end
  $finish;
end

To testuje: 00, 01, 10, 11.

Metoda 3: Pętla repeat

Przydatna do wielokrotnego powtarzania tego samego bodźca.

initial begin
  a = 0; b = 1;
  repeat (10) begin
    #10 a = ~a;
  end
  $finish;
end

Metoda 4: Pętla nieskończona

Przydatna w przypadku ciągłych sygnałów, takich jak zegary.

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

Ważne zasady

ZasadaWyjaśnienie
Używaj opóźnień między przypisaniami sygnałów pobudzających#10 daje czas na reakcję DUT
Używaj reg dla sygnałów pobudzającychPonieważ zmieniają się w czasie
Dodaj $finish na końcuAby zatrzymać symulację
challenge icon

Wyzwanie

Otrzymujesz moduł bramki OR. Twoim zadaniem jest dodanie brakujących sygnałów pobudzających i instrukcji $display, aby wyświetlić wyniki.

Co zrobić:

Dodaj sygnały pobudzające, aby przetestować wszystkie cztery kombinacje wejść (00, 01, 10, 11):

  1. W każdym wierszu ustaw wartości dla x i y
  2. Dodaj #10, aby wprowadzić opóźnienie
  3. Dodaj $display, aby wyświetlić wynik

Instrukcja <strong>$display</strong> powinna wyglądać tak:

$display("%d %d | %d", x, y, z);

Spróbuj swoich sił

module or_gate (
  input x,
  input y,
  output z
);
  assign z = x | y;
endmodule

module testbench;
  reg x, y;
  wire z;
  
  or_gate dut (
    .x(x),
    .y(y),
    .z(z)
  );

  initial begin
    $display("x y | z");
    $display("---------");
    
    // TODO: Dodaj wymuszenie sygnałów i wyświetlenie wyniku dla 0 0
    
    // TODO: Dodaj wymuszenie sygnałów i wyświetlenie wyniku dla 0 1
    
    // TODO: Dodaj wymuszenie sygnałów i wyświetlenie wyniku dla 1 0
    
    // TODO: Dodaj wymuszenie sygnałów i wyświetlenie wyniku dla 1 1
    
    $finish;
  end
endmodule
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online