Modele referencyjne i wyniki
Część sekcji Projektowanie RTL i weryfikacja ścieżki Verilog w Coddy. Lekcja 28 z 38.
Testbench z samokontrolą oblicza oczekiwane zachowanie niezależnie od wyjścia projektu. Model referencyjny może używać prostych działań arytmetycznych, nawet gdy implementacja ma inną strukturę. Tablica wyników zlicza obserwacje i niezgodności. Inicjalizuj jej liczniki raz na scenariusz i porównuj wyniki dopiero po ustaleniu się wyjścia projektu.
Odpowiedni fragment; pozostałe deklaracje i połączenia są podane w wyzwaniu.
expected = {1'b0,a} + {1'b0,b};
checked = checked + 1;
if(actual !== expected) errors = errors + 1;Oczekiwana wartość wynika z określonego zachowania wejścia, a nie z kopiowania wartości actual.
Obliczaj wartości oczekiwane niezależnie, próbkuj w określonym czasie i śledź każdy sprawdzony wynik.
Wyzwanie
ŚredniZaimplementuj kontrolę referencyjną dla bez znaku, czterobitowego sumatora. Oblicz pełne, pięciobitowe matematyczne a+b, a następnie zwróć ok=1 tylko wtedy, gdy actual dokładnie odpowiada temu wynikowi w porównaniu czterostanowym. Ten moduł zawiera wywoływane przez zablokowany testbench zadanie task, przeznaczone wyłącznie do symulacji. Kolumny wyjściowe: ok.
Uzupełnij design.v i zachowaj nazwy modułów oraz portów. Zablokowany testbench.v podaje zmiany wejść i wypisuje wyjścia po ich ustaleniu. Wybiera scenariusz za pomocą argumentu symulatora, takiego jak +CASE=1; standardowe wejście nie jest wymagane. Pozostaw wypisywanie i sterowanie scenariuszami w zablokowanym testbench; zaimplementuj tylko ciało zadania task. Oczekiwane wyjście to jeden wiersz wartości dziesiętnych na każdą obserwację, oddzielonych pojedynczą spacją i zakończonych znakiem nowej linii.
Spróbuj swoich sił
module dut;
task check_sum;
input [3:0] a,b;
input [4:0] actual;
output ok;
reg [4:0] expected;
begin
// Uzupełnij zadanie sprawdzające.
ok=0;
end
endtask
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Projektowanie RTL i weryfikacja
1Niezawodna logika kombinacyjna RTL
Wartości domyślne zapobiegają zatrzaskomKoder priorytetowyWeryfikacja kodu one-hotBezpieczne dekodowanie casePodsumowanie — router żądań2Szerokości i arytmetyka ze znakiem
Zachowywanie bitów przeniesieniaPorównania ze znakiemArytmetyczne przesunięcia w prawoPrzepełnienie i nasyceniePodsumowanie — różnica ze znakiem3Wielokrotnego użytku RTL
Funkcje kombinacyjneParametry bezpieczne pod względem szerokościPętle generateWarunkowe generatePodsumowanie – wielokrotnego użytku maska bitowa6Testbenche z autotestowaniem
Sprawdzanie stanów czterowartościowychWielokrotnego użytku zadania sprawdzająceModele referencyjne i wynikiPokrycie warunków brzegowych i sterowaniaPodsumowanie — audyt sumatoraPoćwicz samodzielnie: Kompilator Verilog online