Sprawdzanie stanów czterowartościowych
Część sekcji Projektowanie RTL i weryfikacja ścieżki Verilog w Coddy. Lekcja 26 z 38.
Testbench musi celowo obsługiwać wartości nieznane. Zwykłe porównanie może zwrócić X, co może ukryć błąd w warunku if. Porównania równości i nierówności case, === i !==, porównują dosłownie wszystkie cztery wartości i zwracają znaną wartość logiczną. Redukcja XOR, po której następuje porównanie case z X, może wykryć nieznane bity. Używaj ich jako kontroli w symulacji, a nie jako modelu sprzętu wykrywającego fizyczne wartości X.
Odpowiedni fragment; pozostałe deklaracje i połączenia podano w wyzwaniu.
if(actual !== expected) errors = errors + 1;Różnica obejmująca X lub Z jest zliczana, zamiast znikać w nieznanym warunku.
W modułach sprawdzających symulację stosuj jawne porównania czterostanowe i określ, jak należy traktować wartości nieznane.
Wyzwanie
ŚredniTo wyłącznie symulator sprawdzający, a nie syntezowalna logika toru danych. Ustaw mismatch, gdy actual i expected różnią się przy porównaniu czterowartościowym. Jeśli oba mają takie samo X lub Z w tych samych pozycjach, są uznawane za równe. Wynik musi always być znanym 0 lub 1. Kolumny wyjściowe: mismatch. Wszystkie wartości pobudzające są znanymi wartościami binarnymi.
Uzupełnij design.v i zachowaj nazwy modułów oraz porty. 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. Nie dodawaj do projektu wypisywania, opóźnień ani kończenia symulacji. Oczekiwany wynik to jeden wiersz wartości dziesiętnych dla każdej obserwacji, rozdzielonych pojedynczą spacją i zakończonych znakiem nowej linii.
Spróbuj swoich sił
module dut (input [3:0] actual, input [3:0] expected, output mismatch);
// Zastąp ten kod zastępczy swoim projektem.
assign mismatch = 0;
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